1 /*
 2  * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved.
 3  * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
 4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 5  *
 6  * This code is free software; you can redistribute it and/or modify it
 7  * under the terms of the GNU General Public License version 2 only, as
 8  * published by the Free Software Foundation.
 9  *
10  * This code is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13  * version 2 for more details (a copy is included in the LICENSE file that
14  * accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License version
17  * 2 along with this work; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19  *
20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21  * or visit www.oracle.com if you need additional information or have any
22  * questions.
23  *
24  */
25 
26 /* @test id=default
27  * @summary test JNI critical arrays support in Shenandoah
28  * @key randomness
29  * @requires vm.gc.Shenandoah
30  * @library /test/lib
31  *
32  * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+ShenandoahVerify                 TestJNICritical
33  * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive TestJNICritical
34  */
35 
36  /* @test id=generational
37   * @summary test JNI critical arrays support in Shenandoah
38   * @key randomness
39   * @requires vm.gc.Shenandoah
40   * @library /test/lib
41   *
42   * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational -XX:+ShenandoahVerify TestJNICritical
43   * @run main/othervm/native -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational                       TestJNICritical
44   */
45 
46 import java.util.Arrays;
47 import java.util.Random;
48 import jdk.test.lib.Utils;
49 
50 public class TestJNICritical {
51     static {
52         System.loadLibrary("TestJNICritical");
53     }
54 
55     private static final int NUM_RUNS   = 10000;
56     private static final int ARRAY_SIZE = 10000;
57     private static int[] a;
58     private static int[] b;
59 
60     private static native void copyAtoB(int[] a, int[] b);
61 
62     public static void main(String[] args) {
63         a = new int[ARRAY_SIZE];
64         b = new int[ARRAY_SIZE];
65         for (int i = 0; i < NUM_RUNS; i++) {
66             test();
67         }
68     }
69 
70     private static void test() {
71         int[] a1 = new int[ARRAY_SIZE];
72         int[] b1 = new int[ARRAY_SIZE];
73         fillArray(a);
74         copyAtoB(a, b);
75         copyAtoB(a1, b1); // Don't optimize out garbage arrays.
76         if (!Arrays.equals(a, b)) {
77             throw new RuntimeException("arrays not equal");
78         }
79     }
80 
81     private static void fillArray(int[] array) {
82         Random r = Utils.getRandomInstance();
83         for (int i = 0; i < ARRAY_SIZE; i++) {
84             int val = (int) (r.nextDouble() * Integer.MAX_VALUE);
85             array[i] = val;
86         }
87     }
88 }