(self)
| 1602 | class TestLRU: |
| 1603 | |
| 1604 | def test_lru(self): |
| 1605 | def orig(x, y): |
| 1606 | return 3 * x + y |
| 1607 | f = self.module.lru_cache(maxsize=20)(orig) |
| 1608 | hits, misses, maxsize, currsize = f.cache_info() |
| 1609 | self.assertEqual(maxsize, 20) |
| 1610 | self.assertEqual(currsize, 0) |
| 1611 | self.assertEqual(hits, 0) |
| 1612 | self.assertEqual(misses, 0) |
| 1613 | |
| 1614 | domain = range(5) |
| 1615 | for i in range(1000): |
| 1616 | x, y = choice(domain), choice(domain) |
| 1617 | actual = f(x, y) |
| 1618 | expected = orig(x, y) |
| 1619 | self.assertEqual(actual, expected) |
| 1620 | hits, misses, maxsize, currsize = f.cache_info() |
| 1621 | self.assertTrue(hits > misses) |
| 1622 | self.assertEqual(hits + misses, 1000) |
| 1623 | self.assertEqual(currsize, 20) |
| 1624 | |
| 1625 | f.cache_clear() # test clearing |
| 1626 | hits, misses, maxsize, currsize = f.cache_info() |
| 1627 | self.assertEqual(hits, 0) |
| 1628 | self.assertEqual(misses, 0) |
| 1629 | self.assertEqual(currsize, 0) |
| 1630 | f(x, y) |
| 1631 | hits, misses, maxsize, currsize = f.cache_info() |
| 1632 | self.assertEqual(hits, 0) |
| 1633 | self.assertEqual(misses, 1) |
| 1634 | self.assertEqual(currsize, 1) |
| 1635 | |
| 1636 | # Test bypassing the cache |
| 1637 | self.assertIs(f.__wrapped__, orig) |
| 1638 | f.__wrapped__(x, y) |
| 1639 | hits, misses, maxsize, currsize = f.cache_info() |
| 1640 | self.assertEqual(hits, 0) |
| 1641 | self.assertEqual(misses, 1) |
| 1642 | self.assertEqual(currsize, 1) |
| 1643 | |
| 1644 | # test size zero (which means "never-cache") |
| 1645 | @self.module.lru_cache(0) |
| 1646 | def f(): |
| 1647 | nonlocal f_cnt |
| 1648 | f_cnt += 1 |
| 1649 | return 20 |
| 1650 | self.assertEqual(f.cache_info().maxsize, 0) |
| 1651 | f_cnt = 0 |
| 1652 | for i in range(5): |
| 1653 | self.assertEqual(f(), 20) |
| 1654 | self.assertEqual(f_cnt, 5) |
| 1655 | hits, misses, maxsize, currsize = f.cache_info() |
| 1656 | self.assertEqual(hits, 0) |
| 1657 | self.assertEqual(misses, 5) |
| 1658 | self.assertEqual(currsize, 0) |
| 1659 | |
| 1660 | # test size one |
| 1661 | @self.module.lru_cache(1) |
nothing calls this directly
no test coverage detected