Skip to content

Commit e989c16

Browse files
Fix tests, typos, add news entry
Co-Authored-By: Zanie Blue <contact@zanie.dev>
1 parent 14547a0 commit e989c16

File tree

4 files changed

+46
-64
lines changed

4 files changed

+46
-64
lines changed

Include/internal/pycore_gc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ extern void _Py_ScheduleGC(PyThreadState *tstate);
213213
* ob_traverse method.
214214
*
215215
* Internal note: interp->gc.generation0->_gc_prev doesn't have any bit flags
216-
* because it's not object header. So we don't use _PyGCHead_PREV() and
216+
* because it's not an object header. So we don't use _PyGCHead_PREV() and
217217
* _PyGCHead_SET_PREV() for it to avoid unnecessary bitwise operations.
218218
*
219219
* See also the public PyObject_GC_Track() function.

Lib/test/_test_gc_fast_cycles.py

Lines changed: 0 additions & 48 deletions
This file was deleted.

Lib/test/test_gc.py

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
Py_GIL_DISABLED)
88
from test.support.import_helper import import_module
99
from test.support.os_helper import temp_dir, TESTFN, unlink
10-
from test.support.script_helper import assert_python_ok, make_script, run_test_script
10+
from test.support.script_helper import assert_python_ok, make_script
1111
from test.support import threading_helper, gc_threshold
1212

1313
import gc
@@ -399,11 +399,19 @@ def test_collect_generations(self):
399399
# each call to collect(N)
400400
x = []
401401
gc.collect(0)
402-
# x is now in the old gen
402+
# x is now in gen 1
403403
a, b, c = gc.get_count()
404-
# We don't check a since its exact values depends on
404+
gc.collect(1)
405+
# x is now in gen 2
406+
d, e, f = gc.get_count()
407+
gc.collect(2)
408+
# x is now in gen 3
409+
g, h, i = gc.get_count()
410+
# We don't check a, d, g since their exact values depends on
405411
# internal implementation details of the interpreter.
406412
self.assertEqual((b, c), (1, 0))
413+
self.assertEqual((e, f), (0, 1))
414+
self.assertEqual((h, i), (0, 0))
407415

408416
def test_trashcan(self):
409417
class Ouch:
@@ -870,10 +878,42 @@ def test_get_objects_generations(self):
870878
self.assertTrue(
871879
any(l is element for element in gc.get_objects(generation=0))
872880
)
873-
gc.collect()
881+
self.assertFalse(
882+
any(l is element for element in gc.get_objects(generation=1))
883+
)
884+
self.assertFalse(
885+
any(l is element for element in gc.get_objects(generation=2))
886+
)
887+
gc.collect(generation=0)
888+
self.assertFalse(
889+
any(l is element for element in gc.get_objects(generation=0))
890+
)
891+
self.assertTrue(
892+
any(l is element for element in gc.get_objects(generation=1))
893+
)
894+
self.assertFalse(
895+
any(l is element for element in gc.get_objects(generation=2))
896+
)
897+
gc.collect(generation=1)
874898
self.assertFalse(
875899
any(l is element for element in gc.get_objects(generation=0))
876900
)
901+
self.assertFalse(
902+
any(l is element for element in gc.get_objects(generation=1))
903+
)
904+
self.assertTrue(
905+
any(l is element for element in gc.get_objects(generation=2))
906+
)
907+
gc.collect(generation=2)
908+
self.assertFalse(
909+
any(l is element for element in gc.get_objects(generation=0))
910+
)
911+
self.assertFalse(
912+
any(l is element for element in gc.get_objects(generation=1))
913+
)
914+
self.assertTrue(
915+
any(l is element for element in gc.get_objects(generation=2))
916+
)
877917
del l
878918
gc.collect()
879919

@@ -1181,17 +1221,6 @@ def test_tuple_untrack_counts(self):
11811221
self.assertTrue(new_count - count > (n // 2))
11821222

11831223

1184-
class IncrementalGCTests(unittest.TestCase):
1185-
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
1186-
@requires_gil_enabled("Free threading does not support incremental GC")
1187-
def test_incremental_gc_handles_fast_cycle_creation(self):
1188-
# Run this test in a fresh process. The number of alive objects (which can
1189-
# be from unit tests run before this one) can influence how quickly cyclic
1190-
# garbage is found.
1191-
script = support.findfile("_test_gc_fast_cycles.py")
1192-
run_test_script(script)
1193-
1194-
11951224
class GCCallbackTests(unittest.TestCase):
11961225
def setUp(self):
11971226
# Save gc state and disable it.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Forward-port the generational cycle garbage collector to the default 3.15 build, replacing the incremental collector while leaving the free-threaded collector unchanged.

0 commit comments

Comments
 (0)