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

fijal at codespeak.net fijal at codespeak.net
Mon Mar 9 13:02:01 CET 2009


Author: fijal
Date: Mon Mar  9 13:02:00 2009
New Revision: 62752

Modified:
   pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py
Log:
one more test + update external_read


Modified: pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py	(original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_virtualizable.py	Mon Mar  9 13:02:00 2009
@@ -342,8 +342,41 @@
         res = self.meta_interp(f, [10], policy=StopAtXPolicy(g))
         assert res == 0
 
+    def test_external_pass(self):
+        jitdriver = JitDriver(greens = [], reds = ['frame', 'n', 'z'],
+                              virtualizables = ['frame'])
+
+        class BaseFrame(object):
+            _virtualizable2_ = True
+
+            def __init__(self, x):
+                self.x = x
+
+        class Frame(BaseFrame):
+            pass
+
+        def g(x):
+            return x[1] == 1
+
+        def f(n):
+            frame = Frame([1,2,3])
+            z = 0
+            while n > 0:
+                jitdriver.can_enter_jit(frame=frame, n=n, z=z)
+                jitdriver.jit_merge_point(frame=frame, n=n, z=z)
+                z += g(frame.x)
+                n -= 1
+            return z
+
+        res = self.meta_interp(f, [10], policy=StopAtXPolicy(g))
+        assert res == f(10)
+        
+
     def test_external_read(self):
         py.test.skip("Fails")
+        jitdriver = JitDriver(greens = [], reds = ['frame'],
+                              virtualizables = ['frame'])
+        
         class Frame(object):
             _virtualizable2_ = True
         class SomewhereElse:
@@ -361,12 +394,13 @@
             frame.y = 10
             somewhere_else.top_frame = frame
             while frame.x > 0:
+                jitdriver.can_enter_jit(frame=frame)
+                jitdriver.jit_merge_point(frame=frame)
                 frame.x -= g()
                 frame.y += 1
             return frame.x
 
-        res = self.meta_interp(f, [123], exceptions=False,
-                               policy=StopAtXPolicy(g))
+        res = self.meta_interp(f, [123], policy=StopAtXPolicy(g))
         assert res == f(123)
         self.check_loops(getfield_gc=0, setfield_gc=0)
 



More information about the Pypy-commit mailing list