[pypy-svn] r67249 - pypy/branch/pyjitpl5/pypy/jit/metainterp/test

cfbolz at codespeak.net cfbolz at codespeak.net
Thu Aug 27 16:37:54 CEST 2009


Author: cfbolz
Date: Thu Aug 27 16:37:52 2009
New Revision: 67249

Modified:
   pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtual.py
Log:
reorganize tests a bit and make them more precise. Also unskip a subclass.


Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtual.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtual.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtual.py	Thu Aug 27 16:37:52 2009
@@ -160,15 +160,16 @@
             while n >= 0:
                 myjitdriver.can_enter_jit(n=n)
                 myjitdriver.jit_merge_point(n=n)
-                foo = Foo()
-                foo.n = n
+                foo = self._new()
+                foo.value = n
                 if n < 10:
                     break
-                n = foo.n - 1
+                n = foo.value - 1
             return n
 
         res = self.meta_interp(f, [20])
         assert res == 9
+        self.check_loops(new_with_vtable=0, new=0)
 
     def test_immutable_constant_getfield(self):
         myjitdriver = JitDriver(greens = ['stufflist'], reds = ['n', 'i'])
@@ -199,10 +200,6 @@
     def test_escapes(self):
         myjitdriver = JitDriver(greens = [], reds = ['n', 'parent'])
 
-        class Node(object):
-            def __init__(self, x):
-                self.x = x
-
         class Parent(object):
             def __init__(self, node):
                 self.node = node
@@ -211,18 +208,23 @@
             pass
 
         def f(n):
-            parent = Parent(Node(3))
+            node = self._new()
+            node.value = 3
+            parent = Parent(node)
             while n > 0:
                 myjitdriver.can_enter_jit(n=n, parent=parent)
                 myjitdriver.jit_merge_point(n=n, parent=parent)
                 node = parent.node
                 g(node)
-                parent = Parent(Node(node.x))
+                newnode = self._new()
+                newnode.value = 3
+                parent = Parent(newnode)
                 n -= 1
-            return parent.node.x
+            return parent.node.value
 
         res = self.meta_interp(f, [10], policy=StopAtXPolicy(g))
         assert res == 3
+        self.check_loops(**{self._new_op: 1}) 
 
     def test_virtual_on_virtual(self):
         myjitdriver = JitDriver(greens = [], reds = ['n', 'parent'])
@@ -236,39 +238,44 @@
                 self.f = f
         
         def f(n):
-            node = Node(SubNode(3))
+            subnode = self._new()
+            subnode.value = 3
+            node = Node(subnode)
             while n > 0:
                 myjitdriver.can_enter_jit(n=n, parent=node)
                 myjitdriver.jit_merge_point(n=n, parent=node)
-                node = Node(SubNode(n + 1))
+                subnode = self._new()
+                subnode.value = n + 1
+                node = Node(subnode)
                 if n == -3:
                     return 8
                 n -= 1
-            return node.f.f
+            return node.f.value
 
         res = self.meta_interp(f, [10])
         assert res == 2
+        self.check_loops(new=0, new_with_vtable=0) 
 
     def test_bridge_from_interpreter(self):
         mydriver = JitDriver(reds = ['n', 'f'], greens = [])
 
-        class Foo:
-            pass
-
         def f(n):
-            f = Foo()
-            f.n = 0
+            f = self._new()
+            f.value = 0
             while n > 0:
                 mydriver.can_enter_jit(n=n, f=f)
                 mydriver.jit_merge_point(n=n, f=f)
-                prev = f.n
-                f = Foo()
-                f.n = prev + n
+                prev = f.value
+                f = self._new()
+                f.value = prev + n
                 n -= 2
             return f
 
         res = self.meta_interp(f, [21], repeat=7)
-        assert res.inst_n == f(21).n
+        # hack
+        assert (getattr(res, "inst_value", -100) == f(21).value or
+                getattr(res, "value", -100) == f(21).value)
+
         self.check_tree_loop_count(2)      # the loop and the entry path
         # we get:
         #    ENTER             - compile the new loop
@@ -302,9 +309,6 @@
 class TestLLtype_NotObject(VirtualTests, LLJitMixin):
     _new_op = 'new'
 
-    def setup_class(cls):
-        py.test.skip("not supported yet")
-    
     @staticmethod
     def _new():
         return lltype.malloc(NODE)



More information about the Pypy-commit mailing list