[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