extern crate bisection_key;
use bisection_key::LexiconKey;
#[test]
fn equality_of_keys() {
assert_eq!(LexiconKey::new("a"), LexiconKey::new("a"));
assert_ne!(LexiconKey::new("a"), LexiconKey::new("b"));
assert_ne!(LexiconKey::new("a"), LexiconKey::new("aT"));
assert_eq!(LexiconKey::new("aT"), LexiconKey::new("aT"));
}
#[test]
fn order_of_keys() {
assert!(LexiconKey::new("a") < LexiconKey::new("b"));
assert!(LexiconKey::new("a") < LexiconKey::new("aT"));
assert!(LexiconKey::new("b") > LexiconKey::new("a"));
assert!(LexiconKey::new("aT") < LexiconKey::new("b"));
assert!(LexiconKey::new("azzzzzz") < LexiconKey::new("b"));
}
#[test]
fn test_insertion_beginning() -> Result<(), String> {
let mut k = LexiconKey::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 = LexiconKey::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 = LexiconKey::new("a")?;
let right = LexiconKey::new("b")?;
for _ in 0..1000 {
let next = left.bisect(&right)?;
assert!(left < next);
assert!(next < right);
left = next;
}
let left = LexiconKey::new("a")?;
let mut right = LexiconKey::new("b")?;
for _ in 0..1000 {
let next = left.bisect(&right)?;
assert!(left < next);
assert!(next < right);
right = next;
}
let mut left = LexiconKey::new("a")?;
let mut right = LexiconKey::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(())
}