1import unittest
2
3from cachetools import MRUCache
4
5from . import CacheTestMixin
6
7
8class MRUCacheTest(unittest.TestCase, CacheTestMixin):
9
10    Cache = MRUCache
11
12    def test_evict__writes_only(self):
13        cache = MRUCache(maxsize=2)
14
15        cache[1] = 1
16        cache[2] = 2
17        cache[3] = 3  # Evicts 1 because nothing's been used yet
18
19        assert len(cache) == 2
20        assert 1 not in cache, "Wrong key was evicted. Should have been '1'."
21        assert 2 in cache
22        assert 3 in cache
23
24    def test_evict__with_access(self):
25        cache = MRUCache(maxsize=2)
26
27        cache[1] = 1
28        cache[2] = 2
29        cache[1]
30        cache[2]
31        cache[3] = 3  # Evicts 2
32        assert 2 not in cache, "Wrong key was evicted. Should have been '2'."
33        assert 1 in cache
34        assert 3 in cache
35
36    def test_evict__with_delete(self):
37        cache = MRUCache(maxsize=2)
38
39        cache[1] = 1
40        cache[2] = 2
41        del cache[2]
42        cache[3] = 3  # Doesn't evict anything because we just deleted 2
43
44        assert 2 not in cache
45        assert 1 in cache
46
47        cache[4] = 4  # Should evict 1 as we just accessed it with __contains__
48        assert 1 not in cache
49        assert 3 in cache
50        assert 4 in cache
51