예제 #1
0
    def test_quasiimmut_seen_consts(self):
        h = HeapCache()
        box1 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box2 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box3 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        box4 = ConstPtr(rffi.cast(llmemory.GCREF, 1))
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box3)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert h.is_quasi_immut_known(descr2, box4)

        # invalidate the descr1 cache

        vbox1 = RefFrontendOp(1)
        vbox2 = RefFrontendOp(2)
        h.setfield(vbox1, vbox2, descr1)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)

        # a call invalidates everything
        h.invalidate_caches(
            rop.CALL_N, FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
 def test_call_doesnt_invalidate_unescaped_boxes(self):
     h = HeapCache()
     h.new(box1)
     assert h.is_unescaped(box1)
     h.setfield(box1, box2, descr1)
     h.invalidate_caches(rop.CALL, FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
     assert h.getfield(box1, descr1) is box2
예제 #3
0
    def test_bug_heap_cache_is_cleared_but_not_is_unescaped_2(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        h.new(box1)
        h.new(box2)
        h.setfield(box1, box2, descr1)
        h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
        assert h.getfield(box1, descr1) is box2
        descr = BasicFailDescr()

        class XTra:
            oopspecindex = 0
            OS_ARRAYCOPY = 42
            OS_ARRAYMOVE = 49
            extraeffect = 5
            EF_LOOPINVARIANT = 1
            EF_ELIDABLE_CANNOT_RAISE = 2
            EF_ELIDABLE_OR_MEMORYERROR = 3
            EF_ELIDABLE_CAN_RAISE = 4

        descr.get_extra_info = XTra
        h.invalidate_caches(rop.CALL_N, descr, [])
        assert h.is_unescaped(box1)
        assert h.is_unescaped(box2)
        assert h.getfield(box1, descr1) is box2
예제 #4
0
    def test_invalidate_cache(self):
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setarrayitem(box1, index1, box2, descr1)
        h.setarrayitem(box1, index2, box4, descr1)
        h.invalidate_caches(rop.INT_ADD, None, [])
        h.invalidate_caches(rop.INT_ADD_OVF, None, [])
        h.invalidate_caches(rop.SETFIELD_RAW, None, [])
        h.invalidate_caches(rop.SETARRAYITEM_RAW, None, [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(
            rop.CALL, FakeCallDescr(FakeEffectinfo.EF_ELIDABLE_CANNOT_RAISE), [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(rop.GUARD_TRUE, None, [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(
            rop.CALL_LOOPINVARIANT, FakeCallDescr(FakeEffectinfo.EF_LOOPINVARIANT), [])

        h.invalidate_caches(
            rop.CALL, FakeCallDescr(FakeEffectinfo.EF_RANDOM_EFFECTS), [])
        assert h.getfield(box1, descr1) is None
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index2, descr1) is None
예제 #5
0
파일: test_heapcache.py 프로젝트: sota/pypy
    def test_bug_heap_cache_is_cleared_but_not_is_unescaped_2(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        h.new(box1)
        h.new(box2)
        h.setfield(box1, box2, descr1)
        h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
        assert h.getfield(box1, descr1) is box2
        descr = BasicFailDescr()

        class XTra:
            oopspecindex = 0
            OS_ARRAYCOPY = 42
            extraeffect = 5
            EF_LOOPINVARIANT = 1
            EF_ELIDABLE_CANNOT_RAISE = 2
            EF_ELIDABLE_OR_MEMORYERROR = 3
            EF_ELIDABLE_CAN_RAISE = 4

        descr.get_extra_info = XTra
        h.invalidate_caches(rop.CALL_N, descr, [])
        assert h.is_unescaped(box1)
        assert h.is_unescaped(box2)
        assert h.getfield(box1, descr1) is box2
예제 #6
0
    def test_invalidate_cache(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box4 = RefFrontendOp(4)
        h.setfield(box1, box2, descr1)
        h.setarrayitem(box1, index1, box2, descr1)
        h.setarrayitem(box1, index2, box4, descr1)
        h.invalidate_caches(rop.INT_ADD, None, [])
        h.invalidate_caches(rop.INT_ADD_OVF, None, [])
        h.invalidate_caches(rop.SETFIELD_RAW, None, [])
        h.invalidate_caches(rop.SETARRAYITEM_RAW, None, [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(
            rop.CALL_N, FakeCallDescr(FakeEffectinfo.EF_ELIDABLE_CANNOT_RAISE), [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(rop.GUARD_TRUE, None, [])
        assert h.getfield(box1, descr1) is box2
        assert h.getarrayitem(box1, index1, descr1) is box2
        assert h.getarrayitem(box1, index2, descr1) is box4

        h.invalidate_caches(
            rop.CALL_LOOPINVARIANT_N, FakeCallDescr(FakeEffectinfo.EF_LOOPINVARIANT), [])

        h.invalidate_caches(
            rop.CALL_N, FakeCallDescr(FakeEffectinfo.EF_RANDOM_EFFECTS), [])
        assert h.getfield(box1, descr1) is None
        assert h.getarrayitem(box1, index1, descr1) is None
        assert h.getarrayitem(box1, index2, descr1) is None
예제 #7
0
 def test_call_doesnt_invalidate_unescaped_boxes(self):
     h = HeapCache()
     h.new(box1)
     assert h.is_unescaped(box1)
     h.setfield(box1, box2, descr1)
     h.invalidate_caches(rop.CALL,
                         FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
     assert h.getfield(box1, descr1) is box2
예제 #8
0
 def test_replace_box_with_const(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     c_box3 = ConstPtr(ConstPtr.value)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box3, c_box3)
     assert h.getfield(box1, descr1) is box2
     assert c_box3.same_constant(h.getfield(box1, descr2))
     assert c_box3.same_constant(h.getfield(box2, descr3))
예제 #9
0
 def test_replace_box_with_const(self):
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     c_box3 = ConstPtr(ConstPtr.value)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box3, c_box3)
     assert h.getfield(box1, descr1) is box2
     assert c_box3.same_constant(h.getfield(box1, descr2))
     assert c_box3.same_constant(h.getfield(box2, descr3))
예제 #10
0
    def test_heapcache_fields(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box3, descr2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, box1, descr1)
        assert h.getfield(box3, descr1) is box1
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is box3

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
예제 #11
0
    def test_heapcache_fields(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box3, descr2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, box1, descr1)
        assert h.getfield(box3, descr1) is box1
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is box3

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
예제 #12
0
 def test_bug_missing_ignored_operations(self):
     h = HeapCache()
     h.new(box1)
     h.new(box2)
     h.setfield(box1, box2, descr1)
     assert h.getfield(box1, descr1) is box2
     h.invalidate_caches(rop.STRSETITEM, None, [])
     h.invalidate_caches(rop.UNICODESETITEM, None, [])
     h.invalidate_caches(rop.SETFIELD_RAW, None, [])
     h.invalidate_caches(rop.SETARRAYITEM_RAW, None, [])
     h.invalidate_caches(rop.SETINTERIORFIELD_RAW, None, [])
     h.invalidate_caches(rop.RAW_STORE, None, [])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     assert h.getfield(box1, descr1) is box2
예제 #13
0
 def test_bug_missing_ignored_operations(self):
     h = HeapCache()
     h.new(box1)
     h.new(box2)
     h.setfield(box1, box2, descr1)
     assert h.getfield(box1, descr1) is box2
     h.invalidate_caches(rop.STRSETITEM, None, [])
     h.invalidate_caches(rop.UNICODESETITEM, None, [])
     h.invalidate_caches(rop.SETFIELD_RAW, None, [])
     h.invalidate_caches(rop.SETARRAYITEM_RAW, None, [])
     h.invalidate_caches(rop.SETINTERIORFIELD_RAW, None, [])
     h.invalidate_caches(rop.RAW_STORE, None, [])
     assert h.is_unescaped(box1)
     assert h.is_unescaped(box2)
     assert h.getfield(box1, descr1) is box2
예제 #14
0
 def test_bug_heap_cache_is_cleared_but_not_is_unescaped_1(self):
     # bug if only the getfield() link is cleared (heap_cache) but not
     # the is_unescaped() flags: we can do later a GETFIELD(box1) which
     # will give us a fresh box3, which is actually equal to box2.  This
     # box3 is escaped, but box2 is still unescaped.  Bug shown e.g. by
     # calling some residual code that changes the values on box3: then
     # the content of box2 is still cached at the old value.
     h = HeapCache()
     h.new(box1)
     h.new(box2)
     h.setfield(box1, box2, descr1)
     h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
     assert h.getfield(box1, descr1) is box2
     h.invalidate_caches(rop.CALL_MAY_FORCE, None, [])
     assert not h.is_unescaped(box1)
     assert not h.is_unescaped(box2)
     assert h.getfield(box1, descr1) is None
예제 #15
0
 def test_bug_heap_cache_is_cleared_but_not_is_unescaped_1(self):
     # bug if only the getfield() link is cleared (heap_cache) but not
     # the is_unescaped() flags: we can do later a GETFIELD(box1) which
     # will give us a fresh box3, which is actually equal to box2.  This
     # box3 is escaped, but box2 is still unescaped.  Bug shown e.g. by
     # calling some residual code that changes the values on box3: then
     # the content of box2 is still cached at the old value.
     h = HeapCache()
     h.new(box1)
     h.new(box2)
     h.setfield(box1, box2, descr1)
     h.invalidate_caches(rop.SETFIELD_GC, None, [box1, box2])
     assert h.getfield(box1, descr1) is box2
     h.invalidate_caches(rop.CALL_MAY_FORCE, None, [])
     assert not h.is_unescaped(box1)
     assert not h.is_unescaped(box2)
     assert h.getfield(box1, descr1) is None
예제 #16
0
    def test_quasiimmut_seen(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box2)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box3)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box4)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert h.is_quasi_immut_known(descr2, box4)

        # invalidate the descr1 cache

        h.setfield(box1, box3, descr1)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)

        # a call invalidates everything
        h.invalidate_caches(
            rop.CALL_N, FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
예제 #17
0
    def test_quasiimmut_seen(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr1, box2)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box3)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
        h.quasi_immut_now_known(descr2, box4)
        assert h.is_quasi_immut_known(descr1, box1)
        assert h.is_quasi_immut_known(descr1, box2)
        assert h.is_quasi_immut_known(descr2, box3)
        assert h.is_quasi_immut_known(descr2, box4)

        # invalidate the descr1 cache

        h.setfield(box1, box3, descr1)
        assert not h.is_quasi_immut_known(descr1, box1)
        assert not h.is_quasi_immut_known(descr1, box2)

        # a call invalidates everything
        h.invalidate_caches(
            rop.CALL_N, FakeCallDescr(FakeEffectinfo.EF_CAN_RAISE), [])
        assert not h.is_quasi_immut_known(descr2, box3)
        assert not h.is_quasi_immut_known(descr2, box4)
예제 #18
0
    def test_replace_box(self):
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box1, box4)
        assert h.getfield(box4, descr1) is box2
        assert h.getfield(box4, descr2) is box3
        assert h.getfield(box2, descr3) is box3
        h.setfield(box4, box3, descr1)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box3, box4)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box4
        assert h.getfield(box2, descr3) is box4
예제 #19
0
    def test_replace_box(self):
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box1, box4)
        assert h.getfield(box4, descr1) is box2
        assert h.getfield(box4, descr2) is box3
        assert h.getfield(box2, descr3) is box3
        h.setfield(box4, box3, descr1)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box3, box4)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box4
        assert h.getfield(box2, descr3) is box4
예제 #20
0
    def test_replace_box_twice(self):
        py.test.skip("replacing a box with another box: not supported any more")
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box1, box4)
        h.replace_box(box4, box5)
        assert h.getfield(box5, descr1) is box2
        assert h.getfield(box5, descr2) is box3
        assert h.getfield(box2, descr3) is box3
        h.setfield(box5, box3, descr1)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box3, box4)
        h.replace_box(box4, box5)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box5
        assert h.getfield(box2, descr3) is box5
예제 #21
0
    def test_replace_box_twice(self):
        py.test.skip("replacing a box with another box: not supported any more")
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box1, box4)
        h.replace_box(box4, box5)
        assert h.getfield(box5, descr1) is box2
        assert h.getfield(box5, descr2) is box3
        assert h.getfield(box2, descr3) is box3
        h.setfield(box5, box3, descr1)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, box2, descr1)
        h.setfield(box1, box3, descr2)
        h.setfield(box2, box3, descr3)
        h.replace_box(box3, box4)
        h.replace_box(box4, box5)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box5
        assert h.getfield(box2, descr3) is box5
예제 #22
0
    def test_heapcache_fields(self):
        h = HeapCache()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box3, descr2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, box1, descr1)
        assert h.getfield(box3, descr1) is box1
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is box3

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
예제 #23
0
    def test_heapcache_fields(self):
        h = HeapCache()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, box3, descr2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, box1, descr1)
        assert h.getfield(box3, descr1) is box1
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is box3

        h.reset()
        assert h.getfield(box1, descr1) is None
        assert h.getfield(box1, descr2) is None
        assert h.getfield(box3, descr1) is None
예제 #24
0
 def test_replace_box_with_box(self):
     py.test.skip("replacing a box with another box: not supported any more")
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     box4 = RefFrontendOp(4)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box1, box4)
     assert h.getfield(box4, descr1) is box2
     assert h.getfield(box4, descr2) is box3
     assert h.getfield(box2, descr3) is box3
     h.setfield(box4, box3, descr1)
     assert h.getfield(box4, descr1) is box3
예제 #25
0
 def test_replace_box_with_box(self):
     py.test.skip("replacing a box with another box: not supported any more")
     h = HeapCache()
     box1 = RefFrontendOp(1)
     box2 = RefFrontendOp(2)
     box3 = RefFrontendOp(3)
     box4 = RefFrontendOp(4)
     h.setfield(box1, box2, descr1)
     h.setfield(box1, box3, descr2)
     h.setfield(box2, box3, descr3)
     h.replace_box(box1, box4)
     assert h.getfield(box4, descr1) is box2
     assert h.getfield(box4, descr2) is box3
     assert h.getfield(box2, descr3) is box3
     h.setfield(box4, box3, descr1)
     assert h.getfield(box4, descr1) is box3
예제 #26
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None  # box1 and box3 can alias

        h = HeapCache()
        h.new(box1)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None  # box1 and box3 can alias

        h = HeapCache()
        h.new(box1)
        h.new(box3)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2  # box1 and box3 cannot alias
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
예제 #27
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        h.new(box1)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        h.new(box1)
        h.new(box3)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2 # box1 and box3 cannot alias
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
예제 #28
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.new(box1)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.new(box1)
        h.new(box3)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2 # box1 and box3 cannot alias
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3
예제 #29
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.new(box1)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is None # box1 and box3 can alias

        h = HeapCache()
        box1 = RefFrontendOp(1)
        box2 = RefFrontendOp(2)
        box3 = RefFrontendOp(3)
        box4 = RefFrontendOp(4)
        h.new(box1)
        h.new(box3)
        h.setfield(box1, box2, descr1)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, box4, descr1)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2 # box1 and box3 cannot alias
        h.setfield(box1, box3, descr1)
        assert h.getfield(box1, descr1) is box3