extern crate bisection_key;
use bisection_key::BalancedKey;
#[test]
fn equality_of_keys() {
assert_eq!(BalancedKey::new("a"), BalancedKey::new("a"));
assert_ne!(BalancedKey::new("a"), BalancedKey::new("b"));
assert_eq!(BalancedKey::new("a"), BalancedKey::new("aT"));
assert_eq!(BalancedKey::new("aT"), BalancedKey::new("aT"));
}
#[test]
fn order_of_keys() {
assert!(BalancedKey::new("a") < BalancedKey::new("b"));
assert!(BalancedKey::new("a") == BalancedKey::new("aT"));
assert!(BalancedKey::new("b") > BalancedKey::new("a"));
assert!(BalancedKey::new("aT") < BalancedKey::new("b"));
assert!(BalancedKey::new("azzzzzz") < BalancedKey::new("b"));
}
#[test]
fn test_insertion_beginning() -> Result<(), String> {
let mut k = BalancedKey::default();
for _ in 0..1000 {
let next = k.bisect_beginning()?;
assert!(next < k);
k = next;
}
Ok(())
}
#[test]
fn test_insertion_end() -> Result<(), String> {
let mut k = BalancedKey::default();
for _ in 0..1000 {
let next = k.bisect_end()?;
assert!(k < next);
k = next;
}
Ok(())
}
#[test]
fn test_insertion_middle() -> Result<(), String> {
let mut left = BalancedKey::new("a")?;
let right = BalancedKey::new("b")?;
for _ in 0..1000 {
let next = left.bisect(&right)?;
assert!(left < next);
assert!(next < right);
left = next;
}
let left = BalancedKey::new("a")?;
let mut right = BalancedKey::new("b")?;
for _ in 0..1000 {
let next = left.bisect(&right)?;
assert!(left < next);
assert!(next < right);
right = next;
}
let mut left = BalancedKey::new("a")?;
let mut right = BalancedKey::new("b")?;
let mut prefer_left = true;
for _ in 0..1000 {
let next = left.bisect(&right)?;
assert!(left < next);
assert!(next < right);
if prefer_left {
left = next;
prefer_left = false;
} else {
right = next;
prefer_left = true
}
}
Ok(())
}