import unittest import functools class LRUCacheTest(unittest.TestCase): def test_as_wrapper(self): @functools.lru_cache() def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) factorial(20) self.assertEqual(21, factorial.cache_info().misses) def test_as_function_with_rename(self): def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) f = functools.lru_cache()(factorial) f(20) self.assertEqual(21, f.cache_info().misses) def test_as_function(self): def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) factorial = functools.lru_cache()(factorial) factorial(20) self.assertEqual(21, factorial.cache_info().misses) if __name__ == "__main__": unittest.main()