#![allow(missing_docs)]
#![cfg(feature = "range")]
use std::ops::Bound;
use generic_slab::Slab;
#[derive(Eq, PartialEq, Debug)]
struct Data(pub usize);
macro_rules! range_test {
($name:ident, $start:expr, $end:expr, $expected:expr) => {
#[test]
fn $name() {
let lookup = test_lookup_large();
let range: (Bound<usize>, Bound<usize>) = ($start.into(), $end.into());
let expected: Vec<usize> = $expected;
let actual = lookup.range(range).map(|(_, d)| d.0).collect::<Vec<_>>();
assert_eq!(expected, actual);
}
};
}
range_test!(
range_unbound_unbound,
Bound::Unbounded,
Bound::Unbounded,
vec![0, 1, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15]
);
range_test!(
range_included_unbound,
Bound::Included(7),
Bound::Unbounded,
vec![7, 8, 9, 10, 11, 12, 13, 14, 15]
);
range_test!(
range_excluded_unbound,
Bound::Excluded(7),
Bound::Unbounded,
vec![8, 9, 10, 11, 12, 13, 14, 15]
);
range_test!(
range_unbound_included,
Bound::Unbounded,
Bound::Included(7),
vec![0, 1, 3, 4, 7]
);
range_test!(
range_unbound_excluded,
Bound::Unbounded,
Bound::Excluded(7),
vec![0, 1, 3, 4]
);
range_test!(
range_included_included,
Bound::Included(7),
Bound::Included(10),
vec![7, 8, 9, 10, 11, 12, 13]
);
range_test!(
range_excluded_excluded,
Bound::Excluded(7),
Bound::Excluded(10),
vec![8, 9, 10, 11, 12]
);
range_test!(
range_included_excluded,
Bound::Included(7),
Bound::Excluded(10),
vec![7, 8, 9, 10, 11, 12]
);
range_test!(
range_excluded_included,
Bound::Excluded(7),
Bound::Included(10),
vec![8, 9, 10, 11, 12, 13]
);
range_test!(
range_included_excluded_edge_case,
Bound::Included(7),
Bound::Excluded(7),
vec![]
);
range_test!(
range_included_included_reverse,
Bound::Included(10),
Bound::Included(7),
vec![13, 14, 15, 0, 1, 3, 4, 7]
);
fn test_lookup_large() -> Slab<Data> {
let mut lookup = Slab::<Data>::new();
lookup.insert(Data(0));
lookup.insert(Data(1));
let handle2 = lookup.insert(Data(2));
lookup.insert(Data(3));
lookup.insert(Data(4));
let handle5 = lookup.insert(Data(5));
let handle6 = lookup.insert(Data(6));
lookup.insert(Data(7));
lookup.insert(Data(8));
lookup.remove(handle5);
lookup.remove(handle2);
lookup.remove(handle6);
lookup.insert(Data(9));
lookup.insert(Data(10));
lookup.insert(Data(11));
lookup.insert(Data(12));
lookup.insert(Data(13));
lookup.insert(Data(14));
lookup.insert(Data(15));
lookup
}