mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue #25447: The lru_cache() wrapper objects now can be copied and pickled
(by returning the original object unchanged).
This commit is contained in:
parent
a7b83b43ff
commit
45120f272b
3 changed files with 66 additions and 2 deletions
|
@ -1,5 +1,6 @@
|
|||
import abc
|
||||
import collections
|
||||
import copy
|
||||
from itertools import permutations
|
||||
import pickle
|
||||
from random import choice
|
||||
|
@ -1251,11 +1252,64 @@ class TestLRU:
|
|||
self.assertEqual(b.f.cache_info(), X.f.cache_info())
|
||||
self.assertEqual(c.f.cache_info(), X.f.cache_info())
|
||||
|
||||
class TestLRUC(TestLRU, unittest.TestCase):
|
||||
module = c_functools
|
||||
def test_pickle(self):
|
||||
cls = self.__class__
|
||||
for f in cls.cached_func[0], cls.cached_meth, cls.cached_staticmeth:
|
||||
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||
with self.subTest(proto=proto, func=f):
|
||||
f_copy = pickle.loads(pickle.dumps(f, proto))
|
||||
self.assertIs(f_copy, f)
|
||||
|
||||
def test_copy(self):
|
||||
cls = self.__class__
|
||||
for f in cls.cached_func[0], cls.cached_meth, cls.cached_staticmeth:
|
||||
with self.subTest(func=f):
|
||||
f_copy = copy.copy(f)
|
||||
self.assertIs(f_copy, f)
|
||||
|
||||
def test_deepcopy(self):
|
||||
cls = self.__class__
|
||||
for f in cls.cached_func[0], cls.cached_meth, cls.cached_staticmeth:
|
||||
with self.subTest(func=f):
|
||||
f_copy = copy.deepcopy(f)
|
||||
self.assertIs(f_copy, f)
|
||||
|
||||
|
||||
@py_functools.lru_cache()
|
||||
def py_cached_func(x, y):
|
||||
return 3 * x + y
|
||||
|
||||
@c_functools.lru_cache()
|
||||
def c_cached_func(x, y):
|
||||
return 3 * x + y
|
||||
|
||||
|
||||
class TestLRUPy(TestLRU, unittest.TestCase):
|
||||
module = py_functools
|
||||
cached_func = py_cached_func,
|
||||
|
||||
@module.lru_cache()
|
||||
def cached_meth(self, x, y):
|
||||
return 3 * x + y
|
||||
|
||||
@staticmethod
|
||||
@module.lru_cache()
|
||||
def cached_staticmeth(x, y):
|
||||
return 3 * x + y
|
||||
|
||||
|
||||
class TestLRUC(TestLRU, unittest.TestCase):
|
||||
module = c_functools
|
||||
cached_func = c_cached_func,
|
||||
|
||||
@module.lru_cache()
|
||||
def cached_meth(self, x, y):
|
||||
return 3 * x + y
|
||||
|
||||
@staticmethod
|
||||
@module.lru_cache()
|
||||
def cached_staticmeth(x, y):
|
||||
return 3 * x + y
|
||||
|
||||
|
||||
class TestSingleDispatch(unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue