summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKen Jin <kenjin@python.org>2024-02-14 11:12:52 (GMT)
committerGitHub <noreply@github.com>2024-02-14 11:12:52 (GMT)
commit57e4c81ae1cd605efa173885574aedc3fded4b8b (patch)
tree7316cbee2939e9394c4d2011ce177dc047bb9f61
parent3fd2ad8241a61e75b2cd33c697af276863efbb51 (diff)
downloadcpython-57e4c81ae1cd605efa173885574aedc3fded4b8b.zip
cpython-57e4c81ae1cd605efa173885574aedc3fded4b8b.tar.gz
cpython-57e4c81ae1cd605efa173885574aedc3fded4b8b.tar.bz2
gh-114058: Fix flaky globals to constant test (#115423)
Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r--Lib/test/test_capi/test_opt.py43
1 files changed, 32 insertions, 11 deletions
diff --git a/Lib/test/test_capi/test_opt.py b/Lib/test/test_capi/test_opt.py
index b64aed1..1a8ed34 100644
--- a/Lib/test/test_capi/test_opt.py
+++ b/Lib/test/test_capi/test_opt.py
@@ -7,6 +7,8 @@ import gc
import _testinternalcapi
+from test.support import script_helper
+
@contextlib.contextmanager
def temporary_optimizer(opt):
@@ -659,7 +661,7 @@ class TestUopsOptimization(unittest.TestCase):
opt = _testinternalcapi.get_uop_optimizer()
with temporary_optimizer(opt):
- testfunc(20)
+ testfunc(32)
ex = get_first_executor(testfunc)
self.assertIsNotNone(ex)
@@ -677,10 +679,10 @@ class TestUopsOptimization(unittest.TestCase):
opt = _testinternalcapi.get_uop_optimizer()
with temporary_optimizer(opt):
- res = testfunc(20)
+ res = testfunc(32)
ex = get_first_executor(testfunc)
- self.assertEqual(res, 19 * 2)
+ self.assertEqual(res, 62)
self.assertIsNotNone(ex)
uops = {opname for opname, _, _ in ex}
self.assertNotIn("_GUARD_BOTH_INT", uops)
@@ -699,7 +701,7 @@ class TestUopsOptimization(unittest.TestCase):
opt = _testinternalcapi.get_uop_optimizer()
with temporary_optimizer(opt):
- res = testfunc(20)
+ res = testfunc(32)
ex = get_first_executor(testfunc)
self.assertEqual(res, 4)
@@ -716,7 +718,7 @@ class TestUopsOptimization(unittest.TestCase):
opt = _testinternalcapi.get_uop_optimizer()
with temporary_optimizer(opt):
- testfunc(20)
+ testfunc(32)
ex = get_first_executor(testfunc)
self.assertIsNotNone(ex)
@@ -740,7 +742,7 @@ class TestUopsOptimization(unittest.TestCase):
def dummy(x):
return x + 2
- testfunc(10)
+ testfunc(32)
ex = get_first_executor(testfunc)
# Honestly as long as it doesn't crash it's fine.
@@ -749,20 +751,39 @@ class TestUopsOptimization(unittest.TestCase):
# This test is a little implementation specific.
def test_promote_globals_to_constants(self):
+
+ result = script_helper.run_python_until_end('-c', textwrap.dedent("""
+ import _testinternalcapi
+ import opcode
+
+ def get_first_executor(func):
+ code = func.__code__
+ co_code = code.co_code
+ JUMP_BACKWARD = opcode.opmap["JUMP_BACKWARD"]
+ for i in range(0, len(co_code), 2):
+ if co_code[i] == JUMP_BACKWARD:
+ try:
+ return _testinternalcapi.get_executor(code, i)
+ except ValueError:
+ pass
+ return None
+
def testfunc(n):
for i in range(n):
x = range(i)
return x
opt = _testinternalcapi.get_uop_optimizer()
- with temporary_optimizer(opt):
- testfunc(20)
+ _testinternalcapi.set_optimizer(opt)
+ testfunc(64)
ex = get_first_executor(testfunc)
- self.assertIsNotNone(ex)
+ assert ex is not None
uops = {opname for opname, _, _ in ex}
- self.assertNotIn("_LOAD_GLOBAL_BUILTIN", uops)
- self.assertIn("_LOAD_CONST_INLINE_BORROW_WITH_NULL", uops)
+ assert "_LOAD_GLOBAL_BUILTINS" not in uops
+ assert "_LOAD_CONST_INLINE_BORROW_WITH_NULL" in uops
+ """))
+ self.assertEqual(result[0].rc, 0, result)