From da4ea1a8a829f59caea0279deb9c25d0dabfbcda Mon Sep 17 00:00:00 2001 From: Thomas Kemmer Date: Wed, 24 Jun 2015 05:55:10 +0200 Subject: Fix #42: Clear cache statistics in clear_cache(). --- cachetools/func.py | 1 + tests/__init__.py | 42 ----------------------------- tests/test_func.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/test_lfu.py | 9 +++---- tests/test_lru.py | 9 +++---- tests/test_rr.py | 9 +++---- tests/test_ttl.py | 9 +++---- 7 files changed, 92 insertions(+), 66 deletions(-) create mode 100644 tests/test_func.py 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) -- cgit v1.2.3