[pypy-svn] r65059 - pypy/branch/pyjitpl5/pypy/jit/backend/test
arigo at codespeak.net
arigo at codespeak.net
Tue May 5 14:40:45 CEST 2009
Author: arigo
Date: Tue May 5 14:40:44 2009
New Revision: 65059
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/test/test_ll_random.py
pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py
Log:
rop.OOIS, rop.OOISNOT, rop.OOISNULL.
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/test/test_ll_random.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/test/test_ll_random.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/test/test_ll_random.py Tue May 5 14:40:44 2009
@@ -14,6 +14,8 @@
def __init__(self, *args, **kw):
test_random.OperationBuilder.__init__(self, *args, **kw)
self.vtable_counter = 0
+ self.structure_types = []
+ self.structure_types_and_vtables = []
def get_structptr_var(self, r, must_have_vtable=False, type=lltype.Struct):
while True:
@@ -61,7 +63,9 @@
TYPE = lltype.Signed
return TYPE
- def get_random_structure_type(self, r, with_vtable=None):
+ def get_random_structure_type(self, r, with_vtable=None, cache=True):
+ if cache and self.structure_types and r.random() < 0.5:
+ return r.choice(self.structure_types)
fields = []
kwds = {}
if with_vtable:
@@ -72,20 +76,25 @@
fields.append(('f%d' % i, TYPE))
S = lltype.GcStruct('S%d' % self.counter, *fields, **kwds)
self.counter += 1
+ if cache:
+ self.structure_types.append(S)
return S
def get_random_structure_type_and_vtable(self, r):
+ if self.structure_types_and_vtables and r.random() < 0.5:
+ return r.choice(self.structure_types_and_vtables)
vtable = lltype.malloc(rclass.OBJECT_VTABLE, immortal=True)
vtable.subclassrange_min = self.vtable_counter
vtable.subclassrange_max = self.vtable_counter
self.vtable_counter += 1
- S = self.get_random_structure_type(r, with_vtable=vtable)
+ S = self.get_random_structure_type(r, with_vtable=vtable, cache=False)
name = S._name
vtable.name = lltype.malloc(lltype.Array(lltype.Char), len(name)+1,
immortal=True)
for i in range(len(name)):
vtable.name[i] = name[i]
vtable.name[len(name)] = '\x00'
+ self.structure_types_and_vtables.append((S, vtable))
return S, vtable
def get_random_structure(self, r, has_vtable=False):
@@ -405,8 +414,10 @@
self.put(builder, args, descr)
assert builder.cpu.get_exception()
builder.cpu.clear_exception()
- _, vtableptr = builder.get_random_structure_type_and_vtable(r)
- assert vtableptr != exc
+ while True:
+ _, vtableptr = builder.get_random_structure_type_and_vtable(r)
+ if vtableptr != exc:
+ break
other_box = ConstAddr(llmemory.cast_ptr_to_adr(vtableptr), builder.cpu)
op = ResOperation(rop.GUARD_EXCEPTION, [other_box], BoxPtr())
op._exc_box = ConstAddr(llmemory.cast_ptr_to_adr(exc), builder.cpu)
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py Tue May 5 14:40:44 2009
@@ -37,11 +37,21 @@
if self.boolvars and r.random() < 0.8:
v = r.choice(self.boolvars)
elif self.ptrvars and r.random() < 0.4:
- v, S = r.choice(self.ptrvars)
- if r.random() < 0.5:
- v = self.do(rop.OONONNULL, [v])
+ v, S = r.choice(self.ptrvars + self.prebuilt_ptr_consts)[:2]
+ v2, S2 = r.choice(self.ptrvars + self.prebuilt_ptr_consts)[:2]
+ if S == S2 and not (isinstance(v, ConstPtr) and
+ isinstance(v2, ConstPtr)):
+ if r.random() < 0.5:
+ v = self.do(rop.OOIS, [v, v2])
+ else:
+ v = self.do(rop.OOISNOT, [v, v2])
else:
- v = self.do(rop.OOISNULL, [v])
+ if isinstance(v, ConstPtr):
+ v, S = r.choice(self.ptrvars)
+ if r.random() < 0.5:
+ v = self.do(rop.OONONNULL, [v])
+ else:
+ v = self.do(rop.OOISNULL, [v])
else:
v = r.choice(self.intvars)
v = self.do(rop.INT_IS_TRUE, [v])
More information about the Pypy-commit
mailing list