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