///|
fn run() -> Unit raise Error {
// Measurements are local, synthetic, and not distributed media assets.
let names = ["video", "caption", "music"]
let spans = [
@allen.Interval::new(0, 20),
@allen.Interval::new(3, 8),
@allen.Interval::new(10, 25),
]
let observed = @allen.observe(names, spans)
let policy = @allen.parse_dsl(
"interval video\ninterval caption\ninterval music\nrel caption video d caption-contained\nrel music video oi backing-track",
)
assert_eq(@allen.check_observations(policy, names, spans).length(), 0)
let combined = @allen.merge_networks(policy, observed)
let alg = @allen.Algebra::new()
match @allen.solve(alg, combined, @allen.SearchOptions::new()).outcome {
Satisfiable(w) => assert_true(w.satisfies(combined))
_ => fail("measurements should satisfy editorial policy")
}
let exchanged = @allen.parse_network_json(combined.to_json().stringify())
assert_true(exchanged.same_domains(combined))
println(combined.render())
println(combined.to_dot())
// A caption extending outside the clip is a concrete policy violation.
let changed = [
@allen.Interval::new(0, 20),
@allen.Interval::new(18, 23),
@allen.Interval::new(10, 25),
]
let conflicts = @allen.check_observations(policy, names, changed)
assert_eq(conflicts.length(), 1)
assert_eq(conflicts[0].observed.token(), "o")
let bad = @allen.add_observations(policy, names, changed)
let closed = @allen.propagate(alg, bad, @allen.PropagationOptions::new())
assert_true(closed.status is Contradiction)
assert_true(@allen.verify_trace(alg, bad, closed))
println(closed.to_json().stringify())
println("media: PASS")
}
///|
fn main {
run() catch {
e => {
println("media: \{e}")
abort("media failure")
}
}
}