Comparison

tests/test_util_cache.lua @ 7016:e0a0af42b09f

util.cache (and tests): Call on_evict after insertion of the new key, so inside on_evict we can be more certain about the current state of the cache (i.e. full, new item added, old item removed)
author Matthew Wild <mwild1@gmail.com>
date Tue, 22 Dec 2015 20:10:07 +0000
parent 6946:31fb9eb9edce
child 7289:42e7545d5ae3
comparison
equal deleted inserted replaced
7012:990b4ddaf582 7016:e0a0af42b09f
168 assert_equal(k, keys[i]); 168 assert_equal(k, keys[i]);
169 assert_equal(v, values[i]); 169 assert_equal(v, values[i]);
170 end 170 end
171 assert_equal(i, 4); 171 assert_equal(i, 4);
172 172
173 173 local evicted_key, evicted_value;
174 local c = new(3, function (_key, _value)
175 evicted_key, evicted_value = _key, _value;
176 end);
177 local function set(k, v, should_evict_key, should_evict_value)
178 evicted_key, evicted_value = nil, nil;
179 c:set(k, v);
180 assert_equal(evicted_key, should_evict_key);
181 assert_equal(evicted_value, should_evict_value);
182 end
183 set("a", 1)
184 set("a", 1)
185 set("a", 1)
186 set("a", 1)
187 set("a", 1)
188
189 set("b", 2)
190 set("c", 3)
191 set("b", 2)
192 set("d", 4, "a", 1)
193 set("e", 5, "c", 3)
194
195
196 local evicted_key, evicted_value;
197 local c3 = new(1, function (_key, _value, c3)
198 evicted_key, evicted_value = _key, _value;
199 if _key == "a" then
200 -- Put it back in...
201 -- Check that the newest key/value was set before on_evict was called
202 assert_equal(c3:get("b"), 2);
203 -- Sanity check for what we're evicting
204 assert_equal(_key, "a");
205 assert_equal(_value, 1);
206 -- Re-insert the evicted key (causes this evict function to run again with "b",2)
207 c3:set(_key, _value)
208 assert_equal(c3:get(_key), _value)
209 end
210 end);
211 local function set(k, v, should_evict_key, should_evict_value)
212 evicted_key, evicted_value = nil, nil;
213 c3:set(k, v);
214 assert_equal(evicted_key, should_evict_key);
215 assert_equal(evicted_value, should_evict_value);
216 end
217 set("a", 1)
218 set("a", 1)
219 set("a", 1)
220 set("a", 1)
221 set("a", 1)
222
223 -- The evict handler re-inserts "a"->1, so "b" gets evicted:
224 set("b", 2, "b", 2)
225 -- Check the final state is what we expect
226 assert_equal(c3:get("a"), 1);
227 assert_equal(c3:get("b"), nil);
228 assert_equal(c3:count(), 1);
174 end 229 end