[pypy-svn] r18651 - in pypy/dist/pypy/rpython/l3interp: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Sat Oct 15 19:03:47 CEST 2005


Author: cfbolz
Date: Sat Oct 15 19:02:11 2005
New Revision: 18651

Modified:
   pypy/dist/pypy/rpython/l3interp/l3interp.py
   pypy/dist/pypy/rpython/l3interp/model.py
   pypy/dist/pypy/rpython/l3interp/test/test_l3interp.py
Log:
add branching test and op_int_is_true to l3interp


Modified: pypy/dist/pypy/rpython/l3interp/l3interp.py
==============================================================================
--- pypy/dist/pypy/rpython/l3interp/l3interp.py	(original)
+++ pypy/dist/pypy/rpython/l3interp/l3interp.py	Sat Oct 15 19:02:11 2005
@@ -64,4 +64,6 @@
         int2 = self.get_int(args[1])
         self.set_int(result, int1 + int2)
         
-
+    def op_int_is_true(self, result, args):
+        int1 = self.get_int(args[0])
+        self.set_int(result, bool(int1))

Modified: pypy/dist/pypy/rpython/l3interp/model.py
==============================================================================
--- pypy/dist/pypy/rpython/l3interp/model.py	(original)
+++ pypy/dist/pypy/rpython/l3interp/model.py	Sat Oct 15 19:02:11 2005
@@ -102,6 +102,10 @@
         self.move_int_registers = None
 
 class ReturnLink(Link):
+    def __init__(self, return_val=0, exitcase=None):
+        Link.__init__(self, None, exitcase)
+        if return_val != 0:
+            self.move_int_registers = [return_val, 0]
     pass
 
 class StartLink(Link):

Modified: pypy/dist/pypy/rpython/l3interp/test/test_l3interp.py
==============================================================================
--- pypy/dist/pypy/rpython/l3interp/test/test_l3interp.py	(original)
+++ pypy/dist/pypy/rpython/l3interp/test/test_l3interp.py	Sat Oct 15 19:02:11 2005
@@ -14,8 +14,10 @@
 
 #----------------------------------------------------------------------
 def eval_seven():
+    #def f():
+    #    return 3 + 4
     op = model.Operation(l3interp.LLFrame.op_int_add, 0, [-1, -2])
-    returnlink = model.ReturnLink(None, [])
+    returnlink = model.ReturnLink()
     block = model.Block([], model.ONE_EXIT, [returnlink])
     block.operations.append(op)
     startlink = model.Link(block, [])
@@ -26,7 +28,6 @@
     interp = l3interp.LLInterpreter()
     return interp.eval_graph_int(graph, [])
       
-
 def test_very_simple():
     result = eval_seven()
     assert result == 7
@@ -37,9 +38,10 @@
 
 #----------------------------------------------------------------------
 def eval_eight(number):
+    #def f(x):
+    #    return x + 4
     op = model.Operation(l3interp.LLFrame.op_int_add, 1, [0, -1])
-    returnlink = model.ReturnLink(target=None)
-    returnlink.move_int_registers = [1, 0]
+    returnlink = model.ReturnLink(return_val=1)
     block = model.Block([], model.ONE_EXIT, [returnlink])
     block.operations.append(op)
     startlink = model.Link(target=block)
@@ -58,3 +60,34 @@
 def test_simple_translated():
     fn = translate(eval_eight, [int]) 
     assert fn(4) == 8 
+#----------------------------------------------------------------------
+
+def eval_branch(number):
+    #def f(x):
+    #    if x:
+    #        return 2
+    #    return 1
+    op = model.Operation(l3interp.LLFrame.op_int_is_true, 1, [0])
+    returnlink1 = model.ReturnLink(-1)
+    returnlink2 = model.ReturnLink(-2)
+    block = model.Block([], 1, [returnlink1, returnlink2])
+    block.operations.append(op)
+    startlink = model.Link(target=block)
+    startlink.move_int_registers = [0, 0]
+    graph = model.Graph("testgraph", startlink)
+    graph.set_constants_int([1, 2])
+    g = model.Globals()
+    g.graphs = [graph]
+    interp = l3interp.LLInterpreter()
+    return interp.eval_graph_int(graph, [number])
+
+def test_branch():
+    result = eval_branch(4)
+    assert result == 2
+    result = eval_branch(0)
+    assert result == 1
+
+def test_branch_translated():
+    fn = translate(eval_branch, [int]) 
+    assert fn(4) == 2 
+    assert fn(0) == 1



More information about the Pypy-commit mailing list