Mercurial > hg > truffle
comparison test/compiler/stable/TestStableObject.java @ 20199:5fbeae2a02d3
8043546: C1 optimizes @Stable instance fields with default values
Reviewed-by: kvn, jrose
author | vlivanov |
---|---|
date | Thu, 10 Jul 2014 12:04:43 -0700 |
parents | 248ff38d2950 |
children |
comparison
equal
deleted
inserted
replaced
20198:c49dcaf78a65 | 20199:5fbeae2a02d3 |
---|---|
24 */ | 24 */ |
25 | 25 |
26 /* | 26 /* |
27 * @test TestStableObject | 27 * @test TestStableObject |
28 * @summary tests on stable fields and arrays | 28 * @summary tests on stable fields and arrays |
29 * @library /testlibrary | 29 * @library /testlibrary /testlibrary/whitebox |
30 * @compile -XDignore.symbol.file TestStableObject.java | 30 * @build TestStableObject StableConfiguration sun.hotspot.WhiteBox |
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission | |
31 * @run main ClassFileInstaller | 32 * @run main ClassFileInstaller |
33 * java/lang/invoke/StableConfiguration | |
32 * java/lang/invoke/TestStableObject | 34 * java/lang/invoke/TestStableObject |
33 * java/lang/invoke/TestStableObject$ObjectStable | 35 * java/lang/invoke/TestStableObject$ObjectStable |
34 * java/lang/invoke/TestStableObject$StaticObjectStable | 36 * java/lang/invoke/TestStableObject$StaticObjectStable |
35 * java/lang/invoke/TestStableObject$VolatileObjectStable | 37 * java/lang/invoke/TestStableObject$VolatileObjectStable |
36 * java/lang/invoke/TestStableObject$ObjectArrayDim1 | 38 * java/lang/invoke/TestStableObject$ObjectArrayDim1 |
47 * java/lang/invoke/TestStableObject$NestedStableField2$A | 49 * java/lang/invoke/TestStableObject$NestedStableField2$A |
48 * java/lang/invoke/TestStableObject$NestedStableField3 | 50 * java/lang/invoke/TestStableObject$NestedStableField3 |
49 * java/lang/invoke/TestStableObject$NestedStableField3$A | 51 * java/lang/invoke/TestStableObject$NestedStableField3$A |
50 * java/lang/invoke/TestStableObject$Values | 52 * java/lang/invoke/TestStableObject$Values |
51 * java/lang/invoke/TestStableObject$DefaultValue | 53 * java/lang/invoke/TestStableObject$DefaultValue |
54 * java/lang/invoke/TestStableObject$DefaultStaticValue | |
52 * java/lang/invoke/TestStableObject$ObjectArrayLowerDim2 | 55 * java/lang/invoke/TestStableObject$ObjectArrayLowerDim2 |
53 * | 56 * |
54 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | 57 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
55 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop | 58 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
56 * -server -XX:-TieredCompilation -Xcomp | 59 * -server -XX:-TieredCompilation |
60 * -XX:+FoldStableValues | |
61 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | |
62 * java.lang.invoke.TestStableObject | |
63 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | |
64 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp | |
65 * -server -XX:-TieredCompilation | |
66 * -XX:-FoldStableValues | |
57 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | 67 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
58 * java.lang.invoke.TestStableObject | 68 * java.lang.invoke.TestStableObject |
59 * | 69 * |
60 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | 70 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
61 * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop | 71 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
62 * -server -XX:-TieredCompilation -Xcomp | 72 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 |
73 * -XX:+FoldStableValues | |
74 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | |
75 * java.lang.invoke.TestStableObject | |
76 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | |
77 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp | |
78 * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1 | |
79 * -XX:-FoldStableValues | |
63 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | 80 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
64 * java.lang.invoke.TestStableObject | 81 * java.lang.invoke.TestStableObject |
65 * | 82 * |
66 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | 83 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
67 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop | 84 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
68 * -server -XX:-TieredCompilation -Xcomp | 85 * -client -XX:-TieredCompilation |
86 * -XX:+FoldStableValues | |
69 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | 87 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
70 * java.lang.invoke.TestStableObject | 88 * java.lang.invoke.TestStableObject |
71 * | |
72 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions | 89 * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions |
73 * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop | 90 * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp |
74 * -server -XX:-TieredCompilation -Xcomp | 91 * -client -XX:-TieredCompilation |
92 * -XX:-FoldStableValues | |
75 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 | 93 * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4 |
76 * java.lang.invoke.TestStableObject | 94 * java.lang.invoke.TestStableObject |
77 */ | 95 */ |
78 package java.lang.invoke; | 96 package java.lang.invoke; |
79 | 97 |
80 import com.sun.management.HotSpotDiagnosticMXBean; | |
81 import com.sun.management.VMOption; | |
82 import sun.management.ManagementFactoryHelper; | |
83 import java.lang.reflect.InvocationTargetException; | 98 import java.lang.reflect.InvocationTargetException; |
84 | 99 |
85 public class TestStableObject { | 100 public class TestStableObject { |
101 static final boolean isStableEnabled = StableConfiguration.isStableEnabled; | |
102 static final boolean isServerWithStable = StableConfiguration.isServerWithStable; | |
103 | |
86 public static void main(String[] args) throws Exception { | 104 public static void main(String[] args) throws Exception { |
87 System.out.println("@Stable enabled: "+isStableEnabled); | |
88 System.out.println(); | |
89 | |
90 run(DefaultValue.class); | 105 run(DefaultValue.class); |
91 run(ObjectStable.class); | 106 run(ObjectStable.class); |
107 run(DefaultStaticValue.class); | |
92 run(StaticObjectStable.class); | 108 run(StaticObjectStable.class); |
93 run(VolatileObjectStable.class); | 109 run(VolatileObjectStable.class); |
94 | 110 |
95 // @Stable arrays: Dim 1-4 | 111 // @Stable arrays: Dim 1-4 |
96 run(ObjectArrayDim1.class); | 112 run(ObjectArrayDim1.class); |
146 } | 162 } |
147 } | 163 } |
148 | 164 |
149 /* ==================================================== */ | 165 /* ==================================================== */ |
150 | 166 |
167 static class DefaultStaticValue { | |
168 public static @Stable Object v; | |
169 | |
170 public static final DefaultStaticValue c = new DefaultStaticValue(); | |
171 public static Object get() { return c.v; } | |
172 public static void test() throws Exception { | |
173 Object val1 = get(); | |
174 c.v = Values.A; Object val2 = get(); | |
175 assertEquals(val1, null); | |
176 assertEquals(val2, Values.A); | |
177 } | |
178 } | |
179 | |
180 /* ==================================================== */ | |
181 | |
151 static class StaticObjectStable { | 182 static class StaticObjectStable { |
152 public static @Stable Values v; | 183 public static @Stable Values v; |
153 | 184 |
154 public static final ObjectStable c = new ObjectStable (); | 185 public static final ObjectStable c = new ObjectStable (); |
155 public static Values get() { return c.v; } | 186 public static Values get() { return c.v; } |
189 public static void test() throws Exception { | 220 public static void test() throws Exception { |
190 { | 221 { |
191 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); | 222 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); |
192 c.v[0] = Values.B; Object val2 = get(); | 223 c.v[0] = Values.B; Object val2 = get(); |
193 assertEquals(val1, Values.A); | 224 assertEquals(val1, Values.A); |
194 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); | 225 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
195 | 226 |
196 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); | 227 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); |
197 assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); | 228 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
229 : Values.C)); | |
198 } | 230 } |
199 | 231 |
200 { | 232 { |
201 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); | 233 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); |
202 c.v[10] = Values.B; Object val2 = get1(); | 234 c.v[10] = Values.B; Object val2 = get1(); |
203 assertEquals(val1, Values.A); | 235 assertEquals(val1, Values.A); |
204 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); | 236 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
205 | 237 |
206 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); | 238 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); |
207 assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); | 239 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
240 : Values.C)); | |
208 } | 241 } |
209 | 242 |
210 { | 243 { |
211 c.v = new Object[1]; Object[] val1 = get2(); | 244 c.v = new Object[1]; Object[] val1 = get2(); |
212 c.v = new Object[1]; Object[] val2 = get2(); | 245 c.v = new Object[1]; Object[] val2 = get2(); |
227 public static void test() throws Exception { | 260 public static void test() throws Exception { |
228 { | 261 { |
229 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); | 262 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); |
230 c.v[0][0] = Values.B; Object val2 = get(); | 263 c.v[0][0] = Values.B; Object val2 = get(); |
231 assertEquals(val1, Values.A); | 264 assertEquals(val1, Values.A); |
232 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); | 265 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
233 | 266 |
234 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); | 267 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); |
235 assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); | 268 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
269 : Values.C)); | |
236 | 270 |
237 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); | 271 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); |
238 assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); | 272 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
273 : Values.D)); | |
239 } | 274 } |
240 | 275 |
241 { | 276 { |
242 c.v = new Object[1][1]; Object[] val1 = get1(); | 277 c.v = new Object[1][1]; Object[] val1 = get1(); |
243 c.v[0] = new Object[1]; Object[] val2 = get1(); | 278 c.v[0] = new Object[1]; Object[] val2 = get1(); |
244 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 279 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
245 } | 280 } |
246 | 281 |
247 { | 282 { |
248 c.v = new Object[1][1]; Object[][] val1 = get2(); | 283 c.v = new Object[1][1]; Object[][] val1 = get2(); |
249 c.v = new Object[1][1]; Object[][] val2 = get2(); | 284 c.v = new Object[1][1]; Object[][] val2 = get2(); |
265 public static void test() throws Exception { | 300 public static void test() throws Exception { |
266 { | 301 { |
267 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); | 302 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); |
268 c.v[0][0][0] = Values.B; Object val2 = get(); | 303 c.v[0][0][0] = Values.B; Object val2 = get(); |
269 assertEquals(val1, Values.A); | 304 assertEquals(val1, Values.A); |
270 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); | 305 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
271 | 306 |
272 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); | 307 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); |
273 assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); | 308 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
309 : Values.C)); | |
274 | 310 |
275 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); | 311 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); |
276 assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); | 312 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
313 : Values.D)); | |
277 | 314 |
278 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); | 315 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); |
279 assertEquals(val5, (isStableEnabled ? Values.A : Values.E)); | 316 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
317 : Values.E)); | |
280 } | 318 } |
281 | 319 |
282 { | 320 { |
283 c.v = new Object[1][1][1]; Object[] val1 = get1(); | 321 c.v = new Object[1][1][1]; Object[] val1 = get1(); |
284 c.v[0][0] = new Object[1]; Object[] val2 = get1(); | 322 c.v[0][0] = new Object[1]; Object[] val2 = get1(); |
285 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 323 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
286 } | 324 } |
287 | 325 |
288 { | 326 { |
289 c.v = new Object[1][1][1]; Object[][] val1 = get2(); | 327 c.v = new Object[1][1][1]; Object[][] val1 = get2(); |
290 c.v[0] = new Object[1][1]; Object[][] val2 = get2(); | 328 c.v[0] = new Object[1][1]; Object[][] val2 = get2(); |
291 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 329 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
292 } | 330 } |
293 | 331 |
294 { | 332 { |
295 c.v = new Object[1][1][1]; Object[][][] val1 = get3(); | 333 c.v = new Object[1][1][1]; Object[][][] val1 = get3(); |
296 c.v = new Object[1][1][1]; Object[][][] val2 = get3(); | 334 c.v = new Object[1][1][1]; Object[][][] val2 = get3(); |
313 public static void test() throws Exception { | 351 public static void test() throws Exception { |
314 { | 352 { |
315 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get(); | 353 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get(); |
316 c.v[0][0][0][0] = Values.B; Object val2 = get(); | 354 c.v[0][0][0][0] = Values.B; Object val2 = get(); |
317 assertEquals(val1, Values.A); | 355 assertEquals(val1, Values.A); |
318 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); | 356 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
319 | 357 |
320 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); | 358 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); |
321 assertEquals(val3, (isStableEnabled ? Values.A : Values.C)); | 359 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
360 : Values.C)); | |
322 | 361 |
323 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); | 362 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); |
324 assertEquals(val4, (isStableEnabled ? Values.A : Values.D)); | 363 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
364 : Values.D)); | |
325 | 365 |
326 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); | 366 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); |
327 assertEquals(val5, (isStableEnabled ? Values.A : Values.E)); | 367 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
368 : Values.E)); | |
328 | 369 |
329 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); | 370 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); |
330 assertEquals(val6, (isStableEnabled ? Values.A : Values.F)); | 371 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
372 : Values.F)); | |
331 } | 373 } |
332 | 374 |
333 { | 375 { |
334 c.v = new Object[1][1][1][1]; Object[] val1 = get1(); | 376 c.v = new Object[1][1][1][1]; Object[] val1 = get1(); |
335 c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); | 377 c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); |
336 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 378 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
337 } | 379 } |
338 | 380 |
339 { | 381 { |
340 c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); | 382 c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); |
341 c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); | 383 c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); |
342 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 384 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
343 } | 385 } |
344 | 386 |
345 { | 387 { |
346 c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); | 388 c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); |
347 c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); | 389 c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); |
348 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 390 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
349 } | 391 } |
350 | 392 |
351 { | 393 { |
352 c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4(); | 394 c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4(); |
353 c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4(); | 395 c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4(); |
354 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 396 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
355 } | 397 } |
356 | |
357 } | 398 } |
358 } | 399 } |
359 | 400 |
360 /* ==================================================== */ | 401 /* ==================================================== */ |
361 // Dynamic Dim is higher than static | 402 // Dynamic Dim is higher than static |
362 | |
363 static class ObjectArrayLowerDim0 { | 403 static class ObjectArrayLowerDim0 { |
364 public @Stable Object v; | 404 public @Stable Object v; |
365 | 405 |
366 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); | 406 public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0(); |
367 public static Object get() { return ((Object[])c.v)[0]; } | 407 public static Object get() { return ((Object[])c.v)[0]; } |
405 | 445 |
406 { | 446 { |
407 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1(); | 447 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1(); |
408 c.v[0] = new Object[0]; Object[] val2 = get1(); | 448 c.v[0] = new Object[0]; Object[] val2 = get1(); |
409 | 449 |
410 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 450 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
411 } | 451 } |
412 | 452 |
413 { | 453 { |
414 c.v = new Object[0][0]; Object[] val1 = get2(); | 454 c.v = new Object[0][0]; Object[] val1 = get2(); |
415 c.v = new Object[0][0]; Object[] val2 = get2(); | 455 c.v = new Object[0][0]; Object[] val2 = get2(); |
441 | 481 |
442 { | 482 { |
443 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); | 483 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); |
444 c.v[0][0] = new Object[0]; Object[] val2 = get1(); | 484 c.v[0][0] = new Object[0]; Object[] val2 = get1(); |
445 | 485 |
446 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 486 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
447 } | 487 } |
448 | 488 |
449 { | 489 { |
450 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); | 490 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); |
451 c.v[0] = new Object[0][0]; Object[][] val2 = get2(); | 491 c.v[0] = new Object[0][0]; Object[][] val2 = get2(); |
452 | 492 |
453 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); | 493 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
454 } | 494 } |
455 | 495 |
456 { | 496 { |
457 c.v = new Object[0][0][0]; Object[][] val1 = get3(); | 497 c.v = new Object[0][0][0]; Object[][] val1 = get3(); |
458 c.v = new Object[0][0][0]; Object[][] val2 = get3(); | 498 c.v = new Object[0][0][0]; Object[][] val2 = get3(); |
583 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; | 623 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; |
584 elem.a = Values.A; Object val1 = get(); Object val2 = get1(); | 624 elem.a = Values.A; Object val1 = get(); Object val2 = get1(); |
585 elem.a = Values.B; Object val3 = get(); Object val4 = get1(); | 625 elem.a = Values.B; Object val3 = get(); Object val4 = get1(); |
586 | 626 |
587 assertEquals(val1, Values.A); | 627 assertEquals(val1, Values.A); |
588 assertEquals(val3, (isStableEnabled ? Values.A : Values.B)); | 628 assertEquals(val3, (isServerWithStable ? Values.A : Values.B)); |
589 | 629 |
590 assertEquals(val2, Values.A); | 630 assertEquals(val2, Values.A); |
591 assertEquals(val4, Values.B); | 631 assertEquals(val4, Values.B); |
592 } | 632 } |
593 } | 633 } |
617 System.out.println("FAILED"); | 657 System.out.println("FAILED"); |
618 ex.printStackTrace(System.out); | 658 ex.printStackTrace(System.out); |
619 } | 659 } |
620 } | 660 } |
621 } | 661 } |
622 | |
623 static final boolean isStableEnabled; | |
624 static { | |
625 HotSpotDiagnosticMXBean diagnostic | |
626 = ManagementFactoryHelper.getDiagnosticMXBean(); | |
627 VMOption tmp; | |
628 try { | |
629 tmp = diagnostic.getVMOption("FoldStableValues"); | |
630 } catch (IllegalArgumentException e) { | |
631 tmp = null; | |
632 } | |
633 isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue())); | |
634 } | |
635 } | 662 } |