Author: Ronan Lamy <ronan.l...@gmail.com> Branch: rawrefcount-review Changeset: r82822:805b6b103730 Date: 2016-03-06 16:09 +0000 http://bitbucket.org/pypy/pypy/changeset/805b6b103730/
Log: Try to simplify tests diff --git a/rpython/memory/gc/test/test_rawrefcount.py b/rpython/memory/gc/test/test_rawrefcount.py --- a/rpython/memory/gc/test/test_rawrefcount.py +++ b/rpython/memory/gc/test/test_rawrefcount.py @@ -28,42 +28,58 @@ count2 = len(self.trigger) assert count2 - count1 == expected_trigger + def create_gcobj(self, intval, old=False, immortal=False): + if immortal: + p1 = lltype.malloc(S, immortal=True) + p1.x = intval + self.consider_constant(p1) + return p1 + p1 = self.malloc(S) + p1.x = intval + if old: + self.stackroots.append(p1) + self._collect(major=False) + p1 = self.stackroots.pop() + return p1 + + def create_rawobj(self, immortal=False): + r1 = lltype.malloc(PYOBJ_HDR, flavor='raw', immortal=immortal) + r1.ob_refcnt = 0 + r1.ob_pypy_link = 0 + return r1 + + def create_link(self, rawobj, gcobj, is_light=False, is_pyobj=False): + if is_light: + rawobj.ob_refcnt += REFCNT_FROM_PYPY_LIGHT + else: + rawobj.ob_refcnt += REFCNT_FROM_PYPY + rawaddr = llmemory.cast_ptr_to_adr(rawobj) + gcref = lltype.cast_opaque_ptr(llmemory.GCREF, gcobj) + if is_pyobj: + assert not is_light + self.gc.rawrefcount_create_link_pyobj(gcref, rawaddr) + else: + self.gc.rawrefcount_create_link_pypy(gcref, rawaddr) + def _rawrefcount_pair(self, intval, is_light=False, is_pyobj=False, create_old=False, create_immortal=False): + self.trigger = [] + self.gc.rawrefcount_init(lambda: self.trigger.append(1)) + # + p1 = self.create_gcobj(intval, old=create_old, immortal=create_immortal) + r1 = self.create_rawobj(immortal=create_immortal) + self.create_link(r1, p1, is_light=is_light, is_pyobj=is_pyobj) if is_light: rc = REFCNT_FROM_PYPY_LIGHT else: rc = REFCNT_FROM_PYPY - self.trigger = [] - self.gc.rawrefcount_init(lambda: self.trigger.append(1)) - # - if create_immortal: - p1 = lltype.malloc(S, immortal=True) - else: - p1 = self.malloc(S) - p1.x = intval - if create_immortal: - self.consider_constant(p1) - elif create_old: - self.stackroots.append(p1) - self._collect(major=False) - p1 = self.stackroots.pop() - p1ref = lltype.cast_opaque_ptr(llmemory.GCREF, p1) - r1 = lltype.malloc(PYOBJ_HDR, flavor='raw', immortal=create_immortal) - r1.ob_refcnt = rc - r1.ob_pypy_link = 0 - r1addr = llmemory.cast_ptr_to_adr(r1) - if is_pyobj: - assert not is_light - self.gc.rawrefcount_create_link_pyobj(p1ref, r1addr) - else: - self.gc.rawrefcount_create_link_pypy(p1ref, r1addr) assert r1.ob_refcnt == rc assert r1.ob_pypy_link != 0 def check_alive(extra_refcount): assert r1.ob_refcnt == rc + extra_refcount assert r1.ob_pypy_link != 0 + r1addr = llmemory.cast_ptr_to_adr(r1) p1ref = self.gc.rawrefcount_to_obj(r1addr) p1 = lltype.cast_opaque_ptr(lltype.Ptr(S), p1ref) assert p1.x == intval @@ -72,25 +88,25 @@ else: assert self.gc.rawrefcount_from_obj(p1ref) == llmemory.NULL return p1 - return p1, p1ref, r1, r1addr, check_alive + return p1, r1, check_alive @py.test.mark.parametrize('old', [True, False]) def test_rawrefcount_objects_basic(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=True, create_old=old)) - p2 = self.malloc(S) - p2.x = 84 + p1ref = lltype.cast_opaque_ptr(llmemory.GCREF, p1) + r1addr = llmemory.cast_ptr_to_adr(r1) + assert r1.ob_pypy_link != 0 + assert self.gc.rawrefcount_from_obj(p1ref) == r1addr + assert self.gc.rawrefcount_to_obj(r1addr) == p1ref + p2 = self.create_gcobj(84) + r2 = self.create_rawobj() + r2.ob_refcnt += 1 p2ref = lltype.cast_opaque_ptr(llmemory.GCREF, p2) - r2 = lltype.malloc(PYOBJ_HDR, flavor='raw') - r2.ob_refcnt = 1 - r2.ob_pypy_link = 0 r2addr = llmemory.cast_ptr_to_adr(r2) # p2 and r2 are not linked - assert r1.ob_pypy_link != 0 assert r2.ob_pypy_link == 0 - assert self.gc.rawrefcount_from_obj(p1ref) == r1addr assert self.gc.rawrefcount_from_obj(p2ref) == llmemory.NULL - assert self.gc.rawrefcount_to_obj(r1addr) == p1ref assert self.gc.rawrefcount_to_obj(r2addr) == lltype.nullptr( llmemory.GCREF.TO) lltype.free(r1, flavor='raw') @@ -98,7 +114,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_rawrefcount_objects_collection_survives_from_raw(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=True, create_old=old)) check_alive(0) r1.ob_refcnt += 1 @@ -118,7 +134,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_rawrefcount_dies_quickly(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=True, create_old=old)) check_alive(0) self._collect(major=False) @@ -131,7 +147,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_rawrefcount_objects_collection_survives_from_obj(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=True, create_old=old)) check_alive(0) self.stackroots.append(p1) @@ -150,7 +166,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_pypy_nonlight_survives_from_raw(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=False, create_old=old)) check_alive(0) r1.ob_refcnt += 1 @@ -165,6 +181,7 @@ py.test.raises(RuntimeError, "p1.x") # dead assert r1.ob_refcnt == 0 assert r1.ob_pypy_link == 0 + r1addr = llmemory.cast_ptr_to_adr(r1) assert self.gc.rawrefcount_next_dead() == r1addr assert self.gc.rawrefcount_next_dead() == llmemory.NULL assert self.gc.rawrefcount_next_dead() == llmemory.NULL @@ -173,7 +190,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_pypy_nonlight_survives_from_obj(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=False, create_old=old)) check_alive(0) self.stackroots.append(p1) @@ -189,13 +206,14 @@ py.test.raises(RuntimeError, "p1.x") # dead assert r1.ob_refcnt == 0 assert r1.ob_pypy_link == 0 + r1addr = llmemory.cast_ptr_to_adr(r1) assert self.gc.rawrefcount_next_dead() == r1addr self.gc.check_no_more_rawrefcount_state() lltype.free(r1, flavor='raw') @py.test.mark.parametrize('old', [True, False]) def test_pypy_nonlight_dies_quickly(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_light=False, create_old=old)) check_alive(0) if old: @@ -207,12 +225,13 @@ py.test.raises(RuntimeError, "p1.x") # dead assert r1.ob_refcnt == 0 assert r1.ob_pypy_link == 0 + r1addr = llmemory.cast_ptr_to_adr(r1) assert self.gc.rawrefcount_next_dead() == r1addr self.gc.check_no_more_rawrefcount_state() lltype.free(r1, flavor='raw') def test_pyobject_pypy_link_dies_on_minor_collection(self): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_pyobj=True)) check_alive(0) r1.ob_refcnt += 1 # the pyobject is kept alive @@ -224,7 +243,7 @@ @py.test.mark.parametrize('old', [True, False]) def test_pyobject_dies(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_pyobj=True, create_old=old)) check_alive(0) if old: @@ -235,13 +254,14 @@ self._collect(major=False, expected_trigger=1) assert r1.ob_refcnt == 0 # refcnt dropped to 0 assert r1.ob_pypy_link == 0 # detached + r1addr = llmemory.cast_ptr_to_adr(r1) assert self.gc.rawrefcount_next_dead() == r1addr self.gc.check_no_more_rawrefcount_state() lltype.free(r1, flavor='raw') @py.test.mark.parametrize('old', [True, False]) def test_pyobject_survives_from_obj(self, old): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, is_pyobj=True, create_old=old)) check_alive(0) self.stackroots.append(p1) @@ -258,12 +278,13 @@ py.test.raises(RuntimeError, "p1.x") # dead assert r1.ob_refcnt == 0 assert r1.ob_pypy_link == 0 + r1addr = llmemory.cast_ptr_to_adr(r1) assert self.gc.rawrefcount_next_dead() == r1addr self.gc.check_no_more_rawrefcount_state() lltype.free(r1, flavor='raw') def test_pyobject_attached_to_prebuilt_obj(self): - p1, p1ref, r1, r1addr, check_alive = ( + p1, r1, check_alive = ( self._rawrefcount_pair(42, create_immortal=True)) check_alive(0) self._collect(major=True) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit