use qlrumap::LruMap;
fn init_test_map() -> LruMap<&'static str, u32> {
let mut map = LruMap::new();
map.insert("a", 10); map.insert("b", 20);
map.insert("c", 30);
map
}
#[test]
fn immutable() {
let map = init_test_map();
let collected: Vec<_> = map.iter().collect();
assert_eq!(
collected,
vec![(&"c", &30), (&"b", &20), (&"a", &10)],
"iter() did not yield items in youngest-to-oldest order"
);
let mut count = 0;
for _ in &map {
count += 1;
}
assert_eq!(count, 3, "Iteration over &map should visit all items");
assert_eq!(
map.len(),
3,
"Map should not be consumed by immutable iteration"
);
}
#[test]
fn mutable() {
let mut map = init_test_map();
#[expect(clippy::explicit_iter_loop)]
for (key, val) in map.iter_mut() {
if *key == "b" {
*val *= 2; }
}
let collected_after_mut: Vec<_> = map.iter().collect();
assert_eq!(
collected_after_mut,
vec![(&"c", &30), (&"b", &40), (&"a", &10)],
"Mutable iterator did not correctly modify the value"
);
assert_eq!(
map.len(),
3,
"Map should not be consumed by mutable iteration"
);
}
#[test]
fn consuming() {
let map = init_test_map();
let mut collected_owned = vec![];
for (k, v) in map {
collected_owned.push((k, v));
}
assert_eq!(
collected_owned,
vec![("c", 30), ("b", 20), ("a", 10)],
"Consuming iterator did not yield items in youngest-to-oldest order"
);
}