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

Reply via email to