Update test_dynamic.py from Cpython v3.11.2

This commit is contained in:
Andrey Maltsev
2023-04-02 13:55:46 +00:00
parent 07bad48dbc
commit c020c6bbf7

View File

@@ -1,6 +1,7 @@
# Test the most dynamic corner cases of Python's runtime semantics.
import builtins
import sys
import unittest
from test.support import swap_item, swap_attr
@@ -133,6 +134,63 @@ class RebindBuiltinsTests(unittest.TestCase):
self.assertEqual(foo(), 7)
# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_load_global_specialization_failure_keeps_oparg(self):
# https://github.com/python/cpython/issues/91625
class MyGlobals(dict):
def __missing__(self, key):
return int(key.removeprefix("_number_"))
code = "lambda: " + "+".join(f"_number_{i}" for i in range(1000))
sum_1000 = eval(code, MyGlobals())
expected = sum(range(1000))
# Warm up the the function for quickening (PEP 659)
for _ in range(30):
self.assertEqual(sum_1000(), expected)
class TestTracing(unittest.TestCase):
def setUp(self):
self.addCleanup(sys.settrace, sys.gettrace())
sys.settrace(None)
def test_after_specialization(self):
def trace(frame, event, arg):
return trace
turn_on_trace = False
class C:
def __init__(self, x):
self.x = x
def __del__(self):
if turn_on_trace:
sys.settrace(trace)
def f():
# LOAD_GLOBAL[_BUILTIN] immediately follows the call to C.__del__
C(0).x, len
def g():
# BINARY_SUSCR[_LIST_INT] immediately follows the call to C.__del__
[0][C(0).x]
def h():
# BINARY_OP[_ADD_INT] immediately follows the call to C.__del__
0 + C(0).x
for func in (f, g, h):
with self.subTest(func.__name__):
for _ in range(58):
func()
turn_on_trace = True
func()
sys.settrace(None)
turn_on_trace = False
if __name__ == "__main__":
unittest.main()