hotspot/test/compiler/stable/TestStableObject.java
changeset 36616 5172e3dd60f2
parent 36508 5f9eee6b383b
parent 36604 e9c073b0c19e
child 38152 80e5da81fb2c
child 37773 e5b3e9732c3c
equal deleted inserted replaced
36615:c744e3b0f8c5 36616:5172e3dd60f2
    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();
   407 
   406 
   408             {
   407             {
   409                 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1();
   408                 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1();
   410                 c.v[0] = new Object[0]; Object[] val2 = get1();
   409                 c.v[0] = new Object[0]; Object[] val2 = get1();
   411 
   410 
   412                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   411                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   413             }
   412             }
   414 
   413 
   415             {
   414             {
   416                 c.v = new Object[0][0]; Object[] val1 = get2();
   415                 c.v = new Object[0][0]; Object[] val1 = get2();
   417                 c.v = new Object[0][0]; Object[] val2 = get2();
   416                 c.v = new Object[0][0]; Object[] val2 = get2();
   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         }