From 18444904b390a6bc8ba8d3cd875d1478b9a17cad Mon Sep 17 00:00:00 2001 From: Stepa <> Date: Fri, 9 Oct 2026 21:06:55 +0500 Subject: [PATCH] No issue: test_filecmp: Add tests for filecmp.cmp cache hit and overflow clearing --- Lib/test/test_filecmp.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_filecmp.py b/Lib/test/test_filecmp.py index 2c83667b22feb4..d159f8091d9053 100644 --- a/Lib/test/test_filecmp.py +++ b/Lib/test/test_filecmp.py @@ -75,6 +75,33 @@ def test_cache_clear(self): filecmp.clear_cache() self.assertTrue(len(filecmp._cache) == 0, "Cache not cleared after calling clear_cache") + + filecmp.clear_cache() + + # 1. Первый вызов (кэш пустой, outcome is None -> True) + res1 = filecmp.cmp(self.name, self.name_same, shallow=False) + + # Проверяем, что в кэш действительно записалось ровно 1 значение + self.assertEqual(len(filecmp._cache), 1) + + # 2. Второй вызов тех же файлов (outcome is None -> False) + # Он обязан вернуть значение из кэша и выполнить строку 68 + res2 = filecmp.cmp(self.name, self.name_same, shallow=False) + + self.assertTrue(res1) + self.assertEqual(res1, res2) + # Проверяем, что новых записей в кэше не появилось (взят старый хит) + self.assertEqual(len(filecmp._cache), 1) + + + def test_cmp_cache_clearing_on_overflow(self): + filecmp.clear_cache() + fake_sig = (33188, 100, 12345) + for i in range(105): + filecmp._cache[(f"fake_f1_{i}", f"fake_f2_{i}", fake_sig, fake_sig)] = True + self.assertGreater(len(filecmp._cache), 100) + filecmp.cmp(self.name, self.name_same_shallow, shallow=False) + self.assertEqual(len(filecmp._cache), 1) class DirCompareTestCase(unittest.TestCase): def setUp(self): @@ -368,4 +395,4 @@ def _assert_report(self, dircmp_report, expected_report_lines): if __name__ == "__main__": - unittest.main() + unittest.main() \ No newline at end of file