Mercurial > hg > graal-compiler
comparison graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SpecializationGroupingTest.java @ 16756:5148aab962af
Truffle-DSL: updated tests for the new generation layout.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 11 Aug 2014 15:53:05 +0200 |
parents | 85dcc7f59c34 |
children | a665483c3881 |
comparison
equal
deleted
inserted
replaced
16755:bd28da642eea | 16756:5148aab962af |
---|---|
46 public void testGrouping() { | 46 public void testGrouping() { |
47 MockAssumption a1 = new MockAssumption(true); | 47 MockAssumption a1 = new MockAssumption(true); |
48 MockAssumption a2 = new MockAssumption(false); | 48 MockAssumption a2 = new MockAssumption(false); |
49 MockAssumption a3 = new MockAssumption(true); | 49 MockAssumption a3 = new MockAssumption(true); |
50 | 50 |
51 TestRootNode<TestGrouping> root = TestHelper.createGenericRoot(TestGroupingFactory.getInstance(), a1, a2, a3); | 51 TestRootNode<TestGrouping> root = TestHelper.createRoot(TestGroupingFactory.getInstance(), a1, a2, a3); |
52 | 52 |
53 SimpleTypes.intCast = 0; | 53 SimpleTypes.intCast = 0; |
54 SimpleTypes.intCheck = 0; | 54 SimpleTypes.intCheck = 0; |
55 TestGrouping.true1 = 0; | 55 TestGrouping.true1 = 0; |
56 TestGrouping.false1 = 0; | 56 TestGrouping.false1 = 0; |
57 TestGrouping.true2 = 0; | 57 TestGrouping.true2 = 0; |
58 TestGrouping.false2 = 0; | 58 TestGrouping.false2 = 0; |
59 TestGrouping.true3 = 0; | 59 TestGrouping.true3 = 0; |
60 | 60 |
61 Assert.assertEquals(42, TestHelper.executeWith(root, 21, 21)); | 61 Assert.assertEquals(42, TestHelper.executeWith(root, 21, 21)); |
62 Assert.assertEquals(1, TestGrouping.true1); | 62 Assert.assertEquals(4, TestGrouping.true1); |
63 Assert.assertEquals(1, TestGrouping.false1); | 63 Assert.assertEquals(0, TestGrouping.false1); |
64 Assert.assertEquals(1, TestGrouping.true2); | 64 Assert.assertEquals(4, TestGrouping.true2); |
65 Assert.assertEquals(1, TestGrouping.false2); | 65 Assert.assertEquals(5, TestGrouping.false2); |
66 Assert.assertEquals(1, TestGrouping.true3); | 66 Assert.assertEquals(5, TestGrouping.true3); |
67 Assert.assertEquals(2, SimpleTypes.intCheck); | 67 Assert.assertEquals(8, SimpleTypes.intCheck); |
68 Assert.assertEquals(2, SimpleTypes.intCast); | 68 Assert.assertEquals(8, SimpleTypes.intCast); |
69 Assert.assertEquals(1, a1.checked); | 69 Assert.assertEquals(4, a1.checked); |
70 Assert.assertEquals(1, a2.checked); | 70 Assert.assertEquals(0, a2.checked); |
71 Assert.assertEquals(1, a3.checked); | 71 Assert.assertEquals(4, a3.checked); |
72 | 72 |
73 Assert.assertEquals(42, TestHelper.executeWith(root, 21, 21)); | 73 Assert.assertEquals(42, TestHelper.executeWith(root, 21, 21)); |
74 Assert.assertEquals(2, TestGrouping.true1); | 74 Assert.assertEquals(5, TestGrouping.true1); |
75 Assert.assertEquals(2, TestGrouping.false1); | 75 Assert.assertEquals(0, TestGrouping.false1); |
76 Assert.assertEquals(2, TestGrouping.true2); | 76 Assert.assertEquals(5, TestGrouping.true2); |
77 Assert.assertEquals(2, TestGrouping.false2); | 77 Assert.assertEquals(6, TestGrouping.false2); |
78 Assert.assertEquals(2, TestGrouping.true3); | 78 Assert.assertEquals(6, TestGrouping.true3); |
79 | 79 |
80 Assert.assertEquals(2, a1.checked); | 80 Assert.assertEquals(5, a1.checked); |
81 Assert.assertEquals(2, a2.checked); | 81 Assert.assertEquals(0, a2.checked); |
82 Assert.assertEquals(2, a3.checked); | 82 Assert.assertEquals(5, a3.checked); |
83 Assert.assertEquals(4, SimpleTypes.intCheck); | 83 Assert.assertEquals(8, SimpleTypes.intCheck); |
84 Assert.assertEquals(4, SimpleTypes.intCast); | 84 Assert.assertEquals(8, SimpleTypes.intCast); |
85 | 85 |
86 } | 86 } |
87 | 87 |
88 @SuppressWarnings("unused") | 88 @SuppressWarnings("unused") |
89 @NodeChildren({@NodeChild, @NodeChild}) | 89 @NodeChildren({@NodeChild, @NodeChild}) |
119 protected boolean true3(int value) { | 119 protected boolean true3(int value) { |
120 true3++; | 120 true3++; |
121 return true; | 121 return true; |
122 } | 122 } |
123 | 123 |
124 @Specialization(order = 1) | 124 @Specialization |
125 public int fail(int value1, String value2) { | 125 public int fail(int value1, String value2) { |
126 throw new AssertionError(); | 126 throw new AssertionError(); |
127 } | 127 } |
128 | 128 |
129 @Specialization(order = 2, guards = {"true1", "false1"}) | 129 @Specialization(guards = {"true1", "true2", "!false2", "true3"}, assumptions = {"a1", "a3"}, rewriteOn = RuntimeException.class) |
130 public int fail1(int value1, int value2) { | |
131 throw new AssertionError(); | |
132 } | |
133 | |
134 @Specialization(order = 3, guards = {"true1", "true2"}, assumptions = {"a1", "a2"}) | |
135 public int fail2(int value1, int value2) { | |
136 throw new AssertionError(); | |
137 } | |
138 | |
139 @Specialization(order = 4, guards = {"true1", "true2"}, assumptions = {"a1", "a3"}, rewriteOn = RuntimeException.class) | |
140 public int throwRewrite(int value1, int value2) { | 130 public int throwRewrite(int value1, int value2) { |
141 throw new RuntimeException(); | 131 throw new RuntimeException(); |
142 } | 132 } |
143 | 133 |
144 @Specialization(order = 5, guards = {"true1", "true2", "false2"}, assumptions = {"a1", "a3"}) | 134 @Specialization(guards = {"true1", "true2", "!false2", "true3"}, contains = "throwRewrite", assumptions = {"a1", "a3"}) |
145 public int fail4(int value1, int value2) { | |
146 throw new AssertionError(); | |
147 } | |
148 | |
149 @Specialization(order = 6, guards = {"true1", "true2", "!false2", "!true3"}, assumptions = {"a1", "a3"}) | |
150 public int fail5(int value1, int value2) { | |
151 throw new AssertionError(); | |
152 } | |
153 | |
154 @Specialization(order = 7, guards = {"true1", "true2", "!false2", "true3"}, assumptions = {"a1", "a3"}) | |
155 public int success(int value1, int value2) { | 135 public int success(int value1, int value2) { |
156 return value1 + value2; | 136 return value1 + value2; |
137 } | |
138 | |
139 @Specialization(guards = {"true1", "true2", "!false2", "!true3"}, assumptions = {"a1", "a3"}) | |
140 public int fail5(int value1, int value2) { | |
141 throw new AssertionError(); | |
142 } | |
143 | |
144 @Specialization(guards = {"true1", "true2", "false2"}, assumptions = {"a1", "a3"}) | |
145 public int fail4(int value1, int value2) { | |
146 throw new AssertionError(); | |
147 } | |
148 | |
149 @Specialization(guards = {"true1", "true2"}, assumptions = {"a1", "a3"}) | |
150 public int fail2break(int value1, int value2) { | |
151 throw new AssertionError(); | |
152 } | |
153 | |
154 @Specialization(guards = {"true1", "false1"}) | |
155 public int fail1(int value1, int value2) { | |
156 throw new AssertionError(); | |
157 } | 157 } |
158 | 158 |
159 } | 159 } |
160 | 160 |
161 @Test | 161 @Test |
166 | 166 |
167 @SuppressWarnings("unused") | 167 @SuppressWarnings("unused") |
168 @NodeChild(value = "genericChild", type = GenericInt.class) | 168 @NodeChild(value = "genericChild", type = GenericInt.class) |
169 public abstract static class TestElseConnectionBug1 extends ValueNode { | 169 public abstract static class TestElseConnectionBug1 extends ValueNode { |
170 | 170 |
171 @Specialization(order = 1, rewriteOn = {SlowPathException.class}, guards = "isInitialized") | 171 @Specialization(rewriteOn = {SlowPathException.class}, guards = "isInitialized") |
172 public int doInteger(int value) throws SlowPathException { | 172 public int do1(int value) throws SlowPathException { |
173 throw new SlowPathException(); | 173 throw new SlowPathException(); |
174 } | 174 } |
175 | 175 |
176 @Specialization(order = 3, guards = "isInitialized") | 176 @Specialization(contains = "do1", guards = "isInitialized") |
177 public int doObject(int value) { | 177 public int do2(int value) { |
178 return value == 42 ? value : 0; | 178 return value == 42 ? value : 0; |
179 } | 179 } |
180 | 180 |
181 @Specialization(order = 4, guards = "!isInitialized") | 181 @Specialization(guards = "!isInitialized") |
182 public Object doUninitialized(int value) { | 182 public Object do3(int value) { |
183 throw new AssertionError(); | 183 throw new AssertionError(); |
184 } | 184 } |
185 | 185 |
186 boolean isInitialized(int value) { | 186 boolean isInitialized(int value) { |
187 return true; | 187 return true; |
202 | 202 |
203 } | 203 } |
204 | 204 |
205 @Test | 205 @Test |
206 public void testElseConnectionBug2() { | 206 public void testElseConnectionBug2() { |
207 TestHelper.assertRuns(TestElseConnectionBug2Factory.getInstance(), 42, 42); | 207 TestHelper.assertRuns(TestElseConnectionBug2Factory.getInstance(), new Object[]{42}, new Object[]{42}); |
208 } | 208 } |
209 | 209 |
210 @SuppressWarnings("unused") | 210 @SuppressWarnings("unused") |
211 @NodeChild | 211 @NodeChild |
212 public abstract static class TestElseConnectionBug2 extends ValueNode { | 212 public abstract static class TestElseConnectionBug2 extends ValueNode { |
213 | 213 |
214 @Specialization(order = 2, guards = "guard0") | 214 @Specialization(guards = "guard0") |
215 public int doGuard0(int value) { | 215 public int do1(int value) { |
216 throw new AssertionError(); | 216 throw new AssertionError(); |
217 } | 217 } |
218 | 218 |
219 @Specialization(order = 3, guards = "guard1") | 219 @Specialization(guards = "guard1") |
220 public int doGuard1(int value) { | 220 public int do2(int value) { |
221 throw new AssertionError(); | 221 throw new AssertionError(); |
222 } | 222 } |
223 | 223 |
224 @Specialization(order = 4, guards = "!guard0") | 224 @Specialization(guards = "!guard0") |
225 public int doUninitialized(int value) { | 225 public int do3(int value) { |
226 return value; | 226 return value; |
227 } | 227 } |
228 | 228 |
229 boolean guard0(int value) { | 229 boolean guard0(int value) { |
230 return false; | 230 return false; |