///|
fn main raise {
// A BPMN choice allows automatic OR manual approval, not both.
let xml =
#|
#|
#|
#|
#|
#|
#|
let model = @lens.parse_bpmn(xml)
let net = model.to_petri_net()
let single = @lens.CaseTrace::new("good", [
@lens.LogEvent::new("g", "good", "manual", 0L, 1L),
])
let double = @lens.CaseTrace::new("bad", [
@lens.LogEvent::new("b1", "bad", "automatic", 0L, 1L),
@lens.LogEvent::new("b2", "bad", "manual", 2L, 3L),
])
assert_eq(single.align_net(net).cost, 0)
assert_eq(double.align_net(net).cost, 1)
let restored = @lens.parse_bpmn(model.to_bpmn()).to_petri_net()
assert_eq(double.align_net(restored).cost, 1)
println(
"BPMN approval: exclusive choice preserved; illegal double approval costs 1",
)
println(@lens.model_alignment_to_json(double.align_net(net)).stringify())
}