summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_functools.py
diff options
context:
space:
mode:
authorLarry Hastings <larry@hastings.org>2015-05-23 21:56:23 (GMT)
committerLarry Hastings <larry@hastings.org>2015-05-23 21:56:23 (GMT)
commit8252cc98323cf699f9800bacf84166c8ffd3f5b6 (patch)
treed9d0128b21a4b9901d77cbd433cd5fb70619ee4e /Lib/test/test_functools.py
parent1c858c352b8c11419f79f586334c49378726dba8 (diff)
downloadcpython-8252cc98323cf699f9800bacf84166c8ffd3f5b6.zip
cpython-8252cc98323cf699f9800bacf84166c8ffd3f5b6.tar.gz
cpython-8252cc98323cf699f9800bacf84166c8ffd3f5b6.tar.bz2
Backed out changeset 57776eee74f2
Diffstat (limited to 'Lib/test/test_functools.py')
-rw-r--r--Lib/test/test_functools.py109
1 files changed, 17 insertions, 92 deletions
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 271d655..03dd545 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -7,10 +7,6 @@ import sys
from test import support
import unittest
from weakref import proxy
-try:
- import threading
-except ImportError:
- threading = None
import functools
@@ -916,12 +912,12 @@ class Orderable_LT:
return self.value == other.value
-class TestLRU:
+class TestLRU(unittest.TestCase):
def test_lru(self):
def orig(x, y):
return 3 * x + y
- f = self.module.lru_cache(maxsize=20)(orig)
+ f = functools.lru_cache(maxsize=20)(orig)
hits, misses, maxsize, currsize = f.cache_info()
self.assertEqual(maxsize, 20)
self.assertEqual(currsize, 0)
@@ -959,7 +955,7 @@ class TestLRU:
self.assertEqual(currsize, 1)
# test size zero (which means "never-cache")
- @self.module.lru_cache(0)
+ @functools.lru_cache(0)
def f():
nonlocal f_cnt
f_cnt += 1
@@ -975,7 +971,7 @@ class TestLRU:
self.assertEqual(currsize, 0)
# test size one
- @self.module.lru_cache(1)
+ @functools.lru_cache(1)
def f():
nonlocal f_cnt
f_cnt += 1
@@ -991,7 +987,7 @@ class TestLRU:
self.assertEqual(currsize, 1)
# test size two
- @self.module.lru_cache(2)
+ @functools.lru_cache(2)
def f(x):
nonlocal f_cnt
f_cnt += 1
@@ -1008,7 +1004,7 @@ class TestLRU:
self.assertEqual(currsize, 2)
def test_lru_with_maxsize_none(self):
- @self.module.lru_cache(maxsize=None)
+ @functools.lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
@@ -1016,26 +1012,17 @@ class TestLRU:
self.assertEqual([fib(n) for n in range(16)],
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610])
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=28, misses=16, maxsize=None, currsize=16))
+ functools._CacheInfo(hits=28, misses=16, maxsize=None, currsize=16))
fib.cache_clear()
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
-
- def test_lru_with_maxsize_negative(self):
- @self.module.lru_cache(maxsize=-10)
- def eq(n):
- return n
- for i in (0, 1):
- self.assertEqual([eq(n) for n in range(150)], list(range(150)))
- self.assertEqual(eq.cache_info(),
- self.module._CacheInfo(hits=0, misses=300, maxsize=-10, currsize=1))
+ functools._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
def test_lru_with_exceptions(self):
# Verify that user_function exceptions get passed through without
# creating a hard-to-read chained exception.
# http://bugs.python.org/issue13177
for maxsize in (None, 128):
- @self.module.lru_cache(maxsize)
+ @functools.lru_cache(maxsize)
def func(i):
return 'abc'[i]
self.assertEqual(func(0), 'a')
@@ -1048,7 +1035,7 @@ class TestLRU:
def test_lru_with_types(self):
for maxsize in (None, 128):
- @self.module.lru_cache(maxsize=maxsize, typed=True)
+ @functools.lru_cache(maxsize=maxsize, typed=True)
def square(x):
return x * x
self.assertEqual(square(3), 9)
@@ -1063,7 +1050,7 @@ class TestLRU:
self.assertEqual(square.cache_info().misses, 4)
def test_lru_with_keyword_args(self):
- @self.module.lru_cache()
+ @functools.lru_cache()
def fib(n):
if n < 2:
return n
@@ -1073,13 +1060,13 @@ class TestLRU:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
)
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=28, misses=16, maxsize=128, currsize=16))
+ functools._CacheInfo(hits=28, misses=16, maxsize=128, currsize=16))
fib.cache_clear()
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=0, misses=0, maxsize=128, currsize=0))
+ functools._CacheInfo(hits=0, misses=0, maxsize=128, currsize=0))
def test_lru_with_keyword_args_maxsize_none(self):
- @self.module.lru_cache(maxsize=None)
+ @functools.lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
@@ -1087,71 +1074,15 @@ class TestLRU:
self.assertEqual([fib(n=number) for number in range(16)],
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610])
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=28, misses=16, maxsize=None, currsize=16))
+ functools._CacheInfo(hits=28, misses=16, maxsize=None, currsize=16))
fib.cache_clear()
self.assertEqual(fib.cache_info(),
- self.module._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
-
- def test_lru_cache_decoration(self):
- def f(zomg: 'zomg_annotation'):
- """f doc string"""
- return 42
- g = self.module.lru_cache()(f)
- for attr in self.module.WRAPPER_ASSIGNMENTS:
- self.assertEqual(getattr(g, attr), getattr(f, attr))
-
- @unittest.skipUnless(threading, 'This test requires threading.')
- def test_lru_cache_threaded(self):
- def orig(x, y):
- return 3 * x + y
- f = self.module.lru_cache(maxsize=20)(orig)
- hits, misses, maxsize, currsize = f.cache_info()
- self.assertEqual(currsize, 0)
-
- def full(f, *args):
- for _ in range(10):
- f(*args)
-
- def clear(f):
- for _ in range(10):
- f.cache_clear()
-
- orig_si = sys.getswitchinterval()
- sys.setswitchinterval(1e-6)
- try:
- # create 5 threads in order to fill cache
- threads = []
- for k in range(5):
- t = threading.Thread(target=full, args=[f, k, k])
- t.start()
- threads.append(t)
-
- for t in threads:
- t.join()
-
- hits, misses, maxsize, currsize = f.cache_info()
- self.assertEqual(hits, 45)
- self.assertEqual(misses, 5)
- self.assertEqual(currsize, 5)
-
- # create 5 threads in order to fill cache and 1 to clear it
- cleaner = threading.Thread(target=clear, args=[f])
- cleaner.start()
- threads = [cleaner]
- for k in range(5):
- t = threading.Thread(target=full, args=[f, k, k])
- t.start()
- threads.append(t)
-
- for t in threads:
- t.join()
- finally:
- sys.setswitchinterval(orig_si)
+ functools._CacheInfo(hits=0, misses=0, maxsize=None, currsize=0))
def test_need_for_rlock(self):
# This will deadlock on an LRU cache that uses a regular lock
- @self.module.lru_cache(maxsize=10)
+ @functools.lru_cache(maxsize=10)
def test_func(x):
'Used to demonstrate a reentrant lru_cache call within a single thread'
return x
@@ -1179,12 +1110,6 @@ class TestLRU:
def f():
pass
-class TestLRUC(TestLRU, unittest.TestCase):
- module = c_functools
-
-class TestLRUPy(TestLRU, unittest.TestCase):
- module = py_functools
-
class TestSingleDispatch(unittest.TestCase):
def test_simple_overloads(self):