hotspot/test/compiler/stable/TestStableDouble.java
changeset 25641 d99065e4572b
parent 23192 f6a1c8866065
child 26916 8a1deee4f9b4
equal deleted inserted replaced
25640:eb0d8ef2f700 25641:d99065e4572b
    24  */
    24  */
    25 
    25 
    26 /*
    26 /*
    27  * @test TestStableDouble
    27  * @test TestStableDouble
    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 TestStableDouble.java
    30  * @build TestStableDouble 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/TestStableDouble
    34  *           java/lang/invoke/TestStableDouble
    33  *           java/lang/invoke/TestStableDouble$DoubleStable
    35  *           java/lang/invoke/TestStableDouble$DoubleStable
    34  *           java/lang/invoke/TestStableDouble$StaticDoubleStable
    36  *           java/lang/invoke/TestStableDouble$StaticDoubleStable
    35  *           java/lang/invoke/TestStableDouble$VolatileDoubleStable
    37  *           java/lang/invoke/TestStableDouble$VolatileDoubleStable
    36  *           java/lang/invoke/TestStableDouble$DoubleArrayDim1
    38  *           java/lang/invoke/TestStableDouble$DoubleArrayDim1
    46  *           java/lang/invoke/TestStableDouble$NestedStableField2
    48  *           java/lang/invoke/TestStableDouble$NestedStableField2
    47  *           java/lang/invoke/TestStableDouble$NestedStableField2$A
    49  *           java/lang/invoke/TestStableDouble$NestedStableField2$A
    48  *           java/lang/invoke/TestStableDouble$NestedStableField3
    50  *           java/lang/invoke/TestStableDouble$NestedStableField3
    49  *           java/lang/invoke/TestStableDouble$NestedStableField3$A
    51  *           java/lang/invoke/TestStableDouble$NestedStableField3$A
    50  *           java/lang/invoke/TestStableDouble$DefaultValue
    52  *           java/lang/invoke/TestStableDouble$DefaultValue
       
    53  *           java/lang/invoke/TestStableDouble$DefaultStaticValue
    51  *           java/lang/invoke/TestStableDouble$ObjectArrayLowerDim2
    54  *           java/lang/invoke/TestStableDouble$ObjectArrayLowerDim2
    52  *
    55  *
    53  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    56  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    54  *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop
    57  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    55  *                   -server -XX:-TieredCompilation -Xcomp
    58  *                   -server -XX:-TieredCompilation
       
    59  *                   -XX:+FoldStableValues
       
    60  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
       
    61  *                   java.lang.invoke.TestStableDouble
       
    62  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
       
    63  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
       
    64  *                   -server -XX:-TieredCompilation
       
    65  *                   -XX:-FoldStableValues
    56  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    66  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    57  *                   java.lang.invoke.TestStableDouble
    67  *                   java.lang.invoke.TestStableDouble
    58  *
    68  *
    59  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    69  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    60  *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop
    70  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    61  *                   -server -XX:-TieredCompilation -Xcomp
    71  *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
       
    72  *                   -XX:+FoldStableValues
       
    73  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
       
    74  *                   java.lang.invoke.TestStableDouble
       
    75  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
       
    76  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
       
    77  *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
       
    78  *                   -XX:-FoldStableValues
    62  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    79  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    63  *                   java.lang.invoke.TestStableDouble
    80  *                   java.lang.invoke.TestStableDouble
    64  *
    81  *
    65  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    82  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    66  *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop
    83  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    67  *                   -server -XX:-TieredCompilation -Xcomp
    84  *                   -client -XX:-TieredCompilation
       
    85  *                   -XX:+FoldStableValues
    68  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    86  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    69  *                   java.lang.invoke.TestStableDouble
    87  *                   java.lang.invoke.TestStableDouble
    70  *
       
    71  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    88  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    72  *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop
    89  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    73  *                   -server -XX:-TieredCompilation -Xcomp
    90  *                   -client -XX:-TieredCompilation
       
    91  *                   -XX:-FoldStableValues
    74  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    92  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    75  *                   java.lang.invoke.TestStableDouble
    93  *                   java.lang.invoke.TestStableDouble
    76  */
    94  */
    77 package java.lang.invoke;
    95 package java.lang.invoke;
    78 
    96 
    79 import com.sun.management.HotSpotDiagnosticMXBean;
       
    80 import com.sun.management.VMOption;
       
    81 import sun.management.ManagementFactoryHelper;
       
    82 import java.lang.reflect.InvocationTargetException;
    97 import java.lang.reflect.InvocationTargetException;
    83 
    98 
    84 public class TestStableDouble {
    99 public class TestStableDouble {
       
   100     static final boolean isStableEnabled    = StableConfiguration.isStableEnabled;
       
   101     static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
       
   102 
    85     public static void main(String[] args) throws Exception {
   103     public static void main(String[] args) throws Exception {
    86         System.out.println("@Stable enabled: "+isStableEnabled);
       
    87         System.out.println();
       
    88 
       
    89         run(DefaultValue.class);
   104         run(DefaultValue.class);
    90         run(DoubleStable.class);
   105         run(DoubleStable.class);
       
   106         run(DefaultStaticValue.class);
    91         run(StaticDoubleStable.class);
   107         run(StaticDoubleStable.class);
    92         run(VolatileDoubleStable.class);
   108         run(VolatileDoubleStable.class);
    93 
   109 
    94         // @Stable arrays: Dim 1-4
   110         // @Stable arrays: Dim 1-4
    95         run(DoubleArrayDim1.class);
   111         run(DoubleArrayDim1.class);
   143         }
   159         }
   144     }
   160     }
   145 
   161 
   146     /* ==================================================== */
   162     /* ==================================================== */
   147 
   163 
       
   164     static class DefaultStaticValue {
       
   165         public static @Stable double v;
       
   166 
       
   167         public static final DefaultStaticValue c = new DefaultStaticValue();
       
   168         public static double get() { return c.v; }
       
   169         public static void test() throws Exception {
       
   170                        double val1 = get();
       
   171             c.v = 1.0; double val2 = get();
       
   172             assertEquals(val1, 0);
       
   173             assertEquals(val2, 1.0);
       
   174         }
       
   175     }
       
   176 
       
   177     /* ==================================================== */
       
   178 
   148     static class StaticDoubleStable {
   179     static class StaticDoubleStable {
   149         public static @Stable double v;
   180         public static @Stable double v;
   150 
   181 
   151         public static final StaticDoubleStable c = new StaticDoubleStable();
   182         public static final StaticDoubleStable c = new StaticDoubleStable();
   152         public static double get() { return c.v; }
   183         public static double get() { return c.v; }
   186         public static void test() throws Exception {
   217         public static void test() throws Exception {
   187             {
   218             {
   188                 c.v = new double[1]; c.v[0] = 1.0; double val1 = get();
   219                 c.v = new double[1]; c.v[0] = 1.0; double val1 = get();
   189                                      c.v[0] = 2.0; double val2 = get();
   220                                      c.v[0] = 2.0; double val2 = get();
   190                 assertEquals(val1, 1.0);
   221                 assertEquals(val1, 1.0);
   191                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   222                 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0));
   192 
   223 
   193                 c.v = new double[1]; c.v[0] = 3.0; double val3 = get();
   224                 c.v = new double[1]; c.v[0] = 3.0; double val3 = get();
   194                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   225                 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   226                                                     : 3.0));
   195             }
   227             }
   196 
   228 
   197             {
   229             {
   198                 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1();
   230                 c.v = new double[20]; c.v[10] = 1.0; double val1 = get1();
   199                                       c.v[10] = 2.0; double val2 = get1();
   231                                       c.v[10] = 2.0; double val2 = get1();
   200                 assertEquals(val1, 1.0);
   232                 assertEquals(val1, 1.0);
   201                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   233                 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0));
   202 
   234 
   203                 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1();
   235                 c.v = new double[20]; c.v[10] = 3.0; double val3 = get1();
   204                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   236                 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   237                                                     : 3.0));
   205             }
   238             }
   206 
   239 
   207             {
   240             {
   208                 c.v = new double[1]; double[] val1 = get2();
   241                 c.v = new double[1]; double[] val1 = get2();
   209                 c.v = new double[1]; double[] val2 = get2();
   242                 c.v = new double[1]; double[] val2 = get2();
   224         public static void test() throws Exception {
   257         public static void test() throws Exception {
   225             {
   258             {
   226                 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get();
   259                 c.v = new double[1][1]; c.v[0][0] = 1.0; double val1 = get();
   227                                         c.v[0][0] = 2.0; double val2 = get();
   260                                         c.v[0][0] = 2.0; double val2 = get();
   228                 assertEquals(val1, 1.0);
   261                 assertEquals(val1, 1.0);
   229                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   262                 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0));
   230 
   263 
   231                 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get();
   264                 c.v = new double[1][1]; c.v[0][0] = 3.0; double val3 = get();
   232                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   265                 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   266                                                     : 3.0));
   233 
   267 
   234                 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get();
   268                 c.v[0] = new double[1]; c.v[0][0] = 4.0; double val4 = get();
   235                 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0));
   269                 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   270                                                     : 4.0));
   236             }
   271             }
   237 
   272 
   238             {
   273             {
   239                 c.v = new double[1][1]; double[] val1 = get1();
   274                 c.v = new double[1][1]; double[] val1 = get1();
   240                 c.v[0] = new double[1]; double[] val2 = get1();
   275                 c.v[0] = new double[1]; double[] val2 = get1();
   241                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   276                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   242             }
   277             }
   243 
   278 
   244             {
   279             {
   245                 c.v = new double[1][1]; double[][] val1 = get2();
   280                 c.v = new double[1][1]; double[][] val1 = get2();
   246                 c.v = new double[1][1]; double[][] val2 = get2();
   281                 c.v = new double[1][1]; double[][] val2 = get2();
   262         public static void test() throws Exception {
   297         public static void test() throws Exception {
   263             {
   298             {
   264                 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get();
   299                 c.v = new double[1][1][1]; c.v[0][0][0] = 1.0; double val1 = get();
   265                                            c.v[0][0][0] = 2.0; double val2 = get();
   300                                            c.v[0][0][0] = 2.0; double val2 = get();
   266                 assertEquals(val1, 1.0);
   301                 assertEquals(val1, 1.0);
   267                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   302                 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0));
   268 
   303 
   269                 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get();
   304                 c.v = new double[1][1][1]; c.v[0][0][0] = 3.0; double val3 = get();
   270                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   305                 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   306                                                     : 3.0));
   271 
   307 
   272                 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get();
   308                 c.v[0] = new double[1][1]; c.v[0][0][0] = 4.0; double val4 = get();
   273                 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0));
   309                 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   310                                                     : 4.0));
   274 
   311 
   275                 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get();
   312                 c.v[0][0] = new double[1]; c.v[0][0][0] = 5.0; double val5 = get();
   276                 assertEquals(val5, (isStableEnabled ? 1.0 : 5.0));
   313                 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   314                                                     : 5.0));
   277             }
   315             }
   278 
   316 
   279             {
   317             {
   280                 c.v = new double[1][1][1]; double[] val1 = get1();
   318                 c.v = new double[1][1][1]; double[] val1 = get1();
   281                 c.v[0][0] = new double[1]; double[] val2 = get1();
   319                 c.v[0][0] = new double[1]; double[] val2 = get1();
   282                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   320                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   283             }
   321             }
   284 
   322 
   285             {
   323             {
   286                 c.v = new double[1][1][1]; double[][] val1 = get2();
   324                 c.v = new double[1][1][1]; double[][] val1 = get2();
   287                 c.v[0] = new double[1][1]; double[][] val2 = get2();
   325                 c.v[0] = new double[1][1]; double[][] val2 = get2();
   288                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   326                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   289             }
   327             }
   290 
   328 
   291             {
   329             {
   292                 c.v = new double[1][1][1]; double[][][] val1 = get3();
   330                 c.v = new double[1][1][1]; double[][][] val1 = get3();
   293                 c.v = new double[1][1][1]; double[][][] val2 = get3();
   331                 c.v = new double[1][1][1]; double[][][] val2 = get3();
   310         public static void test() throws Exception {
   348         public static void test() throws Exception {
   311             {
   349             {
   312                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get();
   350                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 1.0; double val1 = get();
   313                                               c.v[0][0][0][0] = 2.0; double val2 = get();
   351                                               c.v[0][0][0][0] = 2.0; double val2 = get();
   314                 assertEquals(val1, 1.0);
   352                 assertEquals(val1, 1.0);
   315                 assertEquals(val2, (isStableEnabled ? 1.0 : 2.0));
   353                 assertEquals(val2, (isServerWithStable ? 1.0 : 2.0));
   316 
   354 
   317                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get();
   355                 c.v = new double[1][1][1][1]; c.v[0][0][0][0] = 3.0; double val3 = get();
   318                 assertEquals(val3, (isStableEnabled ? 1.0 : 3.0));
   356                 assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   357                                                     : 3.0));
   319 
   358 
   320                 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get();
   359                 c.v[0] = new double[1][1][1]; c.v[0][0][0][0] = 4.0; double val4 = get();
   321                 assertEquals(val4, (isStableEnabled ? 1.0 : 4.0));
   360                 assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   361                                                     : 4.0));
   322 
   362 
   323                 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get();
   363                 c.v[0][0] = new double[1][1]; c.v[0][0][0][0] = 5.0; double val5 = get();
   324                 assertEquals(val5, (isStableEnabled ? 1.0 : 5.0));
   364                 assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   365                                                     : 5.0));
   325 
   366 
   326                 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get();
   367                 c.v[0][0][0] = new double[1]; c.v[0][0][0][0] = 6.0; double val6 = get();
   327                 assertEquals(val6, (isStableEnabled ? 1.0 : 6.0));
   368                 assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1.0 : 2.0)
       
   369                                                     : 6.0));
   328             }
   370             }
   329 
   371 
   330             {
   372             {
   331                 c.v = new double[1][1][1][1]; double[] val1 = get1();
   373                 c.v = new double[1][1][1][1]; double[] val1 = get1();
   332                 c.v[0][0][0] = new double[1]; double[] val2 = get1();
   374                 c.v[0][0][0] = new double[1]; double[] val2 = get1();
   333                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   375                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   334             }
   376             }
   335 
   377 
   336             {
   378             {
   337                 c.v = new double[1][1][1][1]; double[][] val1 = get2();
   379                 c.v = new double[1][1][1][1]; double[][] val1 = get2();
   338                 c.v[0][0] = new double[1][1]; double[][] val2 = get2();
   380                 c.v[0][0] = new double[1][1]; double[][] val2 = get2();
   339                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   381                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   340             }
   382             }
   341 
   383 
   342             {
   384             {
   343                 c.v = new double[1][1][1][1]; double[][][] val1 = get3();
   385                 c.v = new double[1][1][1][1]; double[][][] val1 = get3();
   344                 c.v[0] = new double[1][1][1]; double[][][] val2 = get3();
   386                 c.v[0] = new double[1][1][1]; double[][][] val2 = get3();
   345                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   387                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   346             }
   388             }
   347 
   389 
   348             {
   390             {
   349                 c.v = new double[1][1][1][1]; double[][][][] val1 = get4();
   391                 c.v = new double[1][1][1][1]; double[][][][] val1 = get4();
   350                 c.v = new double[1][1][1][1]; double[][][][] val2 = get4();
   392                 c.v = new double[1][1][1][1]; double[][][][] val2 = get4();
   351                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   393                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   352             }
   394             }
   353 
       
   354         }
   395         }
   355     }
   396     }
   356 
   397 
   357     /* ==================================================== */
   398     /* ==================================================== */
   358     // Dynamic Dim is higher than static
   399     // Dynamic Dim is higher than static
   359 
       
   360     static class ObjectArrayLowerDim0 {
   400     static class ObjectArrayLowerDim0 {
   361         public @Stable Object v;
   401         public @Stable Object v;
   362 
   402 
   363         public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0();
   403         public static final ObjectArrayLowerDim0 c = new ObjectArrayLowerDim0();
   364         public static double get() { return ((double[])c.v)[0]; }
   404         public static double get() { return ((double[])c.v)[0]; }
   402 
   442 
   403             {
   443             {
   404                 c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1();
   444                 c.v = new double[1][1]; c.v[0] = new double[0]; double[] val1 = get1();
   405                                         c.v[0] = new double[0]; double[] val2 = get1();
   445                                         c.v[0] = new double[0]; double[] val2 = get1();
   406 
   446 
   407                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   447                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   408             }
   448             }
   409 
   449 
   410             {
   450             {
   411                 c.v = new double[0][0]; Object[] val1 = get2();
   451                 c.v = new double[0][0]; Object[] val1 = get2();
   412                 c.v = new double[0][0]; Object[] val2 = get2();
   452                 c.v = new double[0][0]; Object[] val2 = get2();
   438 
   478 
   439             {
   479             {
   440                 c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1();
   480                 c.v = new double[1][1][1]; c.v[0][0] = new double[0]; double[] val1 = get1();
   441                                            c.v[0][0] = new double[0]; double[] val2 = get1();
   481                                            c.v[0][0] = new double[0]; double[] val2 = get1();
   442 
   482 
   443                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   483                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   444             }
   484             }
   445 
   485 
   446             {
   486             {
   447                 c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2();
   487                 c.v = new double[1][1][1]; c.v[0] = new double[0][0]; double[][] val1 = get2();
   448                                            c.v[0] = new double[0][0]; double[][] val2 = get2();
   488                                            c.v[0] = new double[0][0]; double[][] val2 = get2();
   449 
   489 
   450                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   490                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   451             }
   491             }
   452 
   492 
   453             {
   493             {
   454                 c.v = new double[0][0][0]; Object[][] val1 = get3();
   494                 c.v = new double[0][0][0]; Object[][] val1 = get3();
   455                 c.v = new double[0][0][0]; Object[][] val2 = get3();
   495                 c.v = new double[0][0][0]; Object[][] val2 = get3();
   580                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   620                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   581                                elem.a = 1.0; double val1 = get(); double val2 = get1();
   621                                elem.a = 1.0; double val1 = get(); double val2 = get1();
   582                                elem.a = 2.0; double val3 = get(); double val4 = get1();
   622                                elem.a = 2.0; double val3 = get(); double val4 = get1();
   583 
   623 
   584                 assertEquals(val1, 1.0);
   624                 assertEquals(val1, 1.0);
   585                 assertEquals(val3, (isStableEnabled ? 1.0 : 2.0));
   625                 assertEquals(val3, (isServerWithStable ? 1.0 : 2.0));
   586 
   626 
   587                 assertEquals(val2, 1.0);
   627                 assertEquals(val2, 1.0);
   588                 assertEquals(val4, 2.0);
   628                 assertEquals(val4, 2.0);
   589             }
   629             }
   590         }
   630         }
   614                 System.out.println("FAILED");
   654                 System.out.println("FAILED");
   615                 ex.printStackTrace(System.out);
   655                 ex.printStackTrace(System.out);
   616             }
   656             }
   617         }
   657         }
   618     }
   658     }
   619 
       
   620     static final boolean isStableEnabled;
       
   621     static {
       
   622         HotSpotDiagnosticMXBean diagnostic
       
   623                 = ManagementFactoryHelper.getDiagnosticMXBean();
       
   624         VMOption tmp;
       
   625         try {
       
   626             tmp = diagnostic.getVMOption("FoldStableValues");
       
   627         } catch (IllegalArgumentException e) {
       
   628             tmp = null;
       
   629         }
       
   630         isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue()));
       
   631     }
       
   632 }
   659 }