[pypy-commit] pypy gc-minimark-pinning: fix the test
fijal
noreply at buildbot.pypy.org
Sun Apr 15 20:38:09 CEST 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: gc-minimark-pinning
Changeset: r54377:d4a2fdd9a4ac
Date: 2012-04-15 20:37 +0200
http://bitbucket.org/pypy/pypy/changeset/d4a2fdd9a4ac/
Log: fix the test
diff --git a/pypy/rpython/memory/test/test_gc.py b/pypy/rpython/memory/test/test_gc.py
--- a/pypy/rpython/memory/test/test_gc.py
+++ b/pypy/rpython/memory/test/test_gc.py
@@ -986,5 +986,38 @@
res = self.interpret(f, [10])
assert res == 2
+ def test_pin_collect_tracking(self):
+ from pypy.rpython.lltypesystem import llmemory
+
+ S = lltype.GcStruct('S')
+ TP = lltype.GcStruct('x', ('x', lltype.Signed),
+ ('y', lltype.Ptr(S)))
+
+ def f(i):
+ e = lltype.malloc(TP)
+ e.x = 3
+ lltype.malloc(TP)
+ e2 = lltype.malloc(TP)
+ e2.x = 5
+ rgc.pin(e2)
+ rgc.pin(e)
+ prev = llmemory.cast_ptr_to_adr(e)
+ prev2 = llmemory.cast_ptr_to_adr(e2)
+ for k in range(i):
+ lltype.malloc(TP)
+ res = int(llmemory.cast_ptr_to_adr(e) == prev)
+ res += int(llmemory.cast_ptr_to_adr(e2) == prev2)
+ rgc.unpin(e)
+ for k in range(i):
+ lltype.malloc(TP)
+ rgc.unpin(e2)
+ assert e.x == 3 # noone overwrote it
+ assert e2.x == 5 # noone overwrote it
+ return res
+
+ res = self.interpret(f, [10])
+ assert res == 2
+
+
class TestMiniMarkGCCardMarking(TestMiniMarkGC):
GC_PARAMS = {'card_page_indices': 4}
diff --git a/pypy/rpython/memory/test/test_support.py b/pypy/rpython/memory/test/test_support.py
--- a/pypy/rpython/memory/test/test_support.py
+++ b/pypy/rpython/memory/test/test_support.py
@@ -98,12 +98,13 @@
def test_sort(self):
AddressStack = get_address_stack(chunk_size=15)
+ lla = llarena.arena_malloc(10, 2)
+ addrs = [lla + i for i in range(10)]
for _ in range(13):
ll = AddressStack()
- lla = llarena.arena_malloc(10, 2)
- addrs = [lla + i for i in range(10)]
- random.shuffle(addrs)
- for i in addrs:
+ addr_copy = addrs[:]
+ random.shuffle(addr_copy)
+ for i in addr_copy:
ll.append(i)
ll.sort()
expected = range(10)
More information about the pypy-commit
mailing list