Re-commit r83327 now that the release is done.
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 @@
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 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 @@
TestPythonPartial,
TestUpdateWrapper,
TestWraps,
- TestReduce
+ TestReduce,
+ TestLRU,
)
support.run_unittest(*test_classes)