use std::cmp::Ordering;
pub struct SortedSetComparer;
impl SortedSetComparer {
#[inline]
pub fn compare(
(x_score, x_member): (&f64, &[u8]),
(y_score, y_member): (&f64, &[u8]),
) -> Ordering {
x_score
.total_cmp(y_score)
.then_with(|| x_member.cmp(y_member))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn orders_by_score_then_member() {
assert_eq!(
SortedSetComparer::compare((&1.0, b"a"), (&2.0, b"z")),
Ordering::Less
);
assert_eq!(
SortedSetComparer::compare((&1.0, b"a"), (&1.0, b"b")),
Ordering::Less
);
assert_eq!(
SortedSetComparer::compare((&1.0, b"b"), (&1.0, b"a")),
Ordering::Greater
);
assert_eq!(
SortedSetComparer::compare((&1.0, b"a"), (&1.0, b"a")),
Ordering::Equal
);
assert_eq!(
SortedSetComparer::compare((&-0.0, b"a"), (&0.0, b"a")),
Ordering::Less
);
}
}