Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/gc/shenandoah/TestArrayCopyStress.java
40942 views
1
/*
2
* Copyright (c) 2018, Red Hat, Inc. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
import java.util.Random;
26
import jdk.test.lib.Utils;
27
28
/*
29
* @test TestArrayCopyStress
30
* @key randomness
31
* @requires vm.gc.Shenandoah
32
* @library /test/lib
33
*
34
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:TieredStopAtLevel=0 -Xmx16m TestArrayCopyStress
35
*/
36
public class TestArrayCopyStress {
37
38
private static final int ARRAY_SIZE = 1000;
39
private static final int ITERATIONS = 10000;
40
41
static class Foo {
42
int num;
43
44
Foo(int num) {
45
this.num = num;
46
}
47
}
48
49
static class Bar {}
50
51
public static void main(String[] args) throws Exception {
52
for (int i = 0; i < ITERATIONS; i++) {
53
testConjoint();
54
}
55
}
56
57
private static void testConjoint() {
58
Foo[] array = new Foo[ARRAY_SIZE];
59
for (int i = 0; i < ARRAY_SIZE; i++) {
60
array[i] = new Foo(i);
61
}
62
Random rng = Utils.getRandomInstance();
63
int src_idx = rng.nextInt(ARRAY_SIZE);
64
int dst_idx = rng.nextInt(ARRAY_SIZE);
65
int len = rng.nextInt(Math.min(ARRAY_SIZE - src_idx, ARRAY_SIZE - dst_idx));
66
System.arraycopy(array, src_idx, array, dst_idx, len);
67
68
for (int i = 0; i < ARRAY_SIZE; i++) {
69
if (i >= dst_idx && i < dst_idx + len) {
70
assertEquals(array[i].num, i - (dst_idx - src_idx));
71
} else {
72
assertEquals(array[i].num, i);
73
}
74
}
75
}
76
77
private static void assertEquals(int a, int b) {
78
if (a != b) throw new RuntimeException("assert failed");
79
}
80
81
}
82
83