PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/pypy/objspace/fake/test/test_checkmodule.py

https://bitbucket.org/pypy/pypy/
Python | 116 lines | 98 code | 14 blank | 4 comment | 1 complexity | bd57683afa1eb3f0f92253a845b2ecbc MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, Apache-2.0
  1. from rpython.rlib.objectmodel import specialize
  2. from rpython.rtyper.test.test_llinterp import interpret
  3. from pypy.objspace.fake.objspace import FakeObjSpace, is_root
  4. from pypy.interpreter.baseobjspace import W_Root
  5. from pypy.interpreter.typedef import TypeDef, GetSetProperty
  6. from pypy.interpreter.gateway import interp2app, ObjSpace
  7. def make_checker():
  8. check = []
  9. def see():
  10. check.append(True)
  11. see._annspecialcase_ = 'specialize:memo'
  12. return see, check
  13. def test_wrap_interp2app():
  14. see, check = make_checker()
  15. space = FakeObjSpace()
  16. assert len(space._seen_extras) == 0
  17. assert len(check) == 0
  18. space.wrap(interp2app(lambda space: see()))
  19. assert len(space._seen_extras) == 1
  20. assert len(check) == 0
  21. space.translates()
  22. assert len(check) == 1
  23. def test_wrap_interp2app_int():
  24. see, check = make_checker()
  25. def foobar(space, x, w_y, z):
  26. is_root(w_y)
  27. see()
  28. return space.wrap(x - z)
  29. space = FakeObjSpace()
  30. space.wrap(interp2app(foobar, unwrap_spec=[ObjSpace, int, W_Root, int]))
  31. space.translates()
  32. assert check
  33. def test_wrap_interp2app_later():
  34. see, check = make_checker()
  35. #
  36. @specialize.memo()
  37. def hithere(space):
  38. space.wrap(interp2app(foobar2))
  39. #
  40. def foobar(space):
  41. hithere(space)
  42. def foobar2(space):
  43. see()
  44. space = FakeObjSpace()
  45. space.wrap(interp2app(foobar))
  46. space.translates()
  47. assert check
  48. def test_wrap_GetSetProperty():
  49. see, check = make_checker()
  50. def foobar(w_obj, space):
  51. is_root(w_obj)
  52. see()
  53. return space.w_None
  54. space = FakeObjSpace()
  55. space.wrap(GetSetProperty(foobar))
  56. space.translates()
  57. assert check
  58. def test_gettypefor_untranslated():
  59. see, check = make_checker()
  60. class W_Foo(W_Root):
  61. def do_it(self, space, w_x):
  62. is_root(w_x)
  63. see()
  64. return W_Root()
  65. W_Foo.typedef = TypeDef('foo',
  66. __module__ = 'barmod',
  67. do_it = interp2app(W_Foo.do_it))
  68. space = FakeObjSpace()
  69. space.gettypefor(W_Foo)
  70. assert not check
  71. space.translates()
  72. assert check
  73. def test_gettype_mro_untranslated():
  74. space = FakeObjSpace()
  75. w_type = space.type(space.wrap(1))
  76. assert len(w_type.mro_w) == 2
  77. def test_gettype_mro():
  78. space = FakeObjSpace()
  79. def f(i):
  80. w_x = space.wrap(i)
  81. w_type = space.type(w_x)
  82. return len(w_type.mro_w)
  83. assert interpret(f, [1]) == 2
  84. def test_see_objects():
  85. see, check = make_checker()
  86. class W_Foo(W_Root):
  87. def __init__(self, x):
  88. self.x = x
  89. def do_it(self):
  90. if self.x == 42:
  91. return
  92. see()
  93. def f():
  94. W_Foo(42).do_it()
  95. #
  96. space = FakeObjSpace()
  97. space.translates(f)
  98. assert not check
  99. #
  100. space = FakeObjSpace()
  101. space.translates(f, seeobj_w=[W_Foo(15)])
  102. assert check