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

pedronis at codespeak.net pedronis at codespeak.net
Wed Oct 14 12:25:19 CEST 2009


Author: pedronis
Date: Wed Oct 14 12:25:18 2009
New Revision: 68429

Modified:
   pypy/trunk/pypy/jit/metainterp/test/test_ztranslation.py
Log:
(cfbolz, pedronis): one step closer to killing z tests: have a test that
exercises guard_exception and guard_no_exception.


Modified: pypy/trunk/pypy/jit/metainterp/test/test_ztranslation.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_ztranslation.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_ztranslation.py	Wed Oct 14 12:25:18 2009
@@ -2,7 +2,8 @@
 from pypy.jit.metainterp.warmspot import rpython_ll_meta_interp, ll_meta_interp
 from pypy.jit.metainterp.test import test_basic
 from pypy.jit.backend.llgraph import runner
-from pypy.rlib.jit import JitDriver, OPTIMIZER_FULL, unroll_parameters, PARAMETERS
+from pypy.rlib.jit import JitDriver, OPTIMIZER_FULL, unroll_parameters
+from pypy.rlib.jit import PARAMETERS, dont_look_inside
 from pypy.jit.conftest import option
 from pypy.jit.metainterp.jitprof import Profiler
 
@@ -54,6 +55,48 @@
                                      ProfilerClass=Profiler)
         assert res == f(40)
 
+    def test_external_exception_handling_translates(self):
+        jitdriver = JitDriver(greens = [], reds = ['n', 'total'])
+
+        @dont_look_inside
+        def f(x):
+            if x > 20:
+                return 2
+            raise ValueError
+        @dont_look_inside
+        def g(x):
+            if x > 15:
+                raise ValueError
+            return 2
+        def main(i):
+            jitdriver.set_param("threshold", 3)
+            jitdriver.set_param("trace_eagerness", 2)
+            total = 0
+            n = i
+            while n > 3:
+                jitdriver.can_enter_jit(n=n, total=total)
+                jitdriver.jit_merge_point(n=n, total=total)
+                try:
+                    total += f(n)
+                except ValueError:
+                    total += 1
+                try:
+                    total += g(n)
+                except ValueError:
+                    total -= 1
+                n -= 1
+            return total * 10
+        res = ll_meta_interp(main, [40], CPUClass=self.CPUClass,
+                             type_system=self.type_system)
+        assert res == main(40)
+        from pypy.jit.metainterp import optimize
+        res = rpython_ll_meta_interp(main, [40], loops=2, CPUClass=self.CPUClass,
+                                     type_system=self.type_system,
+                                     optimizer=OPTIMIZER_FULL,
+                                     ProfilerClass=Profiler)
+        assert res == main(40)
+
+
 
 class TestTranslationLLtype(TranslationTest):
 



More information about the Pypy-commit mailing list