Author: Stefan Beyer <[email protected]>
Branch: cpyext-gc-trialdeletion
Changeset: r92287:74fa1f758dc8
Date: 2017-08-31 14:45 +0200
http://bitbucket.org/pypy/pypy/changeset/74fa1f758dc8/

Log:    Added more 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
@@ -441,3 +441,47 @@
         assert r1.base.c_ob_refcnt & REFCNT_MASK == 2
         assert r2.base.c_ob_refcnt & REFCNT_MASK == 1
 
+    def test_multiple_cycles_partial_free(self):
+        self.gc.rawrefcount_init(lambda: self.trigger.append(1))
+        r1 = self._rawrefcount_cycle_obj()
+        r2 = self._rawrefcount_cycle_obj()
+        r3 = self._rawrefcount_cycle_obj()
+        r4 = self._rawrefcount_cycle_obj()
+        r5 = self._rawrefcount_cycle_obj()
+        r1.next = r2
+        r2.next = r3
+        r3.next = r1
+        r2.prev = r5
+        r5.next = r4
+        r4.next = r5
+        r5.base.c_ob_refcnt += 1
+        r4.base.c_ob_refcnt += 1
+        self._rawrefcount_buffer_obj(r1)
+        self.gc.rrc_collect_cycles()
+        assert r1.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r2.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r3.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r4.base.c_ob_refcnt & REFCNT_MASK == 2
+        assert r5.base.c_ob_refcnt & REFCNT_MASK == 1
+
+    def test_multiple_cycles_all_free(self):
+        self.gc.rawrefcount_init(lambda: self.trigger.append(1))
+        r1 = self._rawrefcount_cycle_obj()
+        r2 = self._rawrefcount_cycle_obj()
+        r3 = self._rawrefcount_cycle_obj()
+        r4 = self._rawrefcount_cycle_obj()
+        r5 = self._rawrefcount_cycle_obj()
+        r1.next = r2
+        r2.next = r3
+        r3.next = r1
+        r2.prev = r5
+        r5.next = r4
+        r4.next = r5
+        r5.base.c_ob_refcnt += 1
+        self._rawrefcount_buffer_obj(r1)
+        self.gc.rrc_collect_cycles()
+        assert r1.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r2.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r3.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r4.base.c_ob_refcnt & REFCNT_MASK == 0
+        assert r5.base.c_ob_refcnt & REFCNT_MASK == 0
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to