1use relmath::{BinaryRelation, UnaryRelation};
4
5fn main() {
6 let step = BinaryRelation::from_pairs([
7 ("Draft", "Review"),
8 ("Review", "Approved"),
9 ("Review", "Rejected"),
10 ]);
11
12 let states =
13 UnaryRelation::from_values(["Draft", "Review", "Approved", "Rejected", "Archived"]);
14 let reachable = step.reflexive_transitive_closure(&states);
15 let draft = UnaryRelation::singleton("Draft");
16
17 assert!(reachable.contains(&"Archived", &"Archived"));
18 assert!(reachable.contains(&"Draft", &"Approved"));
19
20 println!(
21 "reachable from Draft: {:?}",
22 reachable.image(&draft).to_vec()
23 );
24}