Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/vm/share/RandomEx.java
41153 views
1
/*
2
* Copyright (c) 2013, 2020, Oracle and/or its affiliates. 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
package vm.share;
24
25
import java.util.HashMap;
26
import java.util.Map;
27
import java.util.Random;
28
import java.util.function.Predicate;
29
import java.util.function.Supplier;
30
31
import jdk.test.lib.Utils;
32
33
public class RandomEx extends Random {
34
private final Map<Class<?>, Supplier<?>> map = new HashMap<>();
35
36
{
37
map.put(Boolean.class, this::nextBoolean);
38
map.put(boolean.class, this::nextBoolean);
39
map.put(Byte.class, this::nextByte);
40
map.put(byte.class, this::nextByte);
41
map.put(Short.class, this::nextShort);
42
map.put(short.class, this::nextShort);
43
map.put(Character.class, this::nextChar);
44
map.put(char.class, this::nextChar);
45
map.put(Integer.class, this::nextInt);
46
map.put(int.class, this::nextInt);
47
map.put(Long.class, this::nextLong);
48
map.put(long.class, this::nextLong);
49
map.put(Float.class, this::nextFloat);
50
map.put(float.class, this::nextFloat);
51
map.put(Double.class, this::nextDouble);
52
map.put(double.class, this::nextDouble);
53
}
54
55
public RandomEx() {
56
super(Utils.getRandomInstance().nextLong());
57
}
58
59
public RandomEx(long seed) {
60
super(seed);
61
}
62
63
public byte nextByte() {
64
return (byte) next(Byte.SIZE);
65
}
66
67
public short nextShort() {
68
return (short) next(Short.SIZE);
69
}
70
71
public char nextChar() {
72
return (char) next(Character.SIZE);
73
}
74
75
public <T> T next(Predicate<T> p, T dummy) {
76
T result;
77
do {
78
result = next(dummy);
79
} while (!p.test(result));
80
return result;
81
}
82
83
@SuppressWarnings("unchecked")
84
public <T> T next(T dummy) {
85
Supplier<?> supplier = map.get(dummy.getClass());
86
if (supplier == null) {
87
throw new IllegalArgumentException("supplier for <" +
88
dummy.getClass() + ">is not found");
89
}
90
return (T) supplier.get();
91
}
92
}
93
94