59 import jdk.internal.vm.annotation.Stable; |
59 import jdk.internal.vm.annotation.Stable; |
60 import java.lang.reflect.InvocationTargetException; |
60 import java.lang.reflect.InvocationTargetException; |
61 |
61 |
62 public class TestStableObject { |
62 public class TestStableObject { |
63 static final boolean isStableEnabled = StableConfiguration.isStableEnabled; |
63 static final boolean isStableEnabled = StableConfiguration.isStableEnabled; |
64 static final boolean isServerWithStable = StableConfiguration.isServerWithStable; |
|
65 |
64 |
66 public static void main(String[] args) throws Exception { |
65 public static void main(String[] args) throws Exception { |
67 run(DefaultValue.class); |
66 run(DefaultValue.class); |
68 run(ObjectStable.class); |
67 run(ObjectStable.class); |
69 run(DefaultStaticValue.class); |
68 run(DefaultStaticValue.class); |
182 public static void test() throws Exception { |
181 public static void test() throws Exception { |
183 { |
182 { |
184 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); |
183 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get(); |
185 c.v[0] = Values.B; Object val2 = get(); |
184 c.v[0] = Values.B; Object val2 = get(); |
186 assertEquals(val1, Values.A); |
185 assertEquals(val1, Values.A); |
187 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
186 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); |
188 |
187 |
189 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); |
188 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get(); |
190 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
189 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
191 : Values.C)); |
190 : Values.C)); |
192 } |
191 } |
193 |
192 |
194 { |
193 { |
195 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); |
194 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1(); |
196 c.v[10] = Values.B; Object val2 = get1(); |
195 c.v[10] = Values.B; Object val2 = get1(); |
197 assertEquals(val1, Values.A); |
196 assertEquals(val1, Values.A); |
198 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
197 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); |
199 |
198 |
200 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); |
199 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1(); |
201 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
200 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
202 : Values.C)); |
201 : Values.C)); |
203 } |
202 } |
204 |
203 |
205 { |
204 { |
206 c.v = new Object[1]; Object[] val1 = get2(); |
205 c.v = new Object[1]; Object[] val1 = get2(); |
222 public static void test() throws Exception { |
221 public static void test() throws Exception { |
223 { |
222 { |
224 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); |
223 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get(); |
225 c.v[0][0] = Values.B; Object val2 = get(); |
224 c.v[0][0] = Values.B; Object val2 = get(); |
226 assertEquals(val1, Values.A); |
225 assertEquals(val1, Values.A); |
227 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
226 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); |
228 |
227 |
229 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); |
228 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get(); |
230 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
229 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
231 : Values.C)); |
230 : Values.C)); |
232 |
231 |
233 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); |
232 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get(); |
234 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
233 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
235 : Values.D)); |
234 : Values.D)); |
236 } |
235 } |
237 |
236 |
238 { |
237 { |
239 c.v = new Object[1][1]; Object[] val1 = get1(); |
238 c.v = new Object[1][1]; Object[] val1 = get1(); |
240 c.v[0] = new Object[1]; Object[] val2 = get1(); |
239 c.v[0] = new Object[1]; Object[] val2 = get1(); |
241 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
240 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
242 } |
241 } |
243 |
242 |
244 { |
243 { |
245 c.v = new Object[1][1]; Object[][] val1 = get2(); |
244 c.v = new Object[1][1]; Object[][] val1 = get2(); |
246 c.v = new Object[1][1]; Object[][] val2 = get2(); |
245 c.v = new Object[1][1]; Object[][] val2 = get2(); |
262 public static void test() throws Exception { |
261 public static void test() throws Exception { |
263 { |
262 { |
264 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); |
263 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get(); |
265 c.v[0][0][0] = Values.B; Object val2 = get(); |
264 c.v[0][0][0] = Values.B; Object val2 = get(); |
266 assertEquals(val1, Values.A); |
265 assertEquals(val1, Values.A); |
267 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
266 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); |
268 |
267 |
269 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); |
268 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get(); |
270 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
269 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
271 : Values.C)); |
270 : Values.C)); |
272 |
271 |
273 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); |
272 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get(); |
274 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
273 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
275 : Values.D)); |
274 : Values.D)); |
276 |
275 |
277 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); |
276 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get(); |
278 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
277 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
279 : Values.E)); |
278 : Values.E)); |
280 } |
279 } |
281 |
280 |
282 { |
281 { |
283 c.v = new Object[1][1][1]; Object[] val1 = get1(); |
282 c.v = new Object[1][1][1]; Object[] val1 = get1(); |
284 c.v[0][0] = new Object[1]; Object[] val2 = get1(); |
283 c.v[0][0] = new Object[1]; Object[] val2 = get1(); |
285 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
284 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
286 } |
285 } |
287 |
286 |
288 { |
287 { |
289 c.v = new Object[1][1][1]; Object[][] val1 = get2(); |
288 c.v = new Object[1][1][1]; Object[][] val1 = get2(); |
290 c.v[0] = new Object[1][1]; Object[][] val2 = get2(); |
289 c.v[0] = new Object[1][1]; Object[][] val2 = get2(); |
291 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
290 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
292 } |
291 } |
293 |
292 |
294 { |
293 { |
295 c.v = new Object[1][1][1]; Object[][][] val1 = get3(); |
294 c.v = new Object[1][1][1]; Object[][][] val1 = get3(); |
296 c.v = new Object[1][1][1]; Object[][][] val2 = get3(); |
295 c.v = new Object[1][1][1]; Object[][][] val2 = get3(); |
313 public static void test() throws Exception { |
312 public static void test() throws Exception { |
314 { |
313 { |
315 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get(); |
314 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(); |
315 c.v[0][0][0][0] = Values.B; Object val2 = get(); |
317 assertEquals(val1, Values.A); |
316 assertEquals(val1, Values.A); |
318 assertEquals(val2, (isServerWithStable ? Values.A : Values.B)); |
317 assertEquals(val2, (isStableEnabled ? Values.A : Values.B)); |
319 |
318 |
320 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); |
319 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get(); |
321 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
320 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
322 : Values.C)); |
321 : Values.C)); |
323 |
322 |
324 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); |
323 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get(); |
325 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
324 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
326 : Values.D)); |
325 : Values.D)); |
327 |
326 |
328 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); |
327 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get(); |
329 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
328 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
330 : Values.E)); |
329 : Values.E)); |
331 |
330 |
332 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); |
331 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get(); |
333 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? Values.A : Values.B) |
332 assertEquals(val6, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B) |
334 : Values.F)); |
333 : Values.F)); |
335 } |
334 } |
336 |
335 |
337 { |
336 { |
338 c.v = new Object[1][1][1][1]; Object[] val1 = get1(); |
337 c.v = new Object[1][1][1][1]; Object[] val1 = get1(); |
339 c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); |
338 c.v[0][0][0] = new Object[1]; Object[] val2 = get1(); |
340 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
339 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
341 } |
340 } |
342 |
341 |
343 { |
342 { |
344 c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); |
343 c.v = new Object[1][1][1][1]; Object[][] val1 = get2(); |
345 c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); |
344 c.v[0][0] = new Object[1][1]; Object[][] val2 = get2(); |
346 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
345 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
347 } |
346 } |
348 |
347 |
349 { |
348 { |
350 c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); |
349 c.v = new Object[1][1][1][1]; Object[][][] val1 = get3(); |
351 c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); |
350 c.v[0] = new Object[1][1][1]; Object[][][] val2 = get3(); |
352 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
351 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
353 } |
352 } |
354 |
353 |
355 { |
354 { |
356 c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4(); |
355 c.v = new Object[1][1][1][1]; Object[][][][] val1 = get4(); |
357 c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4(); |
356 c.v = new Object[1][1][1][1]; Object[][][][] val2 = get4(); |
443 |
442 |
444 { |
443 { |
445 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); |
444 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1(); |
446 c.v[0][0] = new Object[0]; Object[] val2 = get1(); |
445 c.v[0][0] = new Object[0]; Object[] val2 = get1(); |
447 |
446 |
448 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
447 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
449 } |
448 } |
450 |
449 |
451 { |
450 { |
452 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); |
451 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2(); |
453 c.v[0] = new Object[0][0]; Object[][] val2 = get2(); |
452 c.v[0] = new Object[0][0]; Object[][] val2 = get2(); |
454 |
453 |
455 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2))); |
454 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2))); |
456 } |
455 } |
457 |
456 |
458 { |
457 { |
459 c.v = new Object[0][0][0]; Object[][] val1 = get3(); |
458 c.v = new Object[0][0][0]; Object[][] val1 = get3(); |
460 c.v = new Object[0][0][0]; Object[][] val2 = get3(); |
459 c.v = new Object[0][0][0]; Object[][] val2 = get3(); |
585 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; |
584 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v; |
586 elem.a = Values.A; Object val1 = get(); Object val2 = get1(); |
585 elem.a = Values.A; Object val1 = get(); Object val2 = get1(); |
587 elem.a = Values.B; Object val3 = get(); Object val4 = get1(); |
586 elem.a = Values.B; Object val3 = get(); Object val4 = get1(); |
588 |
587 |
589 assertEquals(val1, Values.A); |
588 assertEquals(val1, Values.A); |
590 assertEquals(val3, (isServerWithStable ? Values.A : Values.B)); |
589 assertEquals(val3, (isStableEnabled ? Values.A : Values.B)); |
591 |
590 |
592 assertEquals(val2, Values.A); |
591 assertEquals(val2, Values.A); |
593 assertEquals(val4, Values.B); |
592 assertEquals(val4, Values.B); |
594 } |
593 } |
595 } |
594 } |