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