[pypy-svn] r64805 - pypy/branch/pyjitpl5/pypy/jit/backend/test
arigo at codespeak.net
arigo at codespeak.net
Wed Apr 29 14:57:19 CEST 2009
Author: arigo
Date: Wed Apr 29 14:57:17 2009
New Revision: 64805
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/test/test_random.py
Log:
Basic SETFIELD_GC tests.
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 Wed Apr 29 14:57:17 2009
@@ -21,7 +21,8 @@
def do(self, opnum, argboxes, descr=None):
v_result = execute(self.cpu, opnum, argboxes, descr)
- v_result = BoxInt(v_result.value)
+ if isinstance(v_result, ConstInt):
+ v_result = BoxInt(v_result.value)
self.loop.operations.append(ResOperation(opnum, argboxes, v_result,
descr))
return v_result
@@ -103,8 +104,8 @@
print >>s, ' )'
written[S] = True
print >>s, ' p = lltype.malloc(%s)' % (S._name,)
- for name in S._names:
- print >>s, ' p.%s = %d' % (name, getattr(container, name))
+ for name, value in fields.items():
+ print >>s, ' p.%s = %d' % (name, value)
writevar(v, 'preb')
print >>s, ' %s.value =' % (names[v],),
print >>s, 'lltype.cast_opaque_ptr(llmemory.GCREF, p)'
@@ -207,14 +208,28 @@
builder.should_fail_by_num = len(builder.loop.operations) - 1
class GetFieldOp(AbstractOperation):
- def produce_into(self, builder, r):
+ def field_name(self, builder, r):
v = builder.get_structptr_var(r)
S = lltype.typeOf(v.value._obj.container)
name = r.choice(S._names)
descr = builder.cpu.fielddescrof(S, name)
descr._random_info = 'cpu.fielddescrof(%s, %r)' % (S._name, name)
+ return v, descr
+
+ def produce_into(self, builder, r):
+ v, descr = self.field_name(builder, r)
self.put(builder, [v], descr)
+class SetFieldOp(GetFieldOp):
+ def produce_into(self, builder, r):
+ v, descr = self.field_name(builder, r)
+ if r.random() < 0.3:
+ w = ConstInt(r.random_integer())
+ else:
+ w = r.choice(builder.intvars)
+ builder.do(self.opnum, [v, w], descr)
+
+
# ____________________________________________________________
OPERATIONS = []
@@ -259,8 +274,10 @@
OPERATIONS.append(UnaryOperation(rop.INT_IS_TRUE, boolres=True))
OPERATIONS.append(BooleanUnaryOperation(rop.BOOL_NOT, boolres=True))
-OPERATIONS.append(GetFieldOp(rop.GETFIELD_GC))
-OPERATIONS.append(GetFieldOp(rop.GETFIELD_GC_PURE))
+for i in range(3): # make more common
+ OPERATIONS.append(GetFieldOp(rop.GETFIELD_GC))
+ OPERATIONS.append(GetFieldOp(rop.GETFIELD_GC_PURE))
+ OPERATIONS.append(SetFieldOp(rop.SETFIELD_GC))
# ____________________________________________________________
@@ -335,6 +352,11 @@
for v in endvars:
expected[v] = v.value
+ for v, fields in builder.prebuilt_ptr_consts:
+ container = v.value._obj.container
+ for name, value in fields.items():
+ setattr(container, name, value)
+
for i, v in enumerate(valueboxes):
cpu.set_future_value_int(i, v.value)
op = cpu.execute_operations(loop)
More information about the Pypy-commit
mailing list