@@ -279,20 +279,29 @@ def test_switchinterval(self):
279279 finally :
280280 sys .setswitchinterval (orig )
281281
282- def test_recursionlimit (self ):
282+ def test_getrecursionlimit (self ):
283+ limit = sys .getrecursionlimit ()
284+ self .assertIsInstance (limit , int )
285+ self .assertGreater (limit , 1 )
286+
283287 self .assertRaises (TypeError , sys .getrecursionlimit , 42 )
284- oldlimit = sys .getrecursionlimit ()
285- self .assertRaises (TypeError , sys .setrecursionlimit )
286- self .assertRaises (ValueError , sys .setrecursionlimit , - 42 )
287- sys .setrecursionlimit (10000 )
288- self .assertEqual (sys .getrecursionlimit (), 10000 )
289- sys .setrecursionlimit (oldlimit )
288+
289+ def test_setrecursionlimit (self ):
290+ old_limit = sys .getrecursionlimit ()
291+ try :
292+ sys .setrecursionlimit (10_005 )
293+ self .assertEqual (sys .getrecursionlimit (), 10_005 )
294+
295+ self .assertRaises (TypeError , sys .setrecursionlimit )
296+ self .assertRaises (ValueError , sys .setrecursionlimit , - 42 )
297+ finally :
298+ sys .setrecursionlimit (old_limit )
290299
291300 def test_recursionlimit_recovery (self ):
292301 if hasattr (sys , 'gettrace' ) and sys .gettrace ():
293302 self .skipTest ('fatal error if run with a trace function' )
294303
295- oldlimit = sys .getrecursionlimit ()
304+ old_limit = sys .getrecursionlimit ()
296305 def f ():
297306 f ()
298307 try :
@@ -311,35 +320,31 @@ def f():
311320 with self .assertRaises (RecursionError ):
312321 f ()
313322 finally :
314- sys .setrecursionlimit (oldlimit )
323+ sys .setrecursionlimit (old_limit )
315324
316325 @test .support .cpython_only
317- def test_setrecursionlimit_recursion_depth (self ):
326+ def test_setrecursionlimit_to_depth (self ):
318327 # Issue #25274: Setting a low recursion limit must be blocked if the
319328 # current recursion depth is already higher than limit.
320329
321- from _testinternalcapi import get_recursion_depth
322-
323- def set_recursion_limit_at_depth (depth , limit ):
324- recursion_depth = get_recursion_depth ()
325- if recursion_depth >= depth :
326- with self .assertRaises (RecursionError ) as cm :
327- sys .setrecursionlimit (limit )
328- self .assertRegex (str (cm .exception ),
329- "cannot set the recursion limit to [0-9]+ "
330- "at the recursion depth [0-9]+: "
331- "the limit is too low" )
332- else :
333- set_recursion_limit_at_depth (depth , limit )
334-
335- oldlimit = sys .getrecursionlimit ()
330+ old_limit = sys .getrecursionlimit ()
336331 try :
337- sys .setrecursionlimit (1000 )
338-
339- for limit in (10 , 25 , 50 , 75 , 100 , 150 , 200 ):
340- set_recursion_limit_at_depth (limit , limit )
332+ depth = support .get_recursion_depth ()
333+ with self .subTest (limit = sys .getrecursionlimit (), depth = depth ):
334+ # depth + 1 is OK
335+ sys .setrecursionlimit (depth + 1 )
336+
337+ # reset the limit to be able to call self.assertRaises()
338+ # context manager
339+ sys .setrecursionlimit (old_limit )
340+ with self .assertRaises (RecursionError ) as cm :
341+ sys .setrecursionlimit (depth )
342+ self .assertRegex (str (cm .exception ),
343+ "cannot set the recursion limit to [0-9]+ "
344+ "at the recursion depth [0-9]+: "
345+ "the limit is too low" )
341346 finally :
342- sys .setrecursionlimit (oldlimit )
347+ sys .setrecursionlimit (old_limit )
343348
344349 def test_getwindowsversion (self ):
345350 # Raise SkipTest if sys doesn't have getwindowsversion attribute
0 commit comments