From adaacf26d3c407e311b453c71abc40672ee549df Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 28 Jun 2023 04:41:21 +0200 Subject: [PATCH] GH-104584: Fix test_capi.test_counter_optimizer() when run twice (#106171) test_counter_optimizer() and test_long_loop() of test_capi now create a new function at each call. Otherwise, the optimizer counters are not the expected values when the test is run more than once. --- Lib/test/test_capi/test_misc.py | 39 ++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index f2aa2a07783eec..5ee712323d219a 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -2372,10 +2372,14 @@ def test_get_set_optimizer(self): self.assertEqual(_testinternalcapi.get_optimizer(), None) def test_counter_optimizer(self): - - def loop(): - for _ in range(1000): - pass + # Generate a new function at each call + ns = {} + exec(textwrap.dedent(""" + def loop(): + for _ in range(1000): + pass + """), ns, ns) + loop = ns['loop'] for repeat in range(5): opt = _testinternalcapi.get_counter_optimizer() @@ -2388,18 +2392,23 @@ def loop(): def test_long_loop(self): "Check that we aren't confused by EXTENDED_ARG" - def nop(): - pass + # Generate a new function at each call + ns = {} + exec(textwrap.dedent(""" + def nop(): + pass - def long_loop(): - for _ in range(10): - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); - nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + def long_loop(): + for _ in range(10): + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); + """), ns, ns) + long_loop = ns['long_loop'] opt = _testinternalcapi.get_counter_optimizer() with self.temporary_optimizer(opt):