[pypy-commit] pypy jit-leaner-frontend: use hypothesis and find a bug

fijal pypy.commits at gmail.com
Fri Mar 4 09:51:54 EST 2016


Author: fijal
Branch: jit-leaner-frontend
Changeset: r82766:9030d27af66e
Date: 2016-03-04 16:51 +0200
http://bitbucket.org/pypy/pypy/changeset/9030d27af66e/

Log:	use hypothesis and find a bug

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -520,7 +520,8 @@
             guard.rd_snapshot = resume.TopSnapshot(None, [], [])
             res.operations.insert(-1, guard)
 
-    def assert_equal(self, optimized, expected, text_right=None):
+    @staticmethod
+    def assert_equal(optimized, expected, text_right=None):
         from rpython.jit.metainterp.optimizeopt.util import equaloplists
         assert len(optimized.inputargs) == len(expected.inputargs)
         remap = {}
diff --git a/rpython/jit/metainterp/test/strategies.py b/rpython/jit/metainterp/test/strategies.py
--- a/rpython/jit/metainterp/test/strategies.py
+++ b/rpython/jit/metainterp/test/strategies.py
@@ -13,7 +13,7 @@
     lambda cis: strategies.lists(strategies.sampled_from(cis)))
 
 @strategies.composite
-def lists_of_operations(draw, inputboxes):
+def lists_of_operations(draw, inputboxes=intboxes):
     def get(draw, l1, l2, index):
         if index < len(l1):
             return l1[index]
@@ -33,7 +33,7 @@
         arg0 = get(draw, inputargs, ops, draw(s))
         arg1 = get(draw, inputargs, ops, draw(s))
         ops.append(ResOperation(rop.INT_ADD, [arg0, arg1], -1))
-    return ops
+    return inputargs, ops
 
 if __name__ == '__main__':
     import pprint
diff --git a/rpython/jit/metainterp/test/test_opencoder.py b/rpython/jit/metainterp/test/test_opencoder.py
--- a/rpython/jit/metainterp/test/test_opencoder.py
+++ b/rpython/jit/metainterp/test/test_opencoder.py
@@ -4,6 +4,10 @@
 from rpython.jit.metainterp.history import ConstInt
 from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
 from rpython.jit.metainterp import resume
+from rpython.jit.metainterp.test.strategies import lists_of_operations
+from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest
+from rpython.jit.metainterp.history import TreeLoop
+from hypothesis import given
 
 class JitCode(object):
     def __init__(self, index):
@@ -108,3 +112,18 @@
         assert jc_index == 2
         assert pc == 1
         assert [snapshot_iter.next() for i in range(2)] == [i0, i1]
+
+    @given(lists_of_operations())
+    def test_random_snapshot(self, lst):
+        inputargs, ops = lst
+        t = Trace(inputargs)
+        for op in ops:
+            t.record_op(op.getopnum(), op.getarglist())
+        inpargs, l, iter = self.unpack(t)
+        loop1 = TreeLoop("loop1")
+        loop1.inputargs = inputargs
+        loop1.operations = ops
+        loop2 = TreeLoop("loop2")
+        loop2.inputargs = inpargs
+        loop2.operations = l
+        BaseTest.assert_equal(loop1, loop2)
\ No newline at end of file


More information about the pypy-commit mailing list