in gazebo/src/cmp.rs [232:302]
fn cmp_eq_chain() {
struct FakeComparable(
Box<dyn Fn() -> Ordering>,
Box<dyn Fn() -> Ordering>,
Box<dyn Fn() -> Ordering>,
);
impl PartialEq for FakeComparable {
fn eq(&self, _other: &Self) -> bool {
eq_chain!(
(self.0)() == Ordering::Equal,
(self.1)() == Ordering::Equal,
(self.2)() == Ordering::Equal,
)
}
}
impl Eq for FakeComparable {}
impl PartialOrd for FakeComparable {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl Ord for FakeComparable {
fn cmp(&self, _other: &Self) -> Ordering {
cmp_chain! {
(self.0)(),
(self.1)(),
(self.2)(),
}
}
}
let fake = FakeComparable(
Box::new(|| Ordering::Less),
Box::new(|| unreachable!("should return less")),
Box::new(|| unreachable!("should return less")),
);
assert_eq!(fake.cmp(&fake), Ordering::Less);
assert_eq!(fake.eq(&fake), false);
let fake = FakeComparable(
Box::new(|| Ordering::Greater),
Box::new(|| unreachable!("should return less")),
Box::new(|| unreachable!("should return less")),
);
assert_eq!(fake.cmp(&fake), Ordering::Greater);
assert_eq!(fake.eq(&fake), false);
let fake = FakeComparable(
Box::new(|| Ordering::Equal),
Box::new(|| Ordering::Less),
Box::new(|| unreachable!("should return less")),
);
assert_eq!(fake.cmp(&fake), Ordering::Less);
assert_eq!(fake.eq(&fake), false);
let fake = FakeComparable(
Box::new(|| Ordering::Equal),
Box::new(|| Ordering::Equal),
Box::new(|| Ordering::Greater),
);
assert_eq!(fake.cmp(&fake), Ordering::Greater);
assert_eq!(fake.eq(&fake), false);
let fake = FakeComparable(
Box::new(|| Ordering::Equal),
Box::new(|| Ordering::Equal),
Box::new(|| Ordering::Equal),
);
assert_eq!(fake.cmp(&fake), Ordering::Equal);
assert_eq!(fake.eq(&fake), true);
}