recursive_iternext.py 1015 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # This tests that recursion with iternext doesn't lead to segfault.
  2. try:
  3. enumerate
  4. filter
  5. map
  6. max
  7. zip
  8. except:
  9. print("SKIP")
  10. raise SystemExit
  11. # We need to pick an N that is large enough to hit the recursion
  12. # limit, but not too large that we run out of heap memory.
  13. try:
  14. # large stack/heap, eg unix
  15. [0] * 80000
  16. N = 2400
  17. except:
  18. try:
  19. # medium, eg pyboard
  20. [0] * 10000
  21. N = 1000
  22. except:
  23. # small, eg esp8266
  24. N = 100
  25. try:
  26. x = (1, 2)
  27. for i in range(N):
  28. x = enumerate(x)
  29. tuple(x)
  30. except RuntimeError:
  31. print("RuntimeError")
  32. try:
  33. x = (1, 2)
  34. for i in range(N):
  35. x = filter(None, x)
  36. tuple(x)
  37. except RuntimeError:
  38. print("RuntimeError")
  39. try:
  40. x = (1, 2)
  41. for i in range(N):
  42. x = map(max, x, ())
  43. tuple(x)
  44. except RuntimeError:
  45. print("RuntimeError")
  46. try:
  47. x = (1, 2)
  48. for i in range(N):
  49. x = zip(x)
  50. tuple(x)
  51. except RuntimeError:
  52. print("RuntimeError")