aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThomas Kemmer <tkemmer@computer.org>2014-09-18 06:27:08 +0200
committerThomas Kemmer <tkemmer@computer.org>2014-09-23 11:01:28 +0200
commite255ae776117772c35dfa54db3acd2410658ba8b (patch)
treed7d34e38734b3518c775dd79e4a85ef33b8e72a4 /tests
parenta8d2b038f3331da782c73ed5755dc3f3d363d8fa (diff)
downloadcachetools-e255ae776117772c35dfa54db3acd2410658ba8b.tar.gz
Fix #6: Non-mutating TTLCache.__getitem__()
Diffstat (limited to 'tests')
-rw-r--r--tests/__init__.py50
-rw-r--r--tests/test_lrucache.py51
-rw-r--r--tests/test_ttlcache.py73
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)