///|
fn main raise {
let events = []
// A production line has independent quality and packaging branches.
let paths = [
["receive", "quality", "package", "ship"],
["receive", "package", "quality", "ship"],
]
for c, labels in paths {
for i, activity in labels {
events.push(
@lens.LogEvent::new(
"e\{c}-\{i}",
"order\{c}",
activity,
(i * 10).to_int64(),
(i * 10 + 1).to_int64(),
),
)
}
}
let log = @lens.EventLog::new(events)
let net = log.discover_alpha()
let report = net.analyze()
assert_true(report.complete && report.all_states_can_complete)
let results = log.align_net(net)
assert_true(results.all(result => result.conforming))
let deviation = @lens.CaseTrace::new("bad", [
@lens.LogEvent::new("x1", "bad", "receive", 0L, 1L),
@lens.LogEvent::new("x2", "bad", "package", 2L, 3L),
@lens.LogEvent::new("x3", "bad", "ship", 4L, 5L),
])
assert_eq(deviation.align_net(net).cost, 1)
let exchange = @lens.parse_pnml(net.to_pnml())
assert_true(log.align_net(exchange).all(result => result.conforming))
println(
"Discovery: Alpha parallel model; both interleavings conform; missing quality costs 1; PNML roundtrip passed",
)
println(@lens.model_analysis_to_json(report).stringify())
}