sled 0.16.0

a flash-sympathetic persistent lock-free B+ tree
#[inline]
pub(crate) fn binary_search_lub<'a, T, F>(
    s: &'a [T],
    f: F,
) -> Option<usize>
where
    F: FnMut(&'a T) -> ::std::cmp::Ordering,
{
    match s.binary_search_by(f) {
        Ok(i) => Some(i),
        Err(i) if i == 0 => None,
        Err(i) => Some(i - 1),
    }
}

#[test]
fn test_binary_search_lub() {
    let s = &*vec![4, 5, 6, 9];
    assert_eq!(binary_search_lub(s, |e| e.cmp(&1)), None);
    assert_eq!(binary_search_lub(s, |e| e.cmp(&4)), Some(0));
    assert_eq!(binary_search_lub(s, |e| e.cmp(&5)), Some(1));
    assert_eq!(binary_search_lub(s, |e| e.cmp(&7)), Some(2));
    assert_eq!(binary_search_lub(s, |e| e.cmp(&10)), Some(3));

    let s: &[u8] = &*vec![];
    assert_eq!(binary_search_lub(s, |e| e.cmp(&8)), None);
}