Ejemplo n.º 1
0
    def test_invalidate_cache(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setarrayitem(box1, descr1, index1, box2)
        h.setarrayitem(box1, descr1, index2, box4)
        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, descr1, index1) is box2
        assert h.getarrayitem(box1, descr1, index2) is box4

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

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

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

        h.invalidate_caches(rop.CALL,
                            FakeCallDescr(FakeEffektinfo.EF_RANDOM_EFFECTS),
                            [])
        assert h.getfield(box1, descr1) is None
        assert h.getarrayitem(box1, descr1, index1) is None
        assert h.getarrayitem(box1, descr1, index2) is None
Ejemplo n.º 2
0
    def test_invalidate_cache(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setarrayitem(box1, descr1, index1, box2)
        h.setarrayitem(box1, descr1, index2, box4)
        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, descr1, index1) is box2
        assert h.getarrayitem(box1, descr1, index2) is box4

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

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

        h.invalidate_caches(
            rop.CALL, FakeCallDescr(FakeEffektinfo.EF_RANDOM_EFFECTS), [])
        assert h.getfield(box1, descr1) is None
        assert h.getarrayitem(box1, descr1, index1) is None
        assert h.getarrayitem(box1, descr1, index2) is None
Ejemplo n.º 3
0
 def test_replace_box(self):
     h = HeapCache()
     h.setfield(box1, descr1, box2)
     h.setfield(box1, descr2, box3)
     h.setfield(box2, descr3, box3)
     h.replace_box(box1, box4)
     assert h.getfield(box1, descr1) is None
     assert h.getfield(box1, descr2) is None
     assert h.getfield(box4, descr1) is box2
     assert h.getfield(box4, descr2) is box3
     assert h.getfield(box2, descr3) is box3
Ejemplo n.º 4
0
 def test_replace_box(self):
     h = HeapCache()
     h.setfield(box1, descr1, box2)
     h.setfield(box1, descr2, box3)
     h.setfield(box2, descr3, box3)
     h.replace_box(box1, box4)
     assert h.getfield(box1, descr1) is None
     assert h.getfield(box1, descr2) is None
     assert h.getfield(box4, descr1) is box2
     assert h.getfield(box4, descr2) is box3
     assert h.getfield(box2, descr3) is box3
Ejemplo n.º 5
0
    def test_replace_box_twice(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setfield(box1, descr2, box3)
        h.setfield(box2, descr3, box3)
        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, descr1, box3)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setfield(box1, descr2, box3)
        h.setfield(box2, descr3, box3)
        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
Ejemplo n.º 6
0
    def test_replace_box_twice(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setfield(box1, descr2, box3)
        h.setfield(box2, descr3, box3)
        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, descr1, box3)
        assert h.getfield(box4, descr1) is box3

        h = HeapCache()
        h.setfield(box1, descr1, box2)
        h.setfield(box1, descr2, box3)
        h.setfield(box2, descr3, box3)
        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
Ejemplo n.º 7
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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, descr2, box3)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, descr1, box3)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, descr1, box1)
        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
Ejemplo n.º 8
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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is None
        h.setfield(box1, descr2, box3)
        assert h.getfield(box1, descr1) is box2
        assert h.getfield(box1, descr2) is box3
        h.setfield(box1, descr1, box3)
        assert h.getfield(box1, descr1) is box3
        assert h.getfield(box1, descr2) is box3
        h.setfield(box3, descr1, box1)
        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
Ejemplo n.º 9
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2  # box1 and box3 cannot alias
        h.setfield(box1, descr1, box3)
        assert h.getfield(box1, descr1) is box3
Ejemplo n.º 10
0
    def test_heapcache_write_fields_multiple(self):
        h = HeapCache()
        h.setfield(box1, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        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, descr1, box2)
        assert h.getfield(box1, descr1) is box2
        h.setfield(box3, descr1, box4)
        assert h.getfield(box3, descr1) is box4
        assert h.getfield(box1, descr1) is box2 # box1 and box3 cannot alias
        h.setfield(box1, descr1, box3)
        assert h.getfield(box1, descr1) is box3