#![cfg(feature = "full")]
use qubit_function::comparator::{
ArcComparator,
BoxComparator,
Comparator,
RcComparator,
};
use std::cmp::Ordering;
#[test]
fn test_comparator_default_conversions_allow_relaxed_generic_types() {
#[derive(Clone, Debug)]
struct BorrowedRc<'a> {
value: &'a str,
}
#[derive(Clone, Debug)]
struct BorrowedRcComparator;
impl<'a> Comparator<BorrowedRc<'a>> for BorrowedRcComparator {
fn compare(
&self,
first: &BorrowedRc<'a>,
second: &BorrowedRc<'a>,
) -> Ordering {
first.value.cmp(second.value)
}
}
let left_text = String::from("left");
let right_text = String::from("right");
let left = BorrowedRc {
value: left_text.as_str(),
};
let right = BorrowedRc {
value: right_text.as_str(),
};
let comparator = BorrowedRcComparator;
assert_eq!(
qubit_function::comparator::BoxComparator::new(comparator.clone())
.compare(&left, &right),
Ordering::Less
);
assert_eq!(
qubit_function::comparator::RcComparator::new(comparator.clone())
.compare(&left, &right),
Ordering::Less
);
assert_eq!(
qubit_function::comparator::ArcComparator::new(comparator)
.compare(&left, &right),
Ordering::Less
);
}