From 6819e80a07e7891effbebda47b6383be0acec42e Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Thu, 2 Jul 2026 20:32:14 +0000 Subject: [PATCH] test/unit: optionally verify GC consistency after each test Set RUBY_TEST_GC_VERIFY to call GC.verify_internal_consistency after each test. An integer >= 2 samples once every N tests; any other non-empty value verifies every test. Useful for pinning down which test corrupts the heap. Co-Authored-By: Claude Opus 4.8 (1M context) --- tool/lib/test/unit.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tool/lib/test/unit.rb b/tool/lib/test/unit.rb index 0eb8392179..a66d248ff5 100644 --- a/tool/lib/test/unit.rb +++ b/tool/lib/test/unit.rb @@ -1677,6 +1677,19 @@ module Test leakchecker.check("#{inst.class}\##{inst.__name__}") + # Optionally verify GC internal consistency after each test. An + # integer >= 2 samples once every N tests (use a prime so a + # randomized test order samples a different set each run); any other + # non-empty value verifies every test (O(heap) per test, so only + # practical for small runs). + if (interval = ENV["RUBY_TEST_GC_VERIFY"]) + n = interval.to_i + @__gc_verify_tick = (@__gc_verify_tick || 0) + 1 + if n <= 1 || (@__gc_verify_tick % n).zero? + GC.verify_internal_consistency + end + end + _end_method(inst) inst._assertions