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

cfbolz at codespeak.net cfbolz at codespeak.net
Sat Jan 19 11:21:09 CET 2008


Author: cfbolz
Date: Sat Jan 19 11:21:08 2008
New Revision: 50770

Modified:
   pypy/dist/pypy/jit/timeshifter/test/support.py
   pypy/dist/pypy/jit/timeshifter/test/test_rcontainer.py
Log:
some merging tests for virtual nested structures


Modified: pypy/dist/pypy/jit/timeshifter/test/support.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/support.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/support.py	Sat Jan 19 11:21:08 2008
@@ -90,6 +90,8 @@
     structdesc = rcontainer.StructTypeDesc(fakehrtyper, TYPE)
     box = structdesc.factory()
     for fielddesc, valuebox in zip(structdesc.fielddescs, boxes):
+        if valuebox is None:
+            break
         box.op_setfield(jitstate, fielddesc, valuebox)
     assert jitstate.curbuilder.ops == []
     return box

Modified: pypy/dist/pypy/jit/timeshifter/test/test_rcontainer.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_rcontainer.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_rcontainer.py	Sat Jan 19 11:21:08 2008
@@ -10,8 +10,12 @@
 class TestVirtualStruct:
 
     def setup_class(cls):
-        cls.STRUCT = lltype.Struct("dummy", ("foo", lltype.Signed))
+        cls.STRUCT = lltype.GcStruct("dummy", ("foo", lltype.Signed))
         cls.fielddesc = getfielddesc(cls.STRUCT, "foo")
+        FORWARD = lltype.GcForwardReference()
+        cls.NESTEDSTRUCT = lltype.GcStruct('dummy', ("foo", lltype.Signed),
+                                                    ('x', lltype.Ptr(FORWARD)))
+        FORWARD.become(cls.NESTEDSTRUCT)
 
     def test_virtualstruct_get_set_field(self):
         V42 = FakeGenVar(42)
@@ -101,3 +105,43 @@
         assert outgoingvarboxes == [constbox20]
         #       ^^^ the FrozenVar() in newfrozenbox corresponds to
         #           constbox20 in oldbox.
+
+    def test_nested_structure_no_vars(self):
+        NESTED = self.NESTEDSTRUCT
+        constbox30 = makebox(30)
+        constbox20 = makebox(20)
+        oldbox = vmalloc(NESTED, constbox20, vmalloc(NESTED, constbox30))
+
+        jitstate = FakeJITState()
+        frozenbox = oldbox.freeze(rvalue.freeze_memo())
+        # check that frozenbox matches oldbox exactly
+        outgoingvarboxes = []
+        res = frozenbox.exactmatch(oldbox, outgoingvarboxes,
+                                   rvalue.exactmatch_memo())
+        assert res
+        assert outgoingvarboxes == []     # there is no FrozenVar
+
+
+    def test_nested_structures_variables(self):
+        NESTED = self.NESTEDSTRUCT
+        V42 = FakeGenVar(42)
+        constbox20 = makebox(20)
+        oldbox = vmalloc(NESTED, constbox20, vmalloc(NESTED, makebox(V42)))
+        jitstate = FakeJITState()
+        frozenbox = oldbox.freeze(rvalue.freeze_memo())
+        # check that frozenbox matches oldbox exactly
+        outgoingvarboxes = []
+        res = frozenbox.exactmatch(oldbox, outgoingvarboxes,
+                                   rvalue.exactmatch_memo())
+        assert res
+        assert len(outgoingvarboxes) == 1 and outgoingvarboxes[0].genvar is V42
+
+        constbox30 = makebox(30)
+        newbox = vmalloc(NESTED, constbox20, vmalloc(NESTED, constbox30))
+        # check that frozenbox also matches newbox exactly
+        outgoingvarboxes = []
+        res = frozenbox.exactmatch(newbox, outgoingvarboxes,
+                                   rvalue.exactmatch_memo())
+        assert res
+        assert outgoingvarboxes == [constbox30]
+        #       ^^^ the live box corresponding to the FrozenVar



More information about the Pypy-commit mailing list