@@ -269,20 +269,29 @@ def test_switchinterval(self):
269269 finally :
270270 sys .setswitchinterval (orig )
271271
272- def test_recursionlimit (self ):
272+ def test_getrecursionlimit (self ):
273+ limit = sys .getrecursionlimit ()
274+ self .assertIsInstance (limit , int )
275+ self .assertGreater (limit , 1 )
276+
273277 self .assertRaises (TypeError , sys .getrecursionlimit , 42 )
274- oldlimit = sys .getrecursionlimit ()
275- self .assertRaises (TypeError , sys .setrecursionlimit )
276- self .assertRaises (ValueError , sys .setrecursionlimit , - 42 )
277- sys .setrecursionlimit (10000 )
278- self .assertEqual (sys .getrecursionlimit (), 10000 )
279- sys .setrecursionlimit (oldlimit )
278+
279+ def test_setrecursionlimit (self ):
280+ old_limit = sys .getrecursionlimit ()
281+ try :
282+ sys .setrecursionlimit (10_005 )
283+ self .assertEqual (sys .getrecursionlimit (), 10_005 )
284+
285+ self .assertRaises (TypeError , sys .setrecursionlimit )
286+ self .assertRaises (ValueError , sys .setrecursionlimit , - 42 )
287+ finally :
288+ sys .setrecursionlimit (old_limit )
280289
281290 def test_recursionlimit_recovery (self ):
282291 if hasattr (sys , 'gettrace' ) and sys .gettrace ():
283292 self .skipTest ('fatal error if run with a trace function' )
284293
285- oldlimit = sys .getrecursionlimit ()
294+ old_limit = sys .getrecursionlimit ()
286295 def f ():
287296 f ()
288297 try :
@@ -301,35 +310,31 @@ def f():
301310 with self .assertRaises (RecursionError ):
302311 f ()
303312 finally :
304- sys .setrecursionlimit (oldlimit )
313+ sys .setrecursionlimit (old_limit )
305314
306315 @test .support .cpython_only
307- def test_setrecursionlimit_recursion_depth (self ):
316+ def test_setrecursionlimit_to_depth (self ):
308317 # Issue #25274: Setting a low recursion limit must be blocked if the
309318 # current recursion depth is already higher than limit.
310319
311- from _testinternalcapi import get_recursion_depth
312-
313- def set_recursion_limit_at_depth (depth , limit ):
314- recursion_depth = get_recursion_depth ()
315- if recursion_depth >= depth :
316- with self .assertRaises (RecursionError ) as cm :
317- sys .setrecursionlimit (limit )
318- self .assertRegex (str (cm .exception ),
319- "cannot set the recursion limit to [0-9]+ "
320- "at the recursion depth [0-9]+: "
321- "the limit is too low" )
322- else :
323- set_recursion_limit_at_depth (depth , limit )
324-
325- oldlimit = sys .getrecursionlimit ()
320+ old_limit = sys .getrecursionlimit ()
326321 try :
327- sys .setrecursionlimit (1000 )
328-
329- for limit in (10 , 25 , 50 , 75 , 100 , 150 , 200 ):
330- set_recursion_limit_at_depth (limit , limit )
322+ depth = support .get_recursion_depth ()
323+ with self .subTest (limit = sys .getrecursionlimit (), depth = depth ):
324+ # depth + 1 is OK
325+ sys .setrecursionlimit (depth + 1 )
326+
327+ # reset the limit to be able to call self.assertRaises()
328+ # context manager
329+ sys .setrecursionlimit (old_limit )
330+ with self .assertRaises (RecursionError ) as cm :
331+ sys .setrecursionlimit (depth )
332+ self .assertRegex (str (cm .exception ),
333+ "cannot set the recursion limit to [0-9]+ "
334+ "at the recursion depth [0-9]+: "
335+ "the limit is too low" )
331336 finally :
332- sys .setrecursionlimit (oldlimit )
337+ sys .setrecursionlimit (old_limit )
333338
334339 def test_getwindowsversion (self ):
335340 # Raise SkipTest if sys doesn't have getwindowsversion attribute
0 commit comments