1use relmath::annotated::{BooleanSemiring, Semiring};
4
5fn reachable_via_two_hop_or_direct(
6 direct: BooleanSemiring,
7 first_leg: BooleanSemiring,
8 second_leg: BooleanSemiring,
9) -> BooleanSemiring {
10 direct.add(&first_leg.mul(&second_leg))
11}
12
13fn main() {
14 let direct = BooleanSemiring::FALSE;
15 let first_leg = BooleanSemiring::TRUE;
16 let second_leg = BooleanSemiring::TRUE;
17
18 let reachable = reachable_via_two_hop_or_direct(direct, first_leg, second_leg);
19
20 assert_eq!(reachable, BooleanSemiring::TRUE);
21 assert!(reachable.is_one());
22 assert!(!reachable.is_zero());
23 assert!(bool::from(reachable));
24 assert_eq!(BooleanSemiring::zero(), BooleanSemiring::FALSE);
25 assert_eq!(BooleanSemiring::one(), BooleanSemiring::TRUE);
26
27 println!(
28 "reachable after direct-or-two-hop combination: {}",
29 bool::from(reachable)
30 );
31}