660_eval.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. assert eval('1+1') == 2
  2. assert eval('[1,2,3]') == [1,2,3]
  3. def f(x):
  4. return eval('x')
  5. assert f(1) == 1
  6. a = 0
  7. assert eval('a') == 0
  8. exec('a = 1')
  9. assert a == 1
  10. def f(a):
  11. exec('a = 3')
  12. return a
  13. assert f(2) == 3
  14. exec(
  15. "exec('a = eval(\"3 + 5\")')"
  16. )
  17. assert a == 8
  18. def f():
  19. b = 1
  20. exec(
  21. "exec('b = eval(\"3 + 5\")')"
  22. )
  23. assert b == 8
  24. def abc():
  25. g = {}
  26. exec('a=1', g)
  27. return g['a']
  28. res = abc()
  29. assert (res==1), res
  30. # test locals and globals
  31. assert eval('a', {'a': 2}) == 2
  32. globals = {'a': 1}
  33. locals = {'a': 1}
  34. exec('a=2', globals, locals)
  35. assert locals == {'a': 2}
  36. assert globals == {'a': 1}
  37. exec('a=2', globals)
  38. assert globals == {'a': 2}
  39. globals = {'a': 2}
  40. locals = {'b': 3}
  41. assert eval('a*b', globals, locals) == 6
  42. code = compile('a*b', '<string>', 'eval')
  43. assert eval(code, globals, locals) == 6
  44. try:
  45. exec('a*b*c', globals, locals)
  46. exit(1)
  47. except NameError:
  48. pass
  49. # https://github.com/pocketpy/pocketpy/issues/339
  50. res = []
  51. code = '\nres.append(x)\ndef f():\n res.append(x)\nf()\n'
  52. x = 33
  53. exec(code, {'x': 42, 'res': res})
  54. assert res == [42, 42]
  55. assert x == 33
  56. # test removing trailing newlines
  57. assert eval('[1, 2, 3]\n \n') == [1, 2, 3]