diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-04-04 17:52:56 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-04-04 17:52:56 (GMT) |
commit | d11f76f8b95435052f859b07b140b123c776b48f (patch) | |
tree | 4c6fb504558844ab18066a58ee713cf2def587a2 /Lib/test/test_gc.py | |
parent | c800af41c909a9cd90ccabdf88ed4db96446fb4b (diff) | |
parent | e9b2a4cb59ff0046343ce292f9c5db7e5639635c (diff) | |
download | cpython-d11f76f8b95435052f859b07b140b123c776b48f.zip cpython-d11f76f8b95435052f859b07b140b123c776b48f.tar.gz cpython-d11f76f8b95435052f859b07b140b123c776b48f.tar.bz2 |
Issue #11761: make tests for gc.get_count() less fragile
Diffstat (limited to 'Lib/test/test_gc.py')
-rw-r--r-- | Lib/test/test_gc.py | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index f60d5d9..19313db 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -241,32 +241,43 @@ class GCTests(unittest.TestCase): # The following two tests are fragile: # They precisely count the number of allocations, # which is highly implementation-dependent. - # For example: - # - disposed tuples are not freed, but reused - # - the call to assertEqual somehow avoids building its args tuple + # For example, disposed tuples are not freed, but reused. + # To minimize variations, though, we first store the get_count() results + # and check them at the end. @refcount_test def test_get_count(self): - # Avoid future allocation of method object - assertEqual = self._baseAssertEqual gc.collect() - assertEqual(gc.get_count(), (0, 0, 0)) - a = dict() - # since gc.collect(), we created two objects: - # the dict, and the tuple returned by get_count() - assertEqual(gc.get_count(), (2, 0, 0)) + a, b, c = gc.get_count() + x = [] + d, e, f = gc.get_count() + self.assertEqual((b, c), (0, 0)) + self.assertEqual((e, f), (0, 0)) + # This is less fragile than asserting that a equals 0. + self.assertLess(a, 5) + # Between the two calls to get_count(), at least one object was + # created (the list). + self.assertGreater(d, a) @refcount_test def test_collect_generations(self): - # Avoid future allocation of method object - assertEqual = self.assertEqual gc.collect() - a = dict() + # This object will "trickle" into generation N + 1 after + # each call to collect(N) + x = [] gc.collect(0) - assertEqual(gc.get_count(), (0, 1, 0)) + # x is now in gen 1 + a, b, c = gc.get_count() gc.collect(1) - assertEqual(gc.get_count(), (0, 0, 1)) + # x is now in gen 2 + d, e, f = gc.get_count() gc.collect(2) - assertEqual(gc.get_count(), (0, 0, 0)) + # x is now in gen 3 + g, h, i = gc.get_count() + # We don't check a, d, g since their exact values depends on + # internal implementation details of the interpreter. + self.assertEqual((b, c), (1, 0)) + self.assertEqual((e, f), (0, 1)) + self.assertEqual((h, i), (0, 0)) def test_trashcan(self): class Ouch: |