use relmath::annotated::{BooleanSemiring, Semiring};
fn reachable_via_two_hop_or_direct(
direct: BooleanSemiring,
first_leg: BooleanSemiring,
second_leg: BooleanSemiring,
) -> BooleanSemiring {
direct.add(&first_leg.mul(&second_leg))
}
fn main() {
let direct = BooleanSemiring::FALSE;
let first_leg = BooleanSemiring::TRUE;
let second_leg = BooleanSemiring::TRUE;
let reachable = reachable_via_two_hop_or_direct(direct, first_leg, second_leg);
assert_eq!(reachable, BooleanSemiring::TRUE);
assert!(reachable.is_one());
assert!(!reachable.is_zero());
assert!(bool::from(reachable));
assert_eq!(BooleanSemiring::zero(), BooleanSemiring::FALSE);
assert_eq!(BooleanSemiring::one(), BooleanSemiring::TRUE);
println!(
"reachable after direct-or-two-hop combination: {}",
bool::from(reachable)
);
}