hotspot/test/compiler/stable/TestStableDouble.java
changeset 39422 52e7ddc77845
parent 38207 2ed792c9481d
child 40059 c2304140ed64
equal deleted inserted replaced
39421:a9652c919db8 39422:52e7ddc77845
    98         public @Stable double v;
    98         public @Stable double v;
    99 
    99 
   100         public static final DefaultValue c = new DefaultValue();
   100         public static final DefaultValue c = new DefaultValue();
   101         public static double get() { return c.v; }
   101         public static double get() { return c.v; }
   102         public static void test() throws Exception {
   102         public static void test() throws Exception {
   103             double val1 = get();
   103                        double val1 = get();
   104             c.v = 1.0; double val2 = get();
   104             c.v = 1.0; double val2 = get();
   105             assertEquals(val1, 0);
   105             assertEquals(val1, 0);
   106             assertEquals(val2, 1.0);
   106             assertEquals(val2, 1.0);
   107         }
   107         }
   108     }
   108     }
   128         public static @Stable double v;
   128         public static @Stable double v;
   129 
   129 
   130         public static final DefaultStaticValue c = new DefaultStaticValue();
   130         public static final DefaultStaticValue c = new DefaultStaticValue();
   131         public static double get() { return c.v; }
   131         public static double get() { return c.v; }
   132         public static void test() throws Exception {
   132         public static void test() throws Exception {
   133             double val1 = get();
   133                        double val1 = get();
   134             c.v = 1.0; double val2 = get();
   134             c.v = 1.0; double val2 = get();
   135             assertEquals(val1, 0);
   135             assertEquals(val1, 0);
   136             assertEquals(val2, 1.0);
   136             assertEquals(val2, 1.0);
   137         }
   137         }
   138     }
   138     }
   178         public static double get1() { return c.v[10]; }
   178         public static double get1() { return c.v[10]; }
   179         public static double[] get2() { return c.v; }
   179         public static double[] get2() { return c.v; }
   180         public static void test() throws Exception {
   180         public static void test() throws Exception {
   181             {
   181             {
   182                 c.v = new double[1]; c.v[0] = 1.0; double val1 = get();
   182                 c.v = new double[1]; c.v[0] = 1.0; double val1 = get();
   183                 c.v[0] = 2.0; double val2 = get();
   183                                      c.v[0] = 2.0; double val2 = get();
   184                 assertEquals(val1, 1.0);
   184                 assertEquals(val1, 1.0);
   185                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   185                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   186 
   186 
   187                 c.v = new double[1]; c.v[0] = 3.0; double val3 = get();
   187                 c.v = new double[1]; c.v[0] = 3.0; double val3 = get();
   188                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   188                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   189                         : 3.0));
   189                                                     : 3.0));
   190             }
   190             }
   191 
   191 
   192             {
   192             {
   193                 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1();
   193                 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1();
   194                 c.v[10] = 2.0; double val2 = get1();
   194                                       c.v[10] = 2.0; double val2 = get1();
   195                 assertEquals(val1, 1.0);
   195                 assertEquals(val1, 1.0);
   196                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   196                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   197 
   197 
   198                 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1();
   198                 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1();
   199                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   199                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   200                         : 3.0));
   200                                                     : 3.0));
   201             }
   201             }
   202 
   202 
   203             {
   203             {
   204                 c.v = new double[1]; double[] val1 = get2();
   204                 c.v = new double[1]; double[] val1 = get2();
   205                 c.v = new double[1]; double[] val2 = get2();
   205                 c.v = new double[1]; double[] val2 = get2();
   218         public static double[] get1() { return c.v[0]; }
   218         public static double[] get1() { return c.v[0]; }
   219         public static double[][] get2() { return c.v; }
   219         public static double[][] get2() { return c.v; }
   220         public static void test() throws Exception {
   220         public static void test() throws Exception {
   221             {
   221             {
   222                 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get();
   222                 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get();
   223                 c.v[0][0] = 2.0; double val2 = get();
   223                                         c.v[0][0] = 2.0; double val2 = get();
   224                 assertEquals(val1, 1.0);
   224                 assertEquals(val1, 1.0);
   225                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   225                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   226 
   226 
   227                 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get();
   227                 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get();
   228                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   228                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   229                         : 3.0));
   229                                                     : 3.0));
   230 
   230 
   231                 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get();
   231                 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get();
   232                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   232                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   233                         : 4.0));
   233                                                     : 4.0));
   234             }
   234             }
   235 
   235 
   236             {
   236             {
   237                 c.v = new double[1][1]; double[] val1 = get1();
   237                 c.v = new double[1][1]; double[] val1 = get1();
   238                 c.v[0] = new double[1]; double[] val2 = get1();
   238                 c.v[0] = new double[1]; double[] val2 = get1();
   258         public static double[][] get2() { return c.v[0]; }
   258         public static double[][] get2() { return c.v[0]; }
   259         public static double[][][] get3() { return c.v; }
   259         public static double[][][] get3() { return c.v; }
   260         public static void test() throws Exception {
   260         public static void test() throws Exception {
   261             {
   261             {
   262                 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get();
   262                 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get();
   263                 c.v[0][0][0] = 2.0; double val2 = get();
   263                                            c.v[0][0][0] = 2.0; double val2 = get();
   264                 assertEquals(val1, 1.0);
   264                 assertEquals(val1, 1.0);
   265                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   265                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   266 
   266 
   267                 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get();
   267                 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get();
   268                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   268                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   269                         : 3.0));
   269                                                     : 3.0));
   270 
   270 
   271                 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get();
   271                 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get();
   272                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   272                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   273                         : 4.0));
   273                                                     : 4.0));
   274 
   274 
   275                 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get();
   275                 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get();
   276                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   276                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   277                         : 5.0));
   277                                                     : 5.0));
   278             }
   278             }
   279 
   279 
   280             {
   280             {
   281                 c.v = new double[1][1][1]; double[] val1 = get1();
   281                 c.v = new double[1][1][1]; double[] val1 = get1();
   282                 c.v[0][0] = new double[1]; double[] val2 = get1();
   282                 c.v[0][0] = new double[1]; double[] val2 = get1();
   309         public static double[][][] get3() { return c.v[0]; }
   309         public static double[][][] get3() { return c.v[0]; }
   310         public static double[][][][] get4() { return c.v; }
   310         public static double[][][][] get4() { return c.v; }
   311         public static void test() throws Exception {
   311         public static void test() throws Exception {
   312             {
   312             {
   313                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get();
   313                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get();
   314                 c.v[0][0][0][0] = 2.0; double val2 = get();
   314                                               c.v[0][0][0][0] = 2.0; double val2 = get();
   315                 assertEquals(val1, 1.0);
   315                 assertEquals(val1, 1.0);
   316                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   316                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   317 
   317 
   318                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get();
   318                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get();
   319                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   319                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   320                         : 3.0));
   320                                                     : 3.0));
   321 
   321 
   322                 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get();
   322                 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get();
   323                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   323                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   324                         : 4.0));
   324                                                     : 4.0));
   325 
   325 
   326                 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get();
   326                 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get();
   327                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   327                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   328                         : 5.0));
   328                                                     : 5.0));
   329 
   329 
   330                 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get();
   330                 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get();
   331                 assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   331                 assertEquals(val6, (isStableEnabled ? (isStableEnabled ? 1.0 : 2.0)
   332                         : 6.0));
   332                                                     : 6.0));
   333             }
   333             }
   334 
   334 
   335             {
   335             {
   336                 c.v = new double[1][1][1][1]; double[] val1 = get1();
   336                 c.v = new double[1][1][1][1]; double[] val1 = get1();
   337                 c.v[0][0][0] = new double[1]; double[] val2 = get1();
   337                 c.v[0][0][0] = new double[1]; double[] val2 = get1();
   368         public static double[] get1() { return (double[])c.v; }
   368         public static double[] get1() { return (double[])c.v; }
   369 
   369 
   370         public static void test() throws Exception {
   370         public static void test() throws Exception {
   371             {
   371             {
   372                 c.v = new double[1]; ((double[])c.v)[0] = 1.0; double val1 = get();
   372                 c.v = new double[1]; ((double[])c.v)[0] = 1.0; double val1 = get();
   373                 ((double[])c.v)[0] = 2.0; double val2 = get();
   373                                      ((double[])c.v)[0] = 2.0; double val2 = get();
   374 
   374 
   375                 assertEquals(val1, 1.0);
   375                 assertEquals(val1, 1.0);
   376                 assertEquals(val2, 2.0);
   376                 assertEquals(val2, 2.0);
   377             }
   377             }
   378 
   378 
   395         public static Object[] get2() { return c.v; }
   395         public static Object[] get2() { return c.v; }
   396 
   396 
   397         public static void test() throws Exception {
   397         public static void test() throws Exception {
   398             {
   398             {
   399                 c.v = new double[1][1]; ((double[][])c.v)[0][0] = 1.0; double val1 = get();
   399                 c.v = new double[1][1]; ((double[][])c.v)[0][0] = 1.0; double val1 = get();
   400                 ((double[][])c.v)[0][0] = 2.0; double val2 = get();
   400                                         ((double[][])c.v)[0][0] = 2.0; double val2 = get();
   401 
   401 
   402                 assertEquals(val1, 1.0);
   402                 assertEquals(val1, 1.0);
   403                 assertEquals(val2, 2.0);
   403                 assertEquals(val2, 2.0);
   404             }
   404             }
   405 
   405 
   406             {
   406             {
   407                 c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1();
   407                 c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1();
   408                 c.v[0] = new double[0]; double[] val2 = get1();
   408                                         c.v[0] = new double[0]; double[] val2 = get1();
   409 
   409 
   410                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   410                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   411             }
   411             }
   412 
   412 
   413             {
   413             {
   431         public static Object[][] get3() { return c.v; }
   431         public static Object[][] get3() { return c.v; }
   432 
   432 
   433         public static void test() throws Exception {
   433         public static void test() throws Exception {
   434             {
   434             {
   435                 c.v = new double[1][1][1]; ((double[][][])c.v)[0][0][0] = 1.0; double val1 = get();
   435                 c.v = new double[1][1][1]; ((double[][][])c.v)[0][0][0] = 1.0; double val1 = get();
   436                 ((double[][][])c.v)[0][0][0] = 2.0; double val2 = get();
   436                                            ((double[][][])c.v)[0][0][0] = 2.0; double val2 = get();
   437 
   437 
   438                 assertEquals(val1, 1.0);
   438                 assertEquals(val1, 1.0);
   439                 assertEquals(val2, 2.0);
   439                 assertEquals(val2, 2.0);
   440             }
   440             }
   441 
   441 
   442             {
   442             {
   443                 c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1();
   443                 c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1();
   444                 c.v[0][0] = new double[0]; double[] val2 = get1();
   444                                            c.v[0][0] = new double[0]; double[] val2 = get1();
   445 
   445 
   446                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   446                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   447             }
   447             }
   448 
   448 
   449             {
   449             {
   450                 c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2();
   450                 c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2();
   451                 c.v[0] = new double[0][0]; double[][] val2 = get2();
   451                                            c.v[0] = new double[0][0]; double[][] val2 = get2();
   452 
   452 
   453                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   453                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   454             }
   454             }
   455 
   455 
   456             {
   456             {
   476         public static double get1() { return get().a; }
   476         public static double get1() { return get().a; }
   477 
   477 
   478         public static void test() throws Exception {
   478         public static void test() throws Exception {
   479             {
   479             {
   480                 c.v = new A(); c.v.a = 1.0; A val1 = get();
   480                 c.v = new A(); c.v.a = 1.0; A val1 = get();
   481                 c.v.a = 2.0; A val2 = get();
   481                                c.v.a = 2.0; A val2 = get();
   482 
   482 
   483                 assertEquals(val1.a, 2.0);
   483                 assertEquals(val1.a, 2.0);
   484                 assertEquals(val2.a, 2.0);
   484                 assertEquals(val2.a, 2.0);
   485             }
   485             }
   486 
   486 
   487             {
   487             {
   488                 c.v = new A(); c.v.a = 1.0; double val1 = get1();
   488                 c.v = new A(); c.v.a = 1.0; double val1 = get1();
   489                 c.v.a = 2.0; double val2 = get1();
   489                                c.v.a = 2.0; double val2 = get1();
   490                 c.v = new A(); c.v.a = 3.0; double val3 = get1();
   490                 c.v = new A(); c.v.a = 3.0; double val3 = get1();
   491 
   491 
   492                 assertEquals(val1, 1.0);
   492                 assertEquals(val1, 1.0);
   493                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   493                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   494                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   494                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   510         public static double get1() { return get().a; }
   510         public static double get1() { return get().a; }
   511 
   511 
   512         public static void test() throws Exception {
   512         public static void test() throws Exception {
   513             {
   513             {
   514                 c.v = new A(); c.v.next = new A();   c.v.next.next  = c.v;
   514                 c.v = new A(); c.v.next = new A();   c.v.next.next  = c.v;
   515                 c.v.a = 1.0; c.v.next.a = 1.0; A val1 = get();
   515                                c.v.a = 1.0; c.v.next.a = 1.0; A val1 = get();
   516                 c.v.a = 2.0; c.v.next.a = 2.0; A val2 = get();
   516                                c.v.a = 2.0; c.v.next.a = 2.0; A val2 = get();
   517 
   517 
   518                 assertEquals(val1.a, 2.0);
   518                 assertEquals(val1.a, 2.0);
   519                 assertEquals(val2.a, 2.0);
   519                 assertEquals(val2.a, 2.0);
   520             }
   520             }
   521 
   521 
   522             {
   522             {
   523                 c.v = new A(); c.v.next = c.v;
   523                 c.v = new A(); c.v.next = c.v;
   524                 c.v.a = 1.0; double val1 = get1();
   524                                c.v.a = 1.0; double val1 = get1();
   525                 c.v.a = 2.0; double val2 = get1();
   525                                c.v.a = 2.0; double val2 = get1();
   526                 c.v = new A(); c.v.next = c.v;
   526                 c.v = new A(); c.v.next = c.v;
   527                 c.v.a = 3.0; double val3 = get1();
   527                                c.v.a = 3.0; double val3 = get1();
   528 
   528 
   529                 assertEquals(val1, 1.0);
   529                 assertEquals(val1, 1.0);
   530                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   530                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   531                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   531                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   532             }
   532             }
   548         public static double get1() { return c.v.left.left.right.left.a; }
   548         public static double get1() { return c.v.left.left.right.left.a; }
   549 
   549 
   550         public static void test() throws Exception {
   550         public static void test() throws Exception {
   551             {
   551             {
   552                 c.v = new A(); c.v.left = c.v.right = c.v;
   552                 c.v = new A(); c.v.left = c.v.right = c.v;
   553                 c.v.a = 1.0; double val1 = get(); double val2 = get1();
   553                                c.v.a = 1.0; double val1 = get(); double val2 = get1();
   554                 c.v.a = 2.0; double val3 = get(); double val4 = get1();
   554                                c.v.a = 2.0; double val3 = get(); double val4 = get1();
   555 
   555 
   556                 assertEquals(val1, 1.0);
   556                 assertEquals(val1, 1.0);
   557                 assertEquals(val3, (isStableEnabled ? 1.0 : 2.0));
   557                 assertEquals(val3, (isStableEnabled ? 1.0 : 2.0));
   558 
   558 
   559                 assertEquals(val2, 1.0);
   559                 assertEquals(val2, 1.0);
   579 
   579 
   580         public static void test() throws Exception {
   580         public static void test() throws Exception {
   581             {
   581             {
   582                 A elem = new A();
   582                 A elem = new A();
   583                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   583                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   584                 elem.a = 1.0; double val1 = get(); double val2 = get1();
   584                                elem.a = 1.0; double val1 = get(); double val2 = get1();
   585                 elem.a = 2.0; double val3 = get(); double val4 = get1();
   585                                elem.a = 2.0; double val3 = get(); double val4 = get1();
   586 
   586 
   587                 assertEquals(val1, 1.0);
   587                 assertEquals(val1, 1.0);
   588                 assertEquals(val3, (isStableEnabled ? 1.0 : 2.0));
   588                 assertEquals(val3, (isStableEnabled ? 1.0 : 2.0));
   589 
   589 
   590                 assertEquals(val2, 1.0);
   590                 assertEquals(val2, 1.0);