[pypy-svn] r54555 - pypy/branch/gc-tweak/pypy/rpython/memory/gc/test
arigo at codespeak.net
arigo at codespeak.net
Thu May 8 13:40:52 CEST 2008
Author: arigo
Date: Thu May 8 13:40:50 2008
New Revision: 54555
Modified:
pypy/branch/gc-tweak/pypy/rpython/memory/gc/test/test_direct.py
Log:
A couple of extra tests.
Modified: pypy/branch/gc-tweak/pypy/rpython/memory/gc/test/test_direct.py
==============================================================================
--- pypy/branch/gc-tweak/pypy/rpython/memory/gc/test/test_direct.py (original)
+++ pypy/branch/gc-tweak/pypy/rpython/memory/gc/test/test_direct.py Thu May 8 13:40:50 2008
@@ -4,6 +4,8 @@
see as the list of roots (stack and prebuilt objects).
"""
+# XXX VERY INCOMPLETE, low coverage
+
import py
from pypy.rpython.lltypesystem import lltype, llmemory
from pypy.rpython.memory.gctypelayout import TypeLayoutBuilder
@@ -12,7 +14,9 @@
S = lltype.GcForwardReference()
S.become(lltype.GcStruct('S',
('x', lltype.Signed),
+ ('prev', lltype.Ptr(S)),
('next', lltype.Ptr(S))))
+RAW = lltype.Struct('RAW', ('p', lltype.Ptr(S)), ('q', lltype.Ptr(S)))
class DirectRootWalker(object):
@@ -109,6 +113,67 @@
assert k.next.x == 43
assert k.next.next.x == 44
+ def test_prebuilt_nongc(self):
+ raw = lltype.malloc(RAW, immortal=True)
+ self.consider_constant(raw)
+ raw.p = self.malloc(S)
+ raw.p.x = 43
+ raw.q = self.malloc(S)
+ raw.q.x = 44
+ self.gc.collect()
+ assert raw.p.x == 43
+ assert raw.q.x == 44
+
+ def test_many_objects(self):
+
+ def alloc2(i):
+ a1 = self.malloc(S)
+ a1.x = i
+ self.stackroots.append(a1)
+ a2 = self.malloc(S)
+ a1 = self.stackroots.pop()
+ a2.x = i + 1000
+ return a1, a2
+
+ def growloop(loop, a1, a2):
+ self.write(a1, 'prev', loop.prev)
+ self.write(a1.prev, 'next', a1)
+ self.write(a1, 'next', loop)
+ self.write(loop, 'prev', a1)
+ self.write(a2, 'prev', loop)
+ self.write(a2, 'next', loop.next)
+ self.write(a2.next, 'prev', a2)
+ self.write(loop, 'next', a2)
+
+ def newloop():
+ p = self.malloc(S)
+ p.next = p # initializing stores, no write barrier
+ p.prev = p
+ return p
+
+ # a loop attached to a stack root
+ self.stackroots.append(newloop())
+
+ # another loop attached to a prebuilt gc node
+ k = lltype.malloc(S, immortal=True)
+ k.next = k
+ k.prev = k
+ self.consider_constant(k)
+
+ # a third loop attached to a prebuilt nongc
+ raw = lltype.malloc(RAW, immortal=True)
+ self.consider_constant(raw)
+ raw.p = newloop()
+
+ # run!
+ for i in range(100):
+ a1, a2 = alloc2(i)
+ growloop(self.stackroots[0], a1, a2)
+ a1, a2 = alloc2(i)
+ growloop(k, a1, a2)
+ a1, a2 = alloc2(i)
+ growloop(raw.p, a1, a2)
+
class TestSemiSpaceGC(DirectGCTest):
from pypy.rpython.memory.gc.semispace import SemiSpaceGC as GCClass
More information about the Pypy-commit
mailing list