Author: Ronan Lamy <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit