Skip to content

Commit

Permalink
gh-92031, test_embed: Improve test for unquickening static code (#92440)
Browse files Browse the repository at this point in the history
  • Loading branch information
sweeneyde authored May 11, 2022
1 parent 6de78ef commit 27185f9
Showing 1 changed file with 30 additions and 10 deletions.
40 changes: 30 additions & 10 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,19 +343,39 @@ def test_finalize_structseq(self):
out, err = self.run_embedded_interpreter("test_repeated_init_exec", code)
self.assertEqual(out, 'Tests passed\n' * INIT_LOOPS)

@support.skip_if_pgo_task
def test_quickened_static_code_gets_unquickened_at_Py_FINALIZE(self):
# https://github.com/python/cpython/issues/92031
code = """if 1:
from importlib._bootstrap import _handle_fromlist
import dis
for name in dis.opmap:
# quicken this frozen code object.
_handle_fromlist(dis, [name], lambda *args: None)
"""

# Do these imports outside of the code string to avoid using
# importlib too much from within the code string, so that
# _handle_fromlist doesn't get quickened until we intend it to.
from dis import _all_opmap
resume = _all_opmap["RESUME"]
resume_quick = _all_opmap["RESUME_QUICK"]
from test.test_dis import QUICKENING_WARMUP_DELAY

code = textwrap.dedent(f"""\
import importlib._bootstrap
func = importlib._bootstrap._handle_fromlist
code = func.__code__
# Assert initially unquickened.
# Use sets to account for byte order.
if set(code._co_code_adaptive[:2]) != set([{resume}, 0]):
raise AssertionError()
for i in range({QUICKENING_WARMUP_DELAY}):
func(importlib._bootstrap, ["x"], lambda *args: None)
# Assert quickening worked
if set(code._co_code_adaptive[:2]) != set([{resume_quick}, 0]):
raise AssertionError()
print("Tests passed")
""")
run = self.run_embedded_interpreter
for i in range(50):
out, err = run("test_repeated_init_exec", code, timeout=60)
out, err = run("test_repeated_init_exec", code)
self.assertEqual(out, 'Tests passed\n' * INIT_LOOPS)

def test_ucnhash_capi_reset(self):
# bpo-47182: unicodeobject.c:ucnhash_capi was not reset on shutdown.
Expand Down

0 comments on commit 27185f9

Please sign in to comment.