Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r82655:2c9ed008895a
Date: 2016-03-01 18:48 +0100
http://bitbucket.org/pypy/pypy/changeset/2c9ed008895a/
Log: created a test that tries to execute a byte code block (stack is not
prepared)
diff --git a/rpython/jit/backend/llsupport/tl/test/code_strategies.py
b/rpython/jit/backend/llsupport/tl/test/code_strategies.py
--- a/rpython/jit/backend/llsupport/tl/test/code_strategies.py
+++ b/rpython/jit/backend/llsupport/tl/test/code_strategies.py
@@ -49,6 +49,12 @@
if hasattr(clazz, 'BYTE_CODE'):
yield clazz
+def get_byte_code_class(num):
+ for clazz in byte_code_classes():
+ if clazz.BYTE_CODE == num:
+ return clazz
+ return None
+
@composite
def single_bytecode(draw,
clazzes=st.sampled_from(byte_code_classes()),
@@ -57,5 +63,14 @@
inst = clazz.create_from(draw, get_strategy_for)
bytecode, consts = code.Context().transform([inst])
_stack = draw(runtime_stack(clazz))
- return clazz, bytecode, consts, _stack
+ return bytecode, consts, _stack
+@composite
+def bytecode_block(draw,
+ clazzes=st.sampled_from(byte_code_classes()),
+ integrals=st.integers(), texts=st.text()):
+ clazz = draw(clazzes)
+ inst = clazz.create_from(draw, get_strategy_for)
+ bytecode, consts = code.Context().transform([inst])
+ return bytecode, consts
+
diff --git a/rpython/jit/backend/llsupport/tl/test/test_tl_interp.py
b/rpython/jit/backend/llsupport/tl/test/test_tl_interp.py
--- a/rpython/jit/backend/llsupport/tl/test/test_tl_interp.py
+++ b/rpython/jit/backend/llsupport/tl/test/test_tl_interp.py
@@ -1,6 +1,7 @@
import py
from hypothesis import given
-from rpython.jit.backend.llsupport.tl import code, stack, interp
+from rpython.jit.backend.llsupport.tl import code, interp
+from rpython.jit.backend.llsupport.tl.stack import Stack
from rpython.jit.backend.llsupport.tl.test import code_strategies as st
class TestByteCode(object):
@@ -23,8 +24,20 @@
class TestInterp(object):
@given(st.single_bytecode())
def test_consume_stack(self, args):
- clazz, bytecode, consts, stack = args
+ bytecode, consts, stack = args
space = interp.Space()
i = interp.dispatch_once(space, 0, bytecode, consts, stack)
assert i == len(bytecode)
+ clazz = code.get_byte_code_class(ord(bytecode[0]))
assert stack.size() == len(clazz._return_on_stack_types)
+
+ @given(st.bytecode_block())
+ def test_execute_bytecode_block(self, args):
+ bytecode, consts = args
+ space = interp.Space()
+ stack = Stack(16)
+ pc = 0
+ end = len(bytecode)
+ while pc < end:
+ pc = interp.dispatch_once(space, pc, bytecode, consts, stack)
+ assert pc == len(bytecode)
diff --git a/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
b/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
--- a/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
+++ b/rpython/jit/backend/llsupport/tl/test/zrpy_gc_hypo_test.py
@@ -53,7 +53,7 @@
res = self.builder.translator.platform.execute(exe, args, env=env)
return res.returncode, res.out, res.err
- @given(st.single_bytecode())
+ @given(st.bytecode_block())
def test_execute_single_bytecode(self, program):
clazz, bytecode, consts, stack = program
result, out, err = self.execute(bytecode, consts)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit