[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