diff options
author | Thomas Kemmer <tkemmer@computer.org> | 2014-09-18 06:27:08 +0200 |
---|---|---|
committer | Thomas Kemmer <tkemmer@computer.org> | 2014-09-23 11:01:28 +0200 |
commit | e255ae776117772c35dfa54db3acd2410658ba8b (patch) | |
tree | d7d34e38734b3518c775dd79e4a85ef33b8e72a4 /tests | |
parent | a8d2b038f3331da782c73ed5755dc3f3d363d8fa (diff) | |
download | cachetools-e255ae776117772c35dfa54db3acd2410658ba8b.tar.gz |
Fix #6: Non-mutating TTLCache.__getitem__()
Diffstat (limited to 'tests')
-rw-r--r-- | tests/__init__.py | 50 | ||||
-rw-r--r-- | tests/test_lrucache.py | 51 | ||||
-rw-r--r-- | tests/test_ttlcache.py | 73 |
3 files changed, 117 insertions, 57 deletions
diff --git a/tests/__init__.py b/tests/__init__.py index 4ab4a11..7048bfd 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -124,3 +124,53 @@ class CacheTestMixin(object): self.assertEqual(1, len(cache)) self.assertEqual(3, cache.currsize) self.assertEqual(3, cache[3]) + + +class LRUCacheTestMixin(CacheTestMixin): + + def test_lru_insert(self): + cache = self.make_cache(maxsize=2) + + cache[1] = 1 + cache[2] = 2 + cache[3] = 3 + + self.assertEqual(len(cache), 2) + self.assertEqual(cache[2], 2) + self.assertEqual(cache[3], 3) + self.assertNotIn(1, cache) + + cache[2] + cache[4] = 4 + self.assertEqual(len(cache), 2) + self.assertEqual(cache[2], 2) + self.assertEqual(cache[4], 4) + self.assertNotIn(3, cache) + + cache[5] = 5 + self.assertEqual(len(cache), 2) + self.assertEqual(cache[4], 4) + self.assertEqual(cache[5], 5) + self.assertNotIn(2, cache) + + def test_lru_getsizeof(self): + cache = self.make_cache(maxsize=3, getsizeof=lambda x: x) + + cache[1] = 1 + cache[2] = 2 + + self.assertEqual(len(cache), 2) + self.assertEqual(cache[1], 1) + self.assertEqual(cache[2], 2) + + cache[3] = 3 + + self.assertEqual(len(cache), 1) + self.assertEqual(cache[3], 3) + self.assertNotIn(1, cache) + self.assertNotIn(2, cache) + + with self.assertRaises(ValueError): + cache[4] = 4 + self.assertEqual(len(cache), 1) + self.assertEqual(cache[3], 3) diff --git a/tests/test_lrucache.py b/tests/test_lrucache.py index 242a0e7..bdbb39d 100644 --- a/tests/test_lrucache.py +++ b/tests/test_lrucache.py @@ -1,6 +1,6 @@ import unittest -from . import CacheTestMixin +from . import LRUCacheTestMixin from cachetools import LRUCache, lru_cache @@ -14,58 +14,11 @@ def cached_typed(n): return n -class LRUCacheTest(unittest.TestCase, CacheTestMixin): +class LRUCacheTest(unittest.TestCase, LRUCacheTestMixin): def make_cache(self, maxsize, getsizeof=None): return LRUCache(maxsize, getsizeof) - def test_lru_insert(self): - cache = self.make_cache(maxsize=2) - - cache[1] = 1 - cache[2] = 2 - cache[3] = 3 - - self.assertEqual(len(cache), 2) - self.assertEqual(cache[2], 2) - self.assertEqual(cache[3], 3) - self.assertNotIn(1, cache) - - cache[2] - cache[4] = 4 - self.assertEqual(len(cache), 2) - self.assertEqual(cache[2], 2) - self.assertEqual(cache[4], 4) - self.assertNotIn(3, cache) - - cache[5] = 5 - self.assertEqual(len(cache), 2) - self.assertEqual(cache[4], 4) - self.assertEqual(cache[5], 5) - self.assertNotIn(2, cache) - - def test_lru_getsizeof(self): - cache = self.make_cache(maxsize=3, getsizeof=lambda x: x) - - cache[1] = 1 - cache[2] = 2 - - self.assertEqual(len(cache), 2) - self.assertEqual(cache[1], 1) - self.assertEqual(cache[2], 2) - - cache[3] = 3 - - self.assertEqual(len(cache), 1) - self.assertEqual(cache[3], 3) - self.assertNotIn(1, cache) - self.assertNotIn(2, cache) - - with self.assertRaises(ValueError): - cache[4] = 4 - self.assertEqual(len(cache), 1) - self.assertEqual(cache[3], 3) - def test_decorator(self): self.assertEqual(cached.cache_info(), (0, 0, 2, 0)) self.assertEqual(cached(1), 1) diff --git a/tests/test_ttlcache.py b/tests/test_ttlcache.py index 5e89642..6bf2d5e 100644 --- a/tests/test_ttlcache.py +++ b/tests/test_ttlcache.py @@ -1,24 +1,81 @@ import unittest -from . import CacheTestMixin +from . import LRUCacheTestMixin from cachetools import TTLCache -class TTLCacheTest(unittest.TestCase, CacheTestMixin): +class TTLCacheTest(unittest.TestCase, LRUCacheTestMixin): - def make_cache(self, maxsize, getsizeof=None, ttl=86400): - return TTLCache(maxsize, ttl, getsizeof) + def make_cache(self, maxsize, getsizeof=None): + return TTLCache(maxsize, ttl=0, timer=lambda: 0, getsizeof=getsizeof) - def test_ttl(self): - cache = self.make_cache(maxsize=2, ttl=0) + def make_ttl_cache(self, maxsize, ttl): + class Timer: + def __init__(self): + self.__time = 0 + + def __call__(self): + return self.__time + + def inc(self): + self.__time = self.__time + 1 + + return TTLCache(maxsize, ttl, timer=Timer()) + + def test_ttl_insert(self): + cache = self.make_ttl_cache(maxsize=2, ttl=2) + self.assertEqual(cache.ttl, 2) cache[1] = 1 + + self.assertEqual(1, len(cache)) + self.assertEqual(1, cache[1]) + + cache.timer.inc() cache[2] = 2 + + self.assertEqual(2, len(cache)) + self.assertEqual(1, cache[1]) + self.assertEqual(2, cache[2]) + + cache.timer.inc() + cache[1] cache[3] = 3 + self.assertEqual(2, len(cache)) + self.assertEqual(1, cache[1]) + self.assertNotIn(2, cache) + self.assertEqual(3, cache[3]) + + def test_ttl_expire(self): + cache = self.make_ttl_cache(maxsize=3, ttl=0) + self.assertEqual(cache.ttl, 0) + + cache[1] = 1 + self.assertEqual(1, cache[1]) + cache.timer.inc() with self.assertRaises(KeyError): cache[1] + cache[2] = 2 + self.assertEqual(2, cache[2]) + cache.timer.inc() with self.assertRaises(KeyError): cache[2] - with self.assertRaises(KeyError): - cache[3] + cache[3] = 3 + self.assertEqual(3, cache[3]) + + cache.expire(1) + self.assertNotIn(1, cache) + self.assertEqual(3, cache[3]) + + cache.expire(2) + self.assertNotIn(1, cache) + self.assertNotIn(2, cache) + self.assertEqual(3, cache[3]) + + cache.timer.inc() + cache.expire() + self.assertEqual(0, len(cache)) + self.assertNotIn(1, cache) + self.assertNotIn(2, cache) + self.assertNotIn(3, cache) |