comparison graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java @ 19292:906367e494ca

Truffle-DSL: fix invalid parameter order for executeWith with non-linear execution.
author Christian Humer <christian.humer@gmail.com>
date Wed, 11 Feb 2015 12:13:44 +0100
parents c0fb70634640
children 6361fa2e3321
comparison
equal deleted inserted replaced
19291:f4792a544170 19292:906367e494ca
33 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs1Factory; 33 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs1Factory;
34 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs2Factory; 34 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs2Factory;
35 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs3Factory; 35 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs3Factory;
36 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs4Factory; 36 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs4Factory;
37 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs5Factory; 37 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs5Factory;
38 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseDoubleEvaluatedNodeFactory; 38 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseDoubleEvaluated1NodeFactory;
39 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseDoubleEvaluated2NodeFactory;
39 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseEvaluatedNodeFactory; 40 import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseEvaluatedNodeFactory;
40 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode; 41 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode;
41 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode; 42 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ChildrenNode;
42 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; 43 import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode;
43 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; 44 import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode;
77 return exp1; 78 return exp1;
78 } 79 }
79 } 80 }
80 81
81 @Test 82 @Test
82 public void testDoubleEvaluated() { 83 public void testDoubleEvaluated1() {
83 ArgumentNode arg0 = new ArgumentNode(0); 84 ArgumentNode arg0 = new ArgumentNode(0);
84 ArgumentNode arg1 = new ArgumentNode(1); 85 ArgumentNode arg1 = new ArgumentNode(1);
85 CallTarget callTarget = TestHelper.createCallTarget(UseDoubleEvaluatedNodeFactory.create(arg0, arg1, DoubleEvaluatedNodeFactory.create(null, null))); 86 CallTarget callTarget = TestHelper.createCallTarget(UseDoubleEvaluated1NodeFactory.create(arg0, arg1, DoubleEvaluatedNodeFactory.create(null, null)));
86 87
87 Assert.assertEquals(85, callTarget.call(new Object[]{42, 43})); 88 Assert.assertEquals(42, callTarget.call(new Object[]{43, 1}));
88 Assert.assertEquals(1, arg0.getInvocationCount()); 89 Assert.assertEquals(1, arg0.getInvocationCount());
89 Assert.assertEquals(1, arg1.getInvocationCount()); 90 Assert.assertEquals(1, arg1.getInvocationCount());
90 } 91 }
91 92
92 @NodeChildren({@NodeChild("exp0"), @NodeChild("exp1")}) 93 @NodeChildren({@NodeChild("exp0"), @NodeChild("exp1")})
93 abstract static class DoubleEvaluatedNode extends ValueNode { 94 abstract static class DoubleEvaluatedNode extends ValueNode {
94 95
95 @Specialization 96 @Specialization
96 int doExecuteWith(int exp0, int exp1) { 97 int doExecuteWith(int exp0, int exp1) {
97 return exp0 + exp1; 98 return exp0 - exp1;
98 } 99 }
99 100
100 public abstract Object executeEvaluated(VirtualFrame frame, Object exp0, Object exp1); 101 public abstract Object executeEvaluated(VirtualFrame frame, Object exp0, Object exp1);
101 102
102 public abstract int executeIntEvaluated(VirtualFrame frame, Object exp0, Object exp1) throws UnexpectedResultException; 103 public abstract int executeIntEvaluated(VirtualFrame frame, Object exp0, Object exp1) throws UnexpectedResultException;
103 } 104 }
104 105
105 @NodeChildren({@NodeChild("exp0"), @NodeChild("exp1"), @NodeChild(value = "exp2", type = DoubleEvaluatedNode.class, executeWith = {"exp0", "exp1"})}) 106 @NodeChildren({@NodeChild("exp0"), @NodeChild("exp1"), @NodeChild(value = "exp2", type = DoubleEvaluatedNode.class, executeWith = {"exp0", "exp1"})})
106 abstract static class UseDoubleEvaluatedNode extends ValueNode { 107 abstract static class UseDoubleEvaluated1Node extends ValueNode {
107 108
108 @Specialization 109 @Specialization
109 int call(int exp0, int exp1, int exp2) { 110 int call(int exp0, int exp1, int exp2) {
110 Assert.assertEquals(exp0 + exp1, exp2); 111 Assert.assertEquals(exp0 - exp1, exp2);
112 return exp2;
113 }
114 }
115
116 @Test
117 public void testDoubleEvaluated2() {
118 ArgumentNode arg0 = new ArgumentNode(0);
119 ArgumentNode arg1 = new ArgumentNode(1);
120 CallTarget callTarget = TestHelper.createCallTarget(UseDoubleEvaluated2NodeFactory.create(arg0, arg1, DoubleEvaluatedNodeFactory.create(null, null)));
121
122 Assert.assertEquals(42, callTarget.call(new Object[]{1, 43}));
123 Assert.assertEquals(1, arg0.getInvocationCount());
124 Assert.assertEquals(1, arg1.getInvocationCount());
125 }
126
127 @NodeChildren({@NodeChild("exp0"), @NodeChild("exp1"), @NodeChild(value = "exp2", type = DoubleEvaluatedNode.class, executeWith = {"exp1", "exp0"})})
128 abstract static class UseDoubleEvaluated2Node extends ValueNode {
129
130 @Specialization
131 int call(int exp0, int exp1, int exp2) {
132 Assert.assertEquals(exp1 - exp0, exp2);
111 return exp2; 133 return exp2;
112 } 134 }
113 } 135 }
114 136
115 @Test 137 @Test