in src/compiler/args.rs [861:914]
fn test_bsearch() {
let data = vec![
("bar", 1),
("foo", 2),
("fuga", 3),
("hoge", 4),
("plop", 5),
("qux", 6),
("zorglub", 7),
];
for item in &data {
assert_eq!(bsearch(item.0, &data, |i, k| i.0.cmp(k)), Some(item));
}
// Try again with an even number of items
let data = &data[..6];
for item in data {
assert_eq!(bsearch(item.0, data, |i, k| i.0.cmp(k)), Some(item));
}
// Once more, with prefix matches
let data = vec![
("a", 1),
("ab", 2),
("abc", 3),
("abd", 4),
("abe", 5),
("abef", 6),
("abefg", 7),
];
for item in &data {
assert_eq!(
bsearch(item.0, &data, |i, k| if k.starts_with(i.0) {
Ordering::Equal
} else {
i.0.cmp(k)
}),
Some(item)
);
}
// Try again with an even number of items
let data = &data[..6];
for item in data {
assert_eq!(
bsearch(item.0, data, |i, k| if k.starts_with(i.0) {
Ordering::Equal
} else {
i.0.cmp(k)
}),
Some(item)
);
}
}