Author: Armin Rigo <[email protected]>
Branch: stm-gc
Changeset: r54370:b4693feb6f55
Date: 2012-04-15 15:14 +0200
http://bitbucket.org/pypy/pypy/changeset/b4693feb6f55/

Log:    Added a test.

diff --git a/pypy/rpython/memory/gc/test/test_stmtls.py 
b/pypy/rpython/memory/gc/test/test_stmtls.py
--- a/pypy/rpython/memory/gc/test/test_stmtls.py
+++ b/pypy/rpython/memory/gc/test/test_stmtls.py
@@ -9,6 +9,10 @@
 NULL = llmemory.NULL
 S = lltype.GcStruct('S', ('a', lltype.Signed), ('b', lltype.Signed),
                          ('c', lltype.Signed))
+SR = lltype.GcForwardReference()
+SR.become(lltype.GcStruct('SR', ('s1', lltype.Ptr(S)),
+                                ('sr2', lltype.Ptr(SR)),
+                                ('sr3', lltype.Ptr(SR))))
 
 
 class FakeStmOperations:
@@ -61,6 +65,10 @@
         TYPE = obj.ptr._TYPE.TO
         if TYPE == S:
             ofslist = []     # no pointers in S
+        elif TYPE == SR:
+            ofslist = [llmemory.offsetof(SR, 's1'),
+                       llmemory.offsetof(SR, 'sr2'),
+                       llmemory.offsetof(SR, 'sr3')]
         else:
             assert 0
         for ofs in ofslist:
@@ -132,4 +140,22 @@
 
     def test_alloc_a_lot_kept(self):
         for i in range(100):
-            self.stack_add(self.malloc(S))
+            s1 = self.malloc(S)
+            s1.a = i
+            self.stack_add(s1)
+        for i in range(100)[::-1]:
+            s2 = self.stack_pop()
+            assert s2.a == i
+
+    def test_alloc_chain(self):
+        srlist = lltype.nullptr(SR)
+        for i in range(100):
+            self.stack_add(srlist)
+            sr1 = self.malloc(SR)
+            srlist = self.stack_pop()
+            sr1.sr2 = srlist
+            srlist = sr1
+        for i in range(100)[::-1]:
+            assert srlist
+            srlist = srlist.sr2
+        assert not srlist
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to