[pypy-svn] r71449 - in pypy/branch/gc-better-hash/pypy/rpython: lltypesystem memory/gc/test
arigo at codespeak.net
arigo at codespeak.net
Wed Feb 24 16:49:36 CET 2010
Author: arigo
Date: Wed Feb 24 16:49:35 2010
New Revision: 71449
Modified:
pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llarena.py
pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llmemory.py
pypy/branch/gc-better-hash/pypy/rpython/memory/gc/test/test_direct.py
Log:
A direct test about identityhash().
Modified: pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llarena.py
==============================================================================
--- pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llarena.py (original)
+++ pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llarena.py Wed Feb 24 16:49:35 2010
@@ -227,7 +227,7 @@
return self.arena._getid() + self.offset
-def _getfakearenaaddress(addr):
+def getfakearenaaddress(addr):
"""Logic to handle test_replace_object_with_stub()."""
if isinstance(addr, fakearenaaddress):
return addr
@@ -306,7 +306,7 @@
* 1: clear, optimized for a very large area of memory
* 2: clear, optimized for a small or medium area of memory
"""
- arena_addr = _getfakearenaaddress(arena_addr)
+ arena_addr = getfakearenaaddress(arena_addr)
arena_addr.arena.reset(zero, arena_addr.offset, size)
def arena_reserve(addr, size, check_alignment=True):
@@ -315,7 +315,7 @@
overlap. The size must be symbolic; in non-translated version
this is used to know what type of lltype object to allocate."""
from pypy.rpython.memory.lltypelayout import memory_alignment
- addr = _getfakearenaaddress(addr)
+ addr = getfakearenaaddress(addr)
if check_alignment and (addr.offset & (memory_alignment-1)) != 0:
raise ArenaError("object at offset %d would not be correctly aligned"
% (addr.offset,))
@@ -324,7 +324,7 @@
def arena_shrink_obj(addr, newsize):
""" Mark object as shorter than it was
"""
- addr = _getfakearenaaddress(addr)
+ addr = getfakearenaaddress(addr)
addr.arena.shrink_obj(addr.offset, newsize)
def round_up_for_allocation(size, minsize=0):
@@ -505,3 +505,11 @@
register_external(arena_new_view, [llmemory.Address], llmemory.Address,
'll_arena.arena_new_view', llimpl=llimpl_arena_new_view,
llfakeimpl=arena_new_view, sandboxsafe=True)
+
+def llimpl_getfakearenaaddress(addr):
+ return addr
+register_external(getfakearenaaddress, [llmemory.Address], llmemory.Address,
+ 'll_arena.getfakearenaaddress',
+ llimpl=llimpl_getfakearenaaddress,
+ llfakeimpl=getfakearenaaddress,
+ sandboxsafe=True)
Modified: pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llmemory.py (original)
+++ pypy/branch/gc-better-hash/pypy/rpython/lltypesystem/llmemory.py Wed Feb 24 16:49:35 2010
@@ -490,7 +490,7 @@
if self.ptr is not None and self.ptr._was_freed():
# hack to support llarena.test_replace_object_with_stub()
from pypy.rpython.lltypesystem import llarena
- return llarena._getfakearenaaddress(self)
+ return llarena.getfakearenaaddress(self)
else:
return self
Modified: pypy/branch/gc-better-hash/pypy/rpython/memory/gc/test/test_direct.py
==============================================================================
--- pypy/branch/gc-better-hash/pypy/rpython/memory/gc/test/test_direct.py (original)
+++ pypy/branch/gc-better-hash/pypy/rpython/memory/gc/test/test_direct.py Wed Feb 24 16:49:35 2010
@@ -264,6 +264,51 @@
self.gc.collect()
verify()
+ def test_identityhash(self):
+ # a "does not crash" kind of test
+ p_const = lltype.malloc(S, immortal=True)
+ self.consider_constant(p_const)
+ # (1) p is in the nursery
+ self.gc.collect()
+ p = self.malloc(S)
+ hash = self.gc.identityhash(p)
+ print hash
+ assert isinstance(hash, (int, long))
+ assert hash == self.gc.identityhash(p)
+ self.stackroots.append(p)
+ for i in range(6):
+ self.gc.collect()
+ assert hash == self.gc.identityhash(self.stackroots[-1])
+ self.stackroots.pop()
+ # (2) p is an older object
+ p = self.malloc(S)
+ self.stackroots.append(p)
+ self.gc.collect()
+ hash = self.gc.identityhash(self.stackroots[-1])
+ print hash
+ assert isinstance(hash, (int, long))
+ for i in range(6):
+ self.gc.collect()
+ assert hash == self.gc.identityhash(self.stackroots[-1])
+ self.stackroots.pop()
+ # (3) p is a gen3 object (for hybrid)
+ p = self.malloc(S)
+ self.stackroots.append(p)
+ for i in range(6):
+ self.gc.collect()
+ hash = self.gc.identityhash(self.stackroots[-1])
+ print hash
+ assert isinstance(hash, (int, long))
+ for i in range(2):
+ self.gc.collect()
+ assert hash == self.gc.identityhash(self.stackroots[-1])
+ self.stackroots.pop()
+ # (4) p is a prebuilt object
+ hash = self.gc.identityhash(p_const)
+ print hash
+ assert isinstance(hash, (int, long))
+ assert hash == self.gc.identityhash(p_const)
+
class TestSemiSpaceGC(DirectGCTest):
from pypy.rpython.memory.gc.semispace import SemiSpaceGC as GCClass
More information about the Pypy-commit
mailing list