1use relmath::{BinaryRelation, FiniteCarrier};
4
5fn main() {
6 let step = BinaryRelation::from_pairs([("Draft", "Review")]);
7 let states = FiniteCarrier::from_values(["Draft", "Review", "Archived"]);
8
9 let inferred = step.carrier();
10 let inferred_identity = BinaryRelation::identity(&inferred);
11 let explicit_identity = BinaryRelation::identity_on(&states);
12 let reachable = step.reflexive_transitive_closure_on(&states);
13
14 assert_eq!(inferred.to_vec(), vec!["Draft", "Review"]);
15 assert_eq!(
16 inferred_identity.to_vec(),
17 vec![("Draft", "Draft"), ("Review", "Review")]
18 );
19 assert_eq!(
20 explicit_identity.to_vec(),
21 vec![
22 ("Archived", "Archived"),
23 ("Draft", "Draft"),
24 ("Review", "Review"),
25 ]
26 );
27 assert_eq!(states.to_vec(), vec!["Archived", "Draft", "Review"]);
28 assert_eq!(
29 reachable.to_vec(),
30 step.reflexive_transitive_closure(&states.to_unary_relation())
31 .to_vec()
32 );
33 assert!(reachable.is_reflexive_on(&states));
34 assert!(step.is_irreflexive_on(&states));
35 assert!(reachable.contains(&"Archived", &"Archived"));
36 assert!(reachable.contains(&"Draft", &"Review"));
37
38 println!(
39 "explicit carrier: {:?}; inferred support: {:?}; inferred identity: {:?}; explicit identity: {:?}; reachable: {:?}",
40 states.to_vec(),
41 inferred.to_vec(),
42 inferred_identity.to_vec(),
43 explicit_identity.to_vec(),
44 reachable.to_vec()
45 );
46}