use caches::{Cache, PutResult, TwoQueueCache};
fn main() {
let mut cache = TwoQueueCache::new(4).unwrap();
(1..=4).for_each(|i| {
assert_eq!(cache.put(i, i), PutResult::Put);
});
assert_eq!(cache.put(5, 5), PutResult::Put);
assert_eq!(cache.put(1, 1), PutResult::Update(1));
assert_eq!(cache.put(6, 6), PutResult::<i32, i32>::Put);
assert_eq!(cache.put(7, 7), PutResult::Evicted { key: 2, value: 2 });
assert_eq!(cache.put(2, 11), PutResult::Evicted { key: 3, value: 3 });
assert_eq!(cache.put(4, 11), PutResult::Update(4));
assert_eq!(cache.put(2, 22), PutResult::Update(11));
assert_eq!(cache.put(7, 77), PutResult::<i32, i32>::Update(7));
assert_eq!(
cache.put(6, 66),
PutResult::EvictedAndUpdate {
evicted: (5, 5),
update: 6
}
);
assert_eq!(cache.recent_len(), 0);
assert_eq!(cache.ghost_len(), 1);
assert_eq!(cache.frequent_len(), 4);
}