///|
fn main raise {
// Unordered ERP observations: case IDs prevent cross-order adjacency.
let log = @lens.EventLog::new([
@lens.LogEvent::new("a3", "order-a", "ship", 10L, 11L),
@lens.LogEvent::new("b2", "order-b", "ship", 3L, 4L),
@lens.LogEvent::new("a1", "order-a", "create", 0L, 1L),
@lens.LogEvent::new("a2", "order-a", "approve", 4L, 6L),
@lens.LogEvent::new("b1", "order-b", "create", 0L, 1L),
])
let graph = log.discover()
assert_eq(graph.variants.length(), 2)
let model = @lens.ReferencePath::new("approved-order", [
"create", "approve", "ship",
])
let traces = log.traces()
let compliant = traces[0].align([model])
let deviation = traces[1].align([model])
assert_eq(compliant.cost, 0)
assert_eq(deviation.cost, 1)
assert_true(deviation.moves.contains(@lens.Missing(activity="approve")))
assert_eq(log.performance().cases[0].idle_time, 7L)
println(@lens.process_map_to_json(graph).stringify())
println(@lens.alignment_to_json(deviation).stringify())
println(@lens.performance_to_json(log.performance()).stringify())
}