diff options
author | Raymond Hettinger <python@rcn.com> | 2010-07-31 10:11:39 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2010-07-31 10:11:39 (GMT) |
commit | 9e46ef819c38ec76273d7ffb35bcd14a558d35d4 (patch) | |
tree | d18a0bf2fdcf650f268b97945d058effbc357d40 /Lib/test/test_functools.py | |
parent | 17e3d698b512025d525c1ecb6b0531b575ad5518 (diff) | |
download | cpython-9e46ef819c38ec76273d7ffb35bcd14a558d35d4.zip cpython-9e46ef819c38ec76273d7ffb35bcd14a558d35d4.tar.gz cpython-9e46ef819c38ec76273d7ffb35bcd14a558d35d4.tar.bz2 |
Add functools.lfu_cache() and functools.lru_cache().
Diffstat (limited to 'Lib/test/test_functools.py')
-rw-r--r-- | Lib/test/test_functools.py | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index f6ccc87..a02d37c 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -4,6 +4,7 @@ import unittest from test import support from weakref import proxy import pickle +from random import choice @staticmethod def PythonPartial(func, *args, **keywords): @@ -454,6 +455,50 @@ class TestTotalOrdering(unittest.TestCase): class A: pass +class TestLRU(unittest.TestCase): + + def test_lru(self): + def orig(x, y): + return 3*x+y + f = functools.lru_cache(maxsize=20)(orig) + + domain = range(5) + for i in range(1000): + x, y = choice(domain), choice(domain) + actual = f(x, y) + expected = orig(x, y) + self.assertEquals(actual, expected) + self.assert_(f.hits > f.misses) + self.assertEquals(f.hits + f.misses, 1000) + + f.clear() # test clearing + self.assertEqual(f.hits, 0) + self.assertEqual(f.misses, 0) + f(x, y) + self.assertEqual(f.hits, 0) + self.assertEqual(f.misses, 1) + + def test_lfu(self): + def orig(x, y): + return 3*x+y + f = functools.lfu_cache(maxsize=20)(orig) + + domain = range(5) + for i in range(1000): + x, y = choice(domain), choice(domain) + actual = f(x, y) + expected = orig(x, y) + self.assertEquals(actual, expected) + self.assert_(f.hits > f.misses) + self.assertEquals(f.hits + f.misses, 1000) + + f.clear() # test clearing + self.assertEqual(f.hits, 0) + self.assertEqual(f.misses, 0) + f(x, y) + self.assertEqual(f.hits, 0) + self.assertEqual(f.misses, 1) + def test_main(verbose=None): test_classes = ( TestPartial, @@ -461,7 +506,8 @@ def test_main(verbose=None): TestPythonPartial, TestUpdateWrapper, TestWraps, - TestReduce + TestReduce, + TestLRU, ) support.run_unittest(*test_classes) |