diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-22 08:30:29 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-22 08:30:29 +0000 |
| commit | 72c5baff65bc82e010a6f0701324e5e09c05969c (patch) | |
| tree | dd7430cee11ba433af8a10c8bfde958e83ea2bad /repoze/bfg/tests | |
| parent | f662908175abb6ac9c638dbdeeea2635956ac80c (diff) | |
| download | pyramid-72c5baff65bc82e010a6f0701324e5e09c05969c.tar.gz pyramid-72c5baff65bc82e010a6f0701324e5e09c05969c.tar.bz2 pyramid-72c5baff65bc82e010a6f0701324e5e09c05969c.zip | |
- ``repoze.bfg.lru`` implements an LRU cache class and a decorator for
internal use.
Diffstat (limited to 'repoze/bfg/tests')
| -rw-r--r-- | repoze/bfg/tests/test_lru.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/repoze/bfg/tests/test_lru.py b/repoze/bfg/tests/test_lru.py new file mode 100644 index 000000000..02bee3052 --- /dev/null +++ b/repoze/bfg/tests/test_lru.py @@ -0,0 +1,75 @@ +import unittest + +class LRUCacheTests(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.lru import LRUCache + return LRUCache + + def _makeOne(self, size): + return self._getTargetClass()(size) + + def test_it(self): + cache = self._makeOne(3) + self.assertEqual(cache.get('a'), None) + cache.put('a', '1') + pos, value = cache.data.get('a') + self.assertEqual(cache.clock[pos]['ref'], True) + self.assertEqual(cache.clock[pos]['key'], 'a') + self.assertEqual(value, '1') + self.assertEqual(cache.get('a'), '1') + self.assertEqual(cache.hand, pos+1) + pos, value = cache.data.get('a') + self.assertEqual(cache.clock[pos]['ref'], True) + self.assertEqual(cache.hand, pos+1) + self.assertEqual(len(cache.data), 1) + cache.put('b', '2') + pos, value = cache.data.get('b') + self.assertEqual(cache.clock[pos]['ref'], True) + self.assertEqual(cache.clock[pos]['key'], 'b') + self.assertEqual(len(cache.data), 2) + cache.put('c', '3') + pos, value = cache.data.get('c') + self.assertEqual(cache.clock[pos]['ref'], True) + self.assertEqual(cache.clock[pos]['key'], 'c') + self.assertEqual(len(cache.data), 3) + pos, value = cache.data.get('a') + self.assertEqual(cache.clock[pos]['ref'], True) + cache.get('a') + cache.put('d', '4') + self.assertEqual(len(cache.data), 3) + self.assertEqual(cache.data.get('b'), None) + cache.put('e', '5') + self.assertEqual(len(cache.data), 3) + self.assertEqual(cache.data.get('c'), None) + +class DecoratorTests(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.lru import lru_cache + return lru_cache + + def _makeOne(self, cache): + return self._getTargetClass()(0, cache) + + def test_it(self): + cache = DummyLRUCache() + decorator = self._makeOne(cache) + def wrapped(k): + return k + decorated = decorator(wrapped) + result = decorated(1) + self.assertEqual(cache[1], 1) + self.assertEqual(result, 1) + self.assertEqual(len(cache), 1) + result = decorated(2) + self.assertEqual(cache[2], 2) + self.assertEqual(result, 2) + self.assertEqual(len(cache), 2) + result = decorated(2) + self.assertEqual(cache[2], 2) + self.assertEqual(result, 2) + self.assertEqual(len(cache), 2) + +class DummyLRUCache(dict): + def put(self, k, v): + return self.__setitem__(k, v) + |
