aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Kemmer <tkemmer@computer.org>2015-06-24 05:55:10 +0200
committerThomas Kemmer <tkemmer@computer.org>2015-06-24 05:55:10 +0200
commitda4ea1a8a829f59caea0279deb9c25d0dabfbcda (patch)
tree7a2443a0170fa028dbbeed4fed2695fffadf1bb9
parent0ca640f2c88f5a6767bb09da8cab5983665b6d98 (diff)
downloadcachetools-da4ea1a8a829f59caea0279deb9c25d0dabfbcda.tar.gz
Fix #42: Clear cache statistics in clear_cache().
-rw-r--r--cachetools/func.py1
-rw-r--r--tests/__init__.py42
-rw-r--r--tests/test_func.py79
-rw-r--r--tests/test_lfu.py9
-rw-r--r--tests/test_lru.py9
-rw-r--r--tests/test_rr.py9
-rw-r--r--tests/test_ttl.py9
7 files changed, 92 insertions, 66 deletions
diff --git a/cachetools/func.py b/cachetools/func.py
index 4d88a78..78ec7f6 100644
--- a/cachetools/func.py
+++ b/cachetools/func.py
@@ -74,6 +74,7 @@ def _cachedfunc(cache, typed=False, lock=None):
def cache_clear():
with context:
+ stats[:] = [0, 0]
cache.clear()
wrapper.cache_info = cache_info
diff --git a/tests/__init__.py b/tests/__init__.py
index 8ffb294..be66f4b 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -225,45 +225,3 @@ class CacheTestMixin(object):
self.assertEqual(2, len(cache))
self.assertEqual(4, cache[4])
self.assertTrue(1 in cache or 2 in cache or 3 in cache)
-
-
-class DecoratorTestMixin(object):
-
- def decorator(self, maxsize, typed=False, lock=None):
- raise NotImplementedError
-
- def test_decorator(self):
- cached = self.decorator(maxsize=2)(lambda n: n)
-
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (1, 1, 2, 1))
- self.assertEqual(cached(1.0), 1.0)
- self.assertEqual(cached.cache_info(), (2, 1, 2, 1))
-
- cached.cache_clear()
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (2, 2, 2, 1))
-
- def test_typed_decorator(self):
- cached = self.decorator(maxsize=2, typed=True)(lambda n: n)
-
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (1, 1, 2, 1))
- self.assertEqual(cached(1.0), 1.0)
- self.assertEqual(cached.cache_info(), (1, 2, 2, 2))
- self.assertEqual(cached(1.0), 1.0)
- self.assertEqual(cached.cache_info(), (2, 2, 2, 2))
-
- def test_nocache_decorator(self):
- cached = self.decorator(maxsize=0)(lambda n: n)
-
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (0, 1, 0, 0))
- self.assertEqual(cached(1), 1)
- self.assertEqual(cached.cache_info(), (0, 2, 0, 0))
- self.assertEqual(cached(1.0), 1.0)
- self.assertEqual(cached.cache_info(), (0, 3, 0, 0))
diff --git a/tests/test_func.py b/tests/test_func.py
new file mode 100644
index 0000000..31e9a98
--- /dev/null
+++ b/tests/test_func.py
@@ -0,0 +1,79 @@
+import unittest
+
+import cachetools.func
+
+
+class DecoratorTestMixin(object):
+
+ def decorator(self, maxsize, typed=False, lock=None):
+ raise NotImplementedError
+
+ def test_decorator(self):
+ cached = self.decorator(maxsize=2)(lambda n: n)
+
+ self.assertEqual(cached.cache_info(), (0, 0, 2, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (1, 1, 2, 1))
+ self.assertEqual(cached(1.0), 1.0)
+ self.assertEqual(cached.cache_info(), (2, 1, 2, 1))
+
+ def test_typed_decorator(self):
+ cached = self.decorator(maxsize=2, typed=True)(lambda n: n)
+
+ self.assertEqual(cached.cache_info(), (0, 0, 2, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (1, 1, 2, 1))
+ self.assertEqual(cached(1.0), 1.0)
+ self.assertEqual(cached.cache_info(), (1, 2, 2, 2))
+ self.assertEqual(cached(1.0), 1.0)
+ self.assertEqual(cached.cache_info(), (2, 2, 2, 2))
+
+ def test_nosize_decorator(self):
+ cached = self.decorator(maxsize=0)(lambda n: n)
+
+ self.assertEqual(cached.cache_info(), (0, 0, 0, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 1, 0, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 2, 0, 0))
+ self.assertEqual(cached(1.0), 1.0)
+ self.assertEqual(cached.cache_info(), (0, 3, 0, 0))
+
+ def test_cache_clear(self):
+ cached = self.decorator(maxsize=2)(lambda n: n)
+
+ self.assertEqual(cached.cache_info(), (0, 0, 2, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
+ cached.cache_clear()
+ self.assertEqual(cached.cache_info(), (0, 0, 2, 0))
+ self.assertEqual(cached(1), 1)
+ self.assertEqual(cached.cache_info(), (0, 1, 2, 1))
+
+
+class LFUDecoratorTest(unittest.TestCase, DecoratorTestMixin):
+
+ def decorator(self, maxsize, typed=False, lock=None):
+ return cachetools.func.lfu_cache(maxsize, typed=typed, lock=lock)
+
+
+class LRUDecoratorTest(unittest.TestCase, DecoratorTestMixin):
+
+ def decorator(self, maxsize, typed=False, lock=None):
+ return cachetools.func.lru_cache(maxsize, typed=typed, lock=lock)
+
+
+class RRDecoratorTest(unittest.TestCase, DecoratorTestMixin):
+
+ def decorator(self, maxsize, typed=False, lock=None):
+ return cachetools.func.rr_cache(maxsize, typed=typed, lock=lock)
+
+
+class TTLDecoratorTest(unittest.TestCase, DecoratorTestMixin):
+
+ def decorator(self, maxsize, typed=False, lock=None):
+ return cachetools.func.ttl_cache(maxsize, typed=typed, lock=lock)
diff --git a/tests/test_lfu.py b/tests/test_lfu.py
index 1c4741b..fe0437e 100644
--- a/tests/test_lfu.py
+++ b/tests/test_lfu.py
@@ -1,18 +1,15 @@
import unittest
-from cachetools import LFUCache, lfu_cache
+from cachetools import LFUCache
-from . import CacheTestMixin, DecoratorTestMixin
+from . import CacheTestMixin
-class LFUCacheTest(unittest.TestCase, CacheTestMixin, DecoratorTestMixin):
+class LFUCacheTest(unittest.TestCase, CacheTestMixin):
def cache(self, maxsize, missing=None, getsizeof=None):
return LFUCache(maxsize, missing=missing, getsizeof=getsizeof)
- def decorator(self, maxsize, typed=False, lock=None):
- return lfu_cache(maxsize, typed=typed, lock=lock)
-
def test_lfu(self):
cache = self.cache(maxsize=2)
diff --git a/tests/test_lru.py b/tests/test_lru.py
index 5eea036..a94a517 100644
--- a/tests/test_lru.py
+++ b/tests/test_lru.py
@@ -1,18 +1,15 @@
import unittest
-from cachetools import LRUCache, lru_cache
+from cachetools import LRUCache
-from . import CacheTestMixin, DecoratorTestMixin
+from . import CacheTestMixin
-class LRUCacheTest(unittest.TestCase, CacheTestMixin, DecoratorTestMixin):
+class LRUCacheTest(unittest.TestCase, CacheTestMixin):
def cache(self, maxsize, missing=None, getsizeof=None):
return LRUCache(maxsize, missing=missing, getsizeof=getsizeof)
- def decorator(self, maxsize, typed=False, lock=None):
- return lru_cache(maxsize, typed=typed, lock=lock)
-
def test_lru(self):
cache = self.cache(maxsize=2)
diff --git a/tests/test_rr.py b/tests/test_rr.py
index 41c9c6c..14a4b07 100644
--- a/tests/test_rr.py
+++ b/tests/test_rr.py
@@ -1,9 +1,9 @@
import random
import unittest
-from cachetools import RRCache, rr_cache
+from cachetools import RRCache
-from . import CacheTestMixin, DecoratorTestMixin
+from . import CacheTestMixin
# random.choice cannot be pickled...
@@ -11,15 +11,12 @@ def choice(seq):
return random.choice(seq)
-class RRCacheTest(unittest.TestCase, CacheTestMixin, DecoratorTestMixin):
+class RRCacheTest(unittest.TestCase, CacheTestMixin):
def cache(self, maxsize, choice=choice, missing=None, getsizeof=None):
return RRCache(maxsize, choice=choice, missing=missing,
getsizeof=getsizeof)
- def decorator(self, maxsize, choice=random.choice, typed=False, lock=None):
- return rr_cache(maxsize, choice=choice, typed=typed, lock=lock)
-
def test_choice(self):
cache = self.cache(maxsize=2, choice=min)
self.assertEqual(min, cache.choice)
diff --git a/tests/test_ttl.py b/tests/test_ttl.py
index c6253c2..005ab31 100644
--- a/tests/test_ttl.py
+++ b/tests/test_ttl.py
@@ -1,8 +1,8 @@
import unittest
-from cachetools import TTLCache, ttl_cache
+from cachetools import TTLCache
-from . import CacheTestMixin, DecoratorTestMixin
+from . import CacheTestMixin
class Timer:
@@ -19,15 +19,12 @@ class Timer:
self.time += 1
-class TTLCacheTest(unittest.TestCase, CacheTestMixin, DecoratorTestMixin):
+class TTLCacheTest(unittest.TestCase, CacheTestMixin):
def cache(self, maxsize, ttl=0, missing=None, getsizeof=None):
return TTLCache(maxsize, ttl, timer=Timer(), missing=missing,
getsizeof=getsizeof)
- def decorator(self, maxsize, ttl=0, typed=False, lock=None):
- return ttl_cache(maxsize, ttl, timer=Timer(), typed=typed, lock=lock)
-
def test_lru(self):
cache = self.cache(maxsize=2)