// Test code #[allow(clippy::expect_used)] #[allow(clippy::panic)] fn populate_litemap<S>(map: &mut LiteMap<u32, u64, S>) where
S: StoreMut<u32, u64> + Debug,
{
assert_eq!(0, map.len());
assert!(map.is_empty()); for (k, v) in SORTED_DATA.iter() { #[allow(clippy::single_match)] // for clarity match map.try_append(*k, *v) {
Some(_) => panic!("appending sorted data: {k:?} to {map:?}"),
None => (), // OK
};
}
assert_eq!(10, map.len()); for (k, v) in RANDOM_DATA.iter() { #[allow(clippy::single_match)] // for clarity match map.try_append(*k, *v) {
Some(_) => (), // OK
None => panic!("cannot append random data: {k:?} to{map:?}"),
};
}
assert_eq!(10, map.len()); for (k, v) in RANDOM_DATA.iter() {
map.insert(*k, *v);
}
assert_eq!(20, map.len());
}
/// Tests that a litemap that uses the given store as backend has behavior consistent with the /// reference impl. /// /// Call this function in a test with the store impl to test as a valid backend for LiteMap. // Test code #[allow(clippy::expect_used)] pubfn check_store<'a, S>() where
S: StoreConstEmpty<u32, u64>
+ StoreMut<u32, u64>
+ StoreIterable<'a, u32, u64>
+ StoreFromIterator<u32, u64>
+ Clone
+ Debug
+ PartialEq
+ 'a,
{ letmut litemap_test: LiteMap<u32, u64, S> = LiteMap::new();
assert!(litemap_test.is_empty()); letmut litemap_std = LiteMap::<u32, u64>::new();
populate_litemap(&mut litemap_test);
populate_litemap(&mut litemap_std);
check_equivalence(litemap_test.clone().values, litemap_std.clone().values);
litemap_test
.remove(&175)
.ok_or(())
.expect_err("does not exist");
litemap_test.remove(&147).ok_or(()).expect("exists");
litemap_std
.remove(&175)
.ok_or(())
.expect_err("does not exist");
litemap_std.remove(&147).ok_or(()).expect("exists");
// Extend with entries that contain keys already present. // For repeated keys, the last value should remain. let overlapping_entries = [(2, 22), (4, 44), (1, 11)];
map.extend(overlapping_entries);
assert_eq!(map.len(), 4);
assert_eq!(map.get(&1), Some(&11));
assert_eq!(map.get(&2), Some(&22));
assert_eq!(map.get(&3), Some(&3));
assert_eq!(map.get(&4), Some(&44));
// Extend with an iterator that includes duplicate key entries. // The very last occurrence for a key should be the final value. let duplicate_entries = [(3, 333), (3, 3333), (5, 5)];
map.extend(duplicate_entries);
assert_eq!(map.len(), 5);
assert_eq!(map.get(&3), Some(&3333));
assert_eq!(map.get(&5), Some(&5));
// Extend with an empty iterator: the map should remain unchanged. let empty_entries: Vec<(u32, u64)> = Vec::new(); let map_clone = map.clone();
map.extend(empty_entries);
check_equivalence(map.values.clone(), map_clone.values.clone());
// Extend with the same values: the map should remain unchanged.
map.extend(map_clone.clone());
check_equivalence(map.values.clone(), map_clone.values);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.