use relmath::{BinaryRelation, UnaryRelation};
fn main() {
let step = BinaryRelation::from_pairs([
("Draft", "Review"),
("Review", "Approved"),
("Review", "Rejected"),
]);
let states =
UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected", "Archived"]);
let reachable = step.reflexive_transitive_closure(&states);
let draft = UnaryRelation::singleton("Draft");
assert!(reachable.contains(&"Archived", &"Archived"));
assert!(reachable.contains(&"Draft", &"Approved"));
println!(
"reachable from Draft: {:?}",
reachable.image(&draft).to_vec()
);
}