use super::*;
#[derive(Eq, PartialEq, Ord, PartialOrd)]
struct Key<'a> {
x: u64,
s: &'a str,
}
impl<'a> Comparable<(u64, String)> for Key<'a> {
fn compare(&self, k: &(u64, String)) -> Ordering {
let o = self.x.compare(&k.0);
if o != Ordering::Equal {
return o;
}
self.s.compare(&k.1)
}
}
impl<'a> Equivalent<(u64, String)> for Key<'a> {
fn equivalent(&self, k: &(u64, String)) -> bool {
self.x == k.0 && self.s == k.1
}
}
#[test]
fn test_comparable() {
let mut m = BTreeMap::<(u64, String), u64>::new();
m.insert((99, String::from("hello")), 98);
m.insert((99, String::from("george")), 98);
println!("m={:?}", m);
let x = m.get(&Key { x: 99, s: "hello" });
println!("x={:?}", x);
let start = &Key { x: 99, s: "aaa" };
let end = &Key { x: 100, s: "hello" };
for (k, v) in m.range::<Key, _>(start..end) {
println!("k={:?} v={:?}", k, v);
}
}