[pypy-svn] r36333 - pypy/dist/pypy/jit/timeshifter/test

pedronis at codespeak.net pedronis at codespeak.net
Tue Jan 9 12:20:23 CET 2007


Author: pedronis
Date: Tue Jan  9 12:20:21 2007
New Revision: 36333

Modified:
   pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
Log:
(arre, pedronis)

another simple test already passing



Modified: pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	Tue Jan  9 12:20:21 2007
@@ -3,28 +3,29 @@
 
 import py
 
+XY = lltype.GcForwardReference()
+GETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XY)], lltype.Signed))
+SETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XY), lltype.Signed],
+                                    lltype.Void))
+XY_ACCESS = lltype.Struct('xy',
+                          ('get_x', GETTER),
+                          ('set_x', SETTER),
+                          ('get_y', GETTER),
+                          ('set_y', SETTER),
+                          hints = {'immutable': True},
+                          )
+
+XY.become(lltype.GcStruct('xy',
+                          ('access', lltype.Ptr(XY_ACCESS)),
+                          ('x', lltype.Signed),
+                          ('y', lltype.Signed),
+                          hints = {'virtualizable': True}
+              ))
+     
 class TestVirtualizable(PortalTest):
 
     def test_simple_explicit(self):
-        XY = lltype.GcForwardReference()
-        GETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XY)], lltype.Signed))
-        SETTER = lltype.Ptr(lltype.FuncType([lltype.Ptr(XY), lltype.Signed],
-                                            lltype.Void))
-        XY_ACCESS = lltype.Struct('xy',
-                                  ('get_x', GETTER),
-                                  ('set_x', SETTER),
-                                  ('get_y', GETTER),
-                                  ('set_y', SETTER),
-                                  hints = {'immutable': True},
-                                  )
-        
-        XY.become(lltype.GcStruct('xy',
-                                  ('access', lltype.Ptr(XY_ACCESS)),
-                                  ('x', lltype.Signed),
-                                  ('y', lltype.Signed),
-                                  hints = {'virtualizable': True}
-                      ))
-        
+   
         def f(xy):
             xy_access = xy.access
             if xy_access:
@@ -52,3 +53,40 @@
         assert len(residual_graph.startblock.inputargs) == 3
         assert ([v.concretetype for v in residual_graph.startblock.inputargs] ==
                 [lltype.Ptr(XY), lltype.Signed, lltype.Signed])
+
+    def test_simple_explicit_set(self):
+   
+        def f(xy):
+            xy_access = xy.access
+            if xy_access:
+                x = xy_access.get_x(xy)
+            else:
+                x = xy.x
+            xy_access = xy.access
+            if xy_access:
+                xy_access.set_y(xy, 1)
+            else:
+                xy.y = 1
+            xy_access = xy.access
+            if xy_access:
+                y = xy_access.get_y(xy)
+            else:
+                y = xy.y
+            return x+y
+
+        def main(x, y):
+            xy = lltype.malloc(XY)
+            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.x = x
+            xy.y = y
+            return f(xy)
+
+        res = self.timeshift_from_portal(main, f, [20, 22], policy=P_NOVIRTUAL)
+        assert res == 21
+        self.check_insns(getfield=0, setfield=0)
+        residual_graph = self.get_residual_graph()
+        assert len(residual_graph.startblock.inputargs) == 3
+        assert ([v.concretetype for v in residual_graph.startblock.inputargs] ==
+                [lltype.Ptr(XY), lltype.Signed, lltype.Signed])
+
+    



More information about the Pypy-commit mailing list