[pypy-commit] pypy default: (arigo, antocuni) write a test for writebarrier_before_copy
antocuni
noreply at buildbot.pypy.org
Mon Jun 27 18:15:38 CEST 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch:
Changeset: r45143:8f476ab671bf
Date: 2011-06-27 18:07 +0200
http://bitbucket.org/pypy/pypy/changeset/8f476ab671bf/
Log: (arigo, antocuni) write a test for writebarrier_before_copy
diff --git a/pypy/rpython/memory/gc/test/test_direct.py b/pypy/rpython/memory/gc/test/test_direct.py
--- a/pypy/rpython/memory/gc/test/test_direct.py
+++ b/pypy/rpython/memory/gc/test/test_direct.py
@@ -522,5 +522,34 @@
self.stackroots.pop()
test_card_marker.GC_PARAMS = {"card_page_indices": 4}
+ def test_writebarrier_before_copy(self):
+ from pypy.rpython.memory.gc import minimark
+ largeobj_size = self.gc.nonlarge_max + 1
+ p_src = self.malloc(VAR, largeobj_size)
+ p_dst = self.malloc(VAR, largeobj_size)
+ # make them old
+ self.stackroots.append(p_src)
+ self.stackroots.append(p_dst)
+ self.gc.collect()
+ p_dst = self.stackroots.pop()
+ p_src = self.stackroots.pop()
+ #
+ addr_src = llmemory.cast_ptr_to_adr(p_src)
+ addr_dst = llmemory.cast_ptr_to_adr(p_dst)
+ hdr_src = self.gc.header(addr_src)
+ hdr_dst = self.gc.header(addr_dst)
+ #
+ assert hdr_src.tid & minimark.GCFLAG_NO_YOUNG_PTRS
+ assert hdr_dst.tid & minimark.GCFLAG_NO_YOUNG_PTRS
+ #
+ res = self.gc.writebarrier_before_copy(addr_src, addr_dst)
+ assert res
+ assert hdr_dst.tid & minimark.GCFLAG_NO_YOUNG_PTRS
+ #
+ hdr_src.tid &= ~minimark.GCFLAG_NO_YOUNG_PTRS # pretend we have young ptrs
+ res = self.gc.writebarrier_before_copy(addr_src, addr_dst)
+ assert res # we optimized it
+ assert hdr_dst.tid & minimark.GCFLAG_NO_YOUNG_PTRS == 0 # and we copied the flag
+
class TestMiniMarkGCFull(DirectGCTest):
from pypy.rpython.memory.gc.minimark import MiniMarkGC as GCClass
More information about the pypy-commit
mailing list