diff options
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) |