use hashlink::LruCache;
#[ test]
fn test_put_and_get() {
let mut cache = LruCache::new(2 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
assert_eq!(cache.get_mut(&1 ), Some(&mut 10 ));
assert_eq!(cache.get_mut(&2 ), Some(&mut 20 ));
assert_eq!(cache.len(), 2 );
}
#[ test]
fn test_put_update() {
let mut cache = LruCache::new(1 );
cache.insert("1" , 10 );
cache.insert("1" , 19 );
assert_eq!(cache.get_mut("1" ), Some(&mut 19 ));
assert_eq!(cache.len(), 1 );
}
#[ test]
fn test_contains_key() {
let mut cache = LruCache::new(1 );
cache.insert("1" , 10 );
assert_eq!(cache.contains_key("1" ), true );
}
#[ test]
fn test_expire_lru() {
let mut cache = LruCache::new(2 );
cache.insert("foo1" , "bar1" );
cache.insert("foo2" , "bar2" );
cache.insert("foo3" , "bar3" );
assert!(cache.get_mut("foo1" ).is_none());
cache.insert("foo2" , "bar2update" );
cache.insert("foo4" , "bar4" );
assert!(cache.get_mut("foo3" ).is_none());
}
#[ test]
fn test_pop() {
let mut cache = LruCache::new(2 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
assert_eq!(cache.len(), 2 );
let opt1 = cache.remove(&1 );
assert!(opt1.is_some());
assert_eq!(opt1.unwrap(), 10 );
assert!(cache.get_mut(&1 ).is_none());
assert_eq!(cache.len(), 1 );
}
#[ test]
fn test_change_capacity() {
let mut cache = LruCache::new(2 );
assert_eq!(cache.capacity(), 2 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.set_capacity(1 );
assert!(cache.get_mut(&1 ).is_none());
assert_eq!(cache.capacity(), 1 );
}
#[ test]
fn test_remove() {
let mut cache = LruCache::new(3 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.insert(3 , 30 );
cache.insert(4 , 40 );
cache.insert(5 , 50 );
cache.remove(&3 );
cache.remove(&4 );
assert!(cache.get_mut(&3 ).is_none());
assert!(cache.get_mut(&4 ).is_none());
cache.insert(6 , 60 );
cache.insert(7 , 70 );
cache.insert(8 , 80 );
assert!(cache.get_mut(&5 ).is_none());
assert_eq!(cache.get_mut(&6 ), Some(&mut 60 ));
assert_eq!(cache.get_mut(&7 ), Some(&mut 70 ));
assert_eq!(cache.get_mut(&8 ), Some(&mut 80 ));
}
#[ test]
fn test_clear() {
let mut cache = LruCache::new(2 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.clear();
assert!(cache.get_mut(&1 ).is_none());
assert!(cache.get_mut(&2 ).is_none());
assert!(cache.is_empty())
}
#[ test]
fn test_iter() {
let mut cache = LruCache::new(3 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.insert(3 , 30 );
cache.insert(4 , 40 );
cache.insert(5 , 50 );
assert_eq!(
cache.iter().collect::<Vec<_>>(),
[(&3 , &30 ), (&4 , &40 ), (&5 , &50 )]
);
assert_eq!(
cache.iter_mut().collect::<Vec<_>>(),
[(&3 , &mut 30 ), (&4 , &mut 40 ), (&5 , &mut 50 )]
);
assert_eq!(
cache.iter().rev().collect::<Vec<_>>(),
[(&5 , &50 ), (&4 , &40 ), (&3 , &30 )]
);
assert_eq!(
cache.iter_mut().rev().collect::<Vec<_>>(),
[(&5 , &mut 50 ), (&4 , &mut 40 ), (&3 , &mut 30 )]
);
}
#[ test]
fn test_peek() {
let mut cache = LruCache::new_unbounded();
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.insert(3 , 30 );
cache.insert(4 , 40 );
cache.insert(5 , 50 );
cache.insert(6 , 60 );
assert_eq!(cache.remove_lru(), Some((1 , 10 )));
assert_eq!(cache.peek(&2 ), Some(&20 ));
assert_eq!(cache.remove_lru(), Some((2 , 20 )));
assert_eq!(cache.peek_mut(&3 ), Some(&mut 30 ));
assert_eq!(cache.remove_lru(), Some((3 , 30 )));
assert_eq!(cache.get(&4 ), Some(&>40 ));
assert_eq!(cache.remove_lru(), Some((5 , 50 )));
}
#[ test]
fn test_entry() {
let mut cache = LruCache::new(4 );
cache.insert(1 , 10 );
cache.insert(2 , 20 );
cache.insert(3 , 30 );
cache.insert(4 , 40 );
cache.insert(5 , 50 );
cache.insert(6 , 60 );
assert_eq!(cache.len(), 4 );
cache.entry(7 ).or_insert(70 );
cache.entry(8 ).or_insert(80 );
cache.entry(9 ).or_insert(90 );
assert!(cache.len() <= 5 );
cache.raw_entry_mut().from_key(&10 ).or_insert(10 , 100 );
cache.raw_entry_mut().from_key(&11 ).or_insert(11 , 110 );
cache.raw_entry_mut().from_key(&12 ).or_insert(12 , 120 );
assert!(cache.len() <= 5 );
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-19)
¤
*© Formatika GbR, Deutschland