Skip to main content

caches/
caches.rs

1use std::rc::Rc;
2
3use tiny_cache::{
4    FifoCache,
5    LRUCache,
6};
7
8fn main() {
9    let mut fifo = FifoCache::new(2);
10    for key in 0..2 {
11        fifo.insert(key, format!("Value {key}"));
12    }
13    fifo.insert(2, "Newest value".to_owned());
14    assert!(fifo.get(&0).is_none());
15    assert_eq!(fifo.len(), 2);
16    fifo.set_capacity(1);
17    assert_eq!(fifo.get(&1), None);
18    assert_eq!(fifo.len(), 1);
19
20    let mut shared = LRUCache::<String, u64>::default();
21    let first = shared
22        .utilize(1, &"greeting")
23        .unwrap_or_else(|| shared.insert(1, &"greeting", "Hello".to_owned()));
24    let second = shared
25        .utilize(2, &"greeting")
26        .unwrap_or_else(|| shared.insert(2, &"greeting", "Hello".to_owned()));
27    assert!(Rc::ptr_eq(&first, &second));
28
29    shared.remove(&1);
30    assert_eq!(shared.len(), 1);
31    shared.remove(&2);
32    assert!(shared.is_empty());
33    assert_eq!(first.as_str(), "Hello");
34}