summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_sys_settrace.py
diff options
context:
space:
mode:
authorDennis Sweeney <36520290+sweeneyde@users.noreply.github.com>2022-04-28 04:36:34 (GMT)
committerGitHub <noreply@github.com>2022-04-28 04:36:34 (GMT)
commit37c6db60f9ac62b8a80bf04a8146274756ee0da0 (patch)
tree29cc3ac65b9ee6d2246f4efbdf23767749fbd9bd /Lib/test/test_sys_settrace.py
parent407c3afe1986f4c43cb0e68e28b90da30eebd738 (diff)
downloadcpython-37c6db60f9ac62b8a80bf04a8146274756ee0da0.zip
cpython-37c6db60f9ac62b8a80bf04a8146274756ee0da0.tar.gz
cpython-37c6db60f9ac62b8a80bf04a8146274756ee0da0.tar.bz2
gh-91869: Fix tracing of specialized instructions with extended args (GH-91945)
Diffstat (limited to 'Lib/test/test_sys_settrace.py')
-rw-r--r--Lib/test/test_sys_settrace.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 85d6bdf..b1c8f6f 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -2432,5 +2432,47 @@ output.append(4)
output.append(5)
+class TestExtendedArgs(unittest.TestCase):
+
+ def setUp(self):
+ self.addCleanup(sys.settrace, sys.gettrace())
+ sys.settrace(None)
+
+ def count_traces(self, func):
+ # warmup
+ for _ in range(20):
+ func()
+
+ counts = {"call": 0, "line": 0, "return": 0}
+ def trace(frame, event, arg):
+ counts[event] += 1
+ return trace
+
+ sys.settrace(trace)
+ func()
+ sys.settrace(None)
+
+ return counts
+
+ def test_trace_unpack_long_sequence(self):
+ ns = {}
+ code = "def f():\n (" + "y,\n "*300 + ") = range(300)"
+ exec(code, ns)
+ counts = self.count_traces(ns["f"])
+ self.assertEqual(counts, {'call': 1, 'line': 301, 'return': 1})
+
+ def test_trace_lots_of_globals(self):
+ code = """if 1:
+ def f():
+ return (
+ {}
+ )
+ """.format("\n+\n".join(f"var{i}\n" for i in range(1000)))
+ ns = {f"var{i}": i for i in range(1000)}
+ exec(code, ns)
+ counts = self.count_traces(ns["f"])
+ self.assertEqual(counts, {'call': 1, 'line': 2000, 'return': 1})
+
+
if __name__ == "__main__":
unittest.main()