1import unittest
2
3from cachetools import FIFOCache
4
5from . import CacheTestMixin
6
7
8class LRUCacheTest(unittest.TestCase, CacheTestMixin):
9
10    Cache = FIFOCache
11
12    def test_fifo(self):
13        cache = FIFOCache(maxsize=2)
14
15        cache[1] = 1
16        cache[2] = 2
17        cache[3] = 3
18
19        self.assertEqual(len(cache), 2)
20        self.assertEqual(cache[2], 2)
21        self.assertEqual(cache[3], 3)
22        self.assertNotIn(1, cache)
23
24        cache[2]
25        cache[4] = 4
26        self.assertEqual(len(cache), 2)
27        self.assertEqual(cache[3], 3)
28        self.assertEqual(cache[4], 4)
29        self.assertNotIn(2, cache)
30
31        cache[5] = 5
32        self.assertEqual(len(cache), 2)
33        self.assertEqual(cache[4], 4)
34        self.assertEqual(cache[5], 5)
35        self.assertNotIn(3, cache)
36
37    def test_fifo_getsizeof(self):
38        cache = FIFOCache(maxsize=3, getsizeof=lambda x: x)
39
40        cache[1] = 1
41        cache[2] = 2
42
43        self.assertEqual(len(cache), 2)
44        self.assertEqual(cache[1], 1)
45        self.assertEqual(cache[2], 2)
46
47        cache[3] = 3
48
49        self.assertEqual(len(cache), 1)
50        self.assertEqual(cache[3], 3)
51        self.assertNotIn(1, cache)
52        self.assertNotIn(2, cache)
53
54        with self.assertRaises(ValueError):
55            cache[4] = 4
56        self.assertEqual(len(cache), 1)
57        self.assertEqual(cache[3], 3)
58