[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