• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use hashlink::LruCache;
2 
3 #[test]
test_put_and_get()4 fn test_put_and_get() {
5     let mut cache = LruCache::new(2);
6     cache.insert(1, 10);
7     cache.insert(2, 20);
8     assert_eq!(cache.get_mut(&1), Some(&mut 10));
9     assert_eq!(cache.get_mut(&2), Some(&mut 20));
10     assert_eq!(cache.len(), 2);
11 }
12 
13 #[test]
test_put_update()14 fn test_put_update() {
15     let mut cache = LruCache::new(1);
16     cache.insert("1", 10);
17     cache.insert("1", 19);
18     assert_eq!(cache.get_mut("1"), Some(&mut 19));
19     assert_eq!(cache.len(), 1);
20 }
21 
22 #[test]
test_contains_key()23 fn test_contains_key() {
24     let mut cache = LruCache::new(1);
25     cache.insert("1", 10);
26     assert_eq!(cache.contains_key("1"), true);
27 }
28 
29 #[test]
test_expire_lru()30 fn test_expire_lru() {
31     let mut cache = LruCache::new(2);
32     cache.insert("foo1", "bar1");
33     cache.insert("foo2", "bar2");
34     cache.insert("foo3", "bar3");
35     assert!(cache.get_mut("foo1").is_none());
36     cache.insert("foo2", "bar2update");
37     cache.insert("foo4", "bar4");
38     assert!(cache.get_mut("foo3").is_none());
39 }
40 
41 #[test]
test_pop()42 fn test_pop() {
43     let mut cache = LruCache::new(2);
44     cache.insert(1, 10);
45     cache.insert(2, 20);
46     assert_eq!(cache.len(), 2);
47     let opt1 = cache.remove(&1);
48     assert!(opt1.is_some());
49     assert_eq!(opt1.unwrap(), 10);
50     assert!(cache.get_mut(&1).is_none());
51     assert_eq!(cache.len(), 1);
52 }
53 
54 #[test]
test_change_capacity()55 fn test_change_capacity() {
56     let mut cache = LruCache::new(2);
57     assert_eq!(cache.capacity(), 2);
58     cache.insert(1, 10);
59     cache.insert(2, 20);
60     cache.set_capacity(1);
61     assert!(cache.get_mut(&1).is_none());
62     assert_eq!(cache.capacity(), 1);
63 }
64 
65 #[test]
test_remove()66 fn test_remove() {
67     let mut cache = LruCache::new(3);
68     cache.insert(1, 10);
69     cache.insert(2, 20);
70     cache.insert(3, 30);
71     cache.insert(4, 40);
72     cache.insert(5, 50);
73     cache.remove(&3);
74     cache.remove(&4);
75     assert!(cache.get_mut(&3).is_none());
76     assert!(cache.get_mut(&4).is_none());
77     cache.insert(6, 60);
78     cache.insert(7, 70);
79     cache.insert(8, 80);
80     assert!(cache.get_mut(&5).is_none());
81     assert_eq!(cache.get_mut(&6), Some(&mut 60));
82     assert_eq!(cache.get_mut(&7), Some(&mut 70));
83     assert_eq!(cache.get_mut(&8), Some(&mut 80));
84 }
85 
86 #[test]
test_clear()87 fn test_clear() {
88     let mut cache = LruCache::new(2);
89     cache.insert(1, 10);
90     cache.insert(2, 20);
91     cache.clear();
92     assert!(cache.get_mut(&1).is_none());
93     assert!(cache.get_mut(&2).is_none());
94     assert!(cache.is_empty())
95 }
96 
97 #[test]
test_iter()98 fn test_iter() {
99     let mut cache = LruCache::new(3);
100     cache.insert(1, 10);
101     cache.insert(2, 20);
102     cache.insert(3, 30);
103     cache.insert(4, 40);
104     cache.insert(5, 50);
105     assert_eq!(
106         cache.iter().collect::<Vec<_>>(),
107         [(&3, &30), (&4, &40), (&5, &50)]
108     );
109     assert_eq!(
110         cache.iter_mut().collect::<Vec<_>>(),
111         [(&3, &mut 30), (&4, &mut 40), (&5, &mut 50)]
112     );
113     assert_eq!(
114         cache.iter().rev().collect::<Vec<_>>(),
115         [(&5, &50), (&4, &40), (&3, &30)]
116     );
117     assert_eq!(
118         cache.iter_mut().rev().collect::<Vec<_>>(),
119         [(&5, &mut 50), (&4, &mut 40), (&3, &mut 30)]
120     );
121 }
122 
123 #[test]
test_peek()124 fn test_peek() {
125     let mut cache = LruCache::new_unbounded();
126     cache.insert(1, 10);
127     cache.insert(2, 20);
128     cache.insert(3, 30);
129     cache.insert(4, 40);
130     cache.insert(5, 50);
131     cache.insert(6, 60);
132 
133     assert_eq!(cache.remove_lru(), Some((1, 10)));
134     assert_eq!(cache.peek(&2), Some(&20));
135     assert_eq!(cache.remove_lru(), Some((2, 20)));
136     assert_eq!(cache.peek_mut(&3), Some(&mut 30));
137     assert_eq!(cache.remove_lru(), Some((3, 30)));
138     assert_eq!(cache.get(&4), Some(&40));
139     assert_eq!(cache.remove_lru(), Some((5, 50)));
140 }
141 
142 #[test]
test_entry()143 fn test_entry() {
144     let mut cache = LruCache::new(4);
145 
146     cache.insert(1, 10);
147     cache.insert(2, 20);
148     cache.insert(3, 30);
149     cache.insert(4, 40);
150     cache.insert(5, 50);
151     cache.insert(6, 60);
152 
153     assert_eq!(cache.len(), 4);
154 
155     cache.entry(7).or_insert(70);
156     cache.entry(8).or_insert(80);
157     cache.entry(9).or_insert(90);
158 
159     assert!(cache.len() <= 5);
160 
161     cache.raw_entry_mut().from_key(&10).or_insert(10, 100);
162     cache.raw_entry_mut().from_key(&11).or_insert(11, 110);
163     cache.raw_entry_mut().from_key(&12).or_insert(12, 120);
164 
165     assert!(cache.len() <= 5);
166 }
167