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
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
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
def test_heapcache_read_fields_multiple(self): h = HeapCache() h.getfield_now_known(box1, descr1, box2) h.getfield_now_known(box3, descr1, box4) assert h.getfield(box1, descr1) is box2 assert h.getfield(box1, descr2) is None assert h.getfield(box3, descr1) is box4 assert h.getfield(box3, descr2) is None h.reset() assert h.getfield(box1, descr1) is None assert h.getfield(box1, descr2) is None assert h.getfield(box3, descr1) is None assert h.getfield(box3, descr2) is None
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
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
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