[pypy-svn] r68093 - pypy/trunk/pypy/jit/metainterp/test

pedronis at codespeak.net pedronis at codespeak.net
Thu Oct 1 12:44:35 CEST 2009


Author: pedronis
Date: Thu Oct  1 12:44:35 2009
New Revision: 68093

Modified:
   pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
(cfbolz, pedronis) first step in reworking store_final_boxes_in_guard, make the optimizeopt test don't care
about the exact order of fail_args which will be harder to keep unchanging, but still test enough



Modified: pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py	Thu Oct  1 12:44:35 2009
@@ -47,7 +47,7 @@
     assert fdescr.rd_frame_infos == fi
 # ____________________________________________________________
 
-def equaloplists(oplist1, oplist2, remap={}):
+def equaloplists(oplist1, oplist2, strict_fail_args=True, remap={}):
     print '-'*20, 'Comparing lists', '-'*20
     for op1, op2 in zip(oplist1, oplist2):
         txt1 = str(op1)
@@ -68,8 +68,13 @@
             assert op1.descr == op2.descr
         if op1.fail_args or op2.fail_args:
             assert len(op1.fail_args) == len(op2.fail_args)
-            for x, y in zip(op1.fail_args, op2.fail_args):
-                assert x == remap.get(y, y)
+            if strict_fail_args:
+                for x, y in zip(op1.fail_args, op2.fail_args):
+                    assert x == remap.get(y, y)
+            else:
+                fail_args1 = set(op1.fail_args)
+                fail_args2 = set([remap.get(y, y) for y in op2.fail_args])
+                assert fail_args1 == fail_args2
     assert len(oplist1) == len(oplist2)
     print '-'*57
     return True
@@ -101,10 +106,16 @@
     """
     namespace = {}
     loop1 = pure_parse(ops, namespace=namespace)
-    loop2 = pure_parse(ops.replace("[i2, i1]", "[i2, i0]"),
+    loop2 = pure_parse(ops.replace("[i2, i1]", "[i1, i2]"),
                        namespace=namespace)
     py.test.raises(AssertionError,
                    "equaloplists(loop1.operations, loop2.operations)")
+    assert equaloplists(loop1.operations, loop2.operations,
+                        strict_fail_args=False)
+    loop3 = pure_parse(ops.replace("[i2, i1]", "[i2, i0]"),
+                       namespace=namespace)
+    py.test.raises(AssertionError,
+                   "equaloplists(loop1.operations, loop3.operations)")
 
 # ____________________________________________________________
 
@@ -135,8 +146,7 @@
             assert box1.__class__ == box2.__class__
             remap[box2] = box1
         assert equaloplists(optimized.operations,
-                            expected.operations,
-                            remap)
+                            expected.operations, False, remap)
 
     def optimize_loop(self, ops, spectext, optops, checkspecnodes=True):
         loop = self.parse(ops)
@@ -153,6 +163,7 @@
             # combinations different from the one computed by optimizefindnode
             loop.token.specnodes = self.unpack_specnodes(spectext)
         #
+        self.loop = loop
         optimize_loop_1(self.cpu, loop)
         #
         expected = self.parse(optops)
@@ -1253,18 +1264,17 @@
 
     def make_fail_descr(self):
         class FailDescr(compile.ResumeGuardDescr):
-            args_seen = []
+            oparse = None
             def _oparser_uses_descr_of_guard(self, oparse, fail_args):
                 # typically called twice, before and after optimization
-                if len(self.args_seen) == 0:
+                if self.oparse is None:
                     fdescr.rd_frame_info_list = resume.FrameInfo(None,
                                                                  FakeFrame())
                     fdescr.rd_snapshot = resume.Snapshot(None, fail_args)
                     fdescr.virtuals = None
-                self.args_seen.append((fail_args, oparse))
+                self.oparse = oparse
         #
         fdescr = instantiate(FailDescr)
-        self.fdescr = fdescr
         self.namespace['fdescr'] = fdescr
 
     def teardown_method(self, meth):
@@ -1348,11 +1358,13 @@
                 index += 1
 
     def check_expanded_fail_descr(self, expectedtext):
-        fdescr = self.fdescr
-        args, oparse = fdescr.args_seen[-1]
-        reader = resume.ResumeDataReader(fdescr, args, MyMetaInterp(self.cpu))
+        guard_op, = [op for op in self.loop.operations if op.is_guard()]
+        fail_args = guard_op.fail_args
+        fdescr = guard_op.descr
+        reader = resume.ResumeDataReader(fdescr, fail_args,
+                                         MyMetaInterp(self.cpu))
         boxes = reader.consume_boxes()
-        self._verify_fail_args(boxes, oparse, expectedtext)
+        self._verify_fail_args(boxes, fdescr.oparse, expectedtext)
 
     def test_expand_fail_1(self):
         self.make_fail_descr()



More information about the Pypy-commit mailing list