Mercurial > hg > graal-compiler
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 |