From 51c56f8d7242e98d5d6a3c7a7c51fe40f3da4512 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 26 Jul 2022 22:14:35 +0200 Subject: gh-93678: Address stack exhaustion on WASI (GH-95296) --- Lib/test/test_compile.py | 2 ++ Lib/test/test_dynamic.py | 11 +++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 11940be..e619446 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -108,6 +108,7 @@ class TestSpecifics(unittest.TestCase): exec('z = a', g, d) self.assertEqual(d['z'], 12) + @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI") def test_extended_arg(self): # default: 1000 * 2.5 = 2500 repetitions repeat = int(sys.getrecursionlimit() * 2.5) @@ -542,6 +543,7 @@ if 1: self.assertIn(b"Non-UTF-8", res.err) @support.cpython_only + @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI") def test_compiler_recursion_limit(self): # Expected limit is sys.getrecursionlimit() * the scaling factor # in symtable.c (currently 3) diff --git a/Lib/test/test_dynamic.py b/Lib/test/test_dynamic.py index 3e0fcf4..e896fc7 100644 --- a/Lib/test/test_dynamic.py +++ b/Lib/test/test_dynamic.py @@ -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 @@ -139,12 +140,14 @@ class RebindBuiltinsTests(unittest.TestCase): 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)) + # 1,000 on most systems + limit = sys.getrecursionlimit() + code = "lambda: " + "+".join(f"_number_{i}" for i in range(limit)) + sum_func = eval(code, MyGlobals()) + expected = sum(range(limit)) # Warm up the the function for quickening (PEP 659) for _ in range(30): - self.assertEqual(sum_1000(), expected) + self.assertEqual(sum_func(), expected) if __name__ == "__main__": unittest.main() -- cgit v0.12