use relmath::{BinaryRelation, UnaryRelation};
#[test]
fn computes_workflow_reachability() {
let step = BinaryRelation::from_pairs([
("Draft", "Review"),
("Review", "Approved"),
("Review", "Rejected"),
]);
let states = UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected"]);
let reachable = step.reflexive_transitive_closure(&states);
let draft = UnaryRelation::singleton("Draft");
assert!(reachable.contains(&"Draft", &"Draft"));
assert!(reachable.contains(&"Draft", &"Review"));
assert!(reachable.contains(&"Draft", &"Approved"));
assert!(reachable.contains(&"Draft", &"Rejected"));
let from_draft = reachable.image(&draft);
assert!(from_draft.contains(&"Draft"));
assert!(from_draft.contains(&"Review"));
assert!(from_draft.contains(&"Approved"));
assert!(from_draft.contains(&"Rejected"));
}