summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-22 08:30:29 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-22 08:30:29 +0000
commit72c5baff65bc82e010a6f0701324e5e09c05969c (patch)
treedd7430cee11ba433af8a10c8bfde958e83ea2bad /repoze/bfg/tests
parentf662908175abb6ac9c638dbdeeea2635956ac80c (diff)
downloadpyramid-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.py75
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)
+