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

Reply via email to