mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #14373: C implementation of functools.lru_cache() now can be used with
methods.
This commit is contained in:
parent
77cb197aaa
commit
e7070f09bc
3 changed files with 45 additions and 1 deletions
|
@ -1203,6 +1203,37 @@ class TestLRU:
|
|||
def f():
|
||||
pass
|
||||
|
||||
def test_lru_method(self):
|
||||
class X(int):
|
||||
f_cnt = 0
|
||||
@self.module.lru_cache(2)
|
||||
def f(self, x):
|
||||
self.f_cnt += 1
|
||||
return x*10+self
|
||||
a = X(5)
|
||||
b = X(5)
|
||||
c = X(7)
|
||||
self.assertEqual(X.f.cache_info(), (0, 0, 2, 0))
|
||||
|
||||
for x in 1, 2, 2, 3, 1, 1, 1, 2, 3, 3:
|
||||
self.assertEqual(a.f(x), x*10 + 5)
|
||||
self.assertEqual((a.f_cnt, b.f_cnt, c.f_cnt), (6, 0, 0))
|
||||
self.assertEqual(X.f.cache_info(), (4, 6, 2, 2))
|
||||
|
||||
for x in 1, 2, 1, 1, 1, 1, 3, 2, 2, 2:
|
||||
self.assertEqual(b.f(x), x*10 + 5)
|
||||
self.assertEqual((a.f_cnt, b.f_cnt, c.f_cnt), (6, 4, 0))
|
||||
self.assertEqual(X.f.cache_info(), (10, 10, 2, 2))
|
||||
|
||||
for x in 2, 1, 1, 1, 1, 2, 1, 3, 2, 1:
|
||||
self.assertEqual(c.f(x), x*10 + 7)
|
||||
self.assertEqual((a.f_cnt, b.f_cnt, c.f_cnt), (6, 4, 5))
|
||||
self.assertEqual(X.f.cache_info(), (15, 15, 2, 2))
|
||||
|
||||
self.assertEqual(a.f.cache_info(), X.f.cache_info())
|
||||
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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue