Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/util/EnumMap/EnumMapBash.java
38821 views
1
/*
2
* Copyright (c) 2003, 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
24
/*
25
* @test
26
* @bug 4904140
27
* @summary Unit test for EnumMap
28
* @author Josh Bloch
29
* @author Yo Yo Ma
30
*/
31
32
import java.util.*;
33
import java.io.*;
34
35
public class EnumMapBash {
36
static Random rnd = new Random();
37
38
public static void main(String[] args) {
39
bash(Silly31.class);
40
bash(Silly32.class);
41
bash(Silly33.class);
42
bash(Silly63.class);
43
bash(Silly64.class);
44
bash(Silly65.class);
45
bash(Silly127.class);
46
bash(Silly128.class);
47
bash(Silly129.class);
48
bash(Silly500.class);
49
}
50
51
private static Enum[] ZERO_LENGTH_ENUM_ARRAY = new Enum[0];
52
53
static <T extends Enum<T>> void bash(Class<T> enumClass) {
54
Enum[] universe = enumClass.getEnumConstants();
55
56
int numItr = 100;
57
58
// Linked List test
59
for (int i=0; i<numItr; i++) {
60
int mapSize = universe.length * 7 / 8;
61
62
// Build the linked list
63
Map<T, T> m = new EnumMap<T, T>(enumClass);
64
if (!m.isEmpty())
65
fail("New instance non empty.");
66
Enum[] perm = (Enum[]) universe.clone();
67
Collections.shuffle(Arrays.asList(perm));
68
T head = (T) perm[0];
69
for (int j = 0; j < mapSize; j++)
70
m.put((T)perm[j], (T)perm[j + 1]);
71
T nil = (T)perm[mapSize];
72
73
if (m.size() != mapSize)
74
fail("Size not as expected.");
75
76
Map<T, T> tm = new TreeMap<T, T>(m);
77
78
if (m.hashCode() != tm.hashCode())
79
fail("Incorrect hashCode computation.");
80
if (!m.toString().equals(tm.toString()))
81
fail("Incorrect toString computation.");
82
if (!tm.equals(m))
83
fail("Incorrect equals (1).");
84
if (!m.equals(tm))
85
fail("Incorrect equals (2).");
86
87
Map<T, T> m2 = new EnumMap<T, T>(enumClass); m2.putAll(m);
88
m2.values().removeAll(m.keySet());
89
if (m2.size()!= 1 || !m2.containsValue(nil))
90
fail("Collection views test failed.");
91
92
int j=0;
93
while (head != nil) {
94
if (!m.containsKey(head))
95
fail("Linked list doesn't contain a link.");
96
T newHead = m.get(head);
97
if (newHead == null)
98
fail("Could not retrieve a link.");
99
m.remove(head);
100
head = newHead;
101
j++;
102
}
103
if (!m.isEmpty())
104
fail("Map nonempty after removing all links.");
105
if (j != mapSize)
106
fail("Linked list size not as expected.");
107
}
108
109
EnumMap<T, T> m = new EnumMap<T, T>(enumClass);
110
int mapSize = 0;
111
for (int i=0; i<universe.length; i += 2) {
112
if (m.put((T)universe[i], (T)universe[i]) != null)
113
fail("put returns a non-null value erroenously.");
114
mapSize++;
115
}
116
for (int i=0; i<universe.length; i++)
117
if (m.containsValue(universe[i]) != (i%2==0))
118
fail("contains value "+i);
119
if (m.put((T)universe[0], (T)universe[0]) == null)
120
fail("put returns a null value erroenously.");
121
122
Map<T, T> m2 = m.clone();
123
cloneTest(m, m2);
124
125
m2 = new EnumMap<T,T>(enumClass);
126
m2.putAll(m);
127
cloneTest(m, m2);
128
129
m2 = new EnumMap<T, T>(m);
130
cloneTest(m, m2);
131
132
m2 = new EnumMap<T, T>((Map<T, T>) m);
133
cloneTest(m, m2);
134
if (!m.isEmpty()) {
135
m2 = new EnumMap<T, T>(new HashMap<T, T>(m));
136
cloneTest(m, m2);
137
}
138
139
m2 = deepCopy(m);
140
cloneTest(m, m2);
141
142
if (!m.equals(m2))
143
fail("Clone not equal to original. (1)");
144
if (!m2.equals(m))
145
fail("Clone not equal to original. (2)");
146
147
Set<Map.Entry<T,T>> s = m.entrySet(), s2 = m2.entrySet();
148
149
if (!s.equals(s2))
150
fail("Clone not equal to original. (3)");
151
if (!s2.equals(s))
152
fail("Clone not equal to original. (4)");
153
if (!s.containsAll(s2))
154
fail("Original doesn't contain clone!");
155
if (!s2.containsAll(s))
156
fail("Clone doesn't contain original!");
157
158
s2.removeAll(s);
159
if (!m2.isEmpty()) {
160
System.out.println(m2.size());
161
System.out.println(m2);
162
fail("entrySet().removeAll failed.");
163
}
164
165
m2.putAll(m);
166
m2.clear();
167
if (!m2.isEmpty())
168
fail("clear failed.");
169
170
Iterator i = m.entrySet().iterator();
171
while(i.hasNext()) {
172
i.next();
173
i.remove();
174
}
175
if (!m.isEmpty())
176
fail("Iterator.remove() failed");
177
}
178
179
// Done inefficiently so as to exercise various functions
180
static <K, V> void cloneTest(Map<K, V> m, Map<K, V> clone) {
181
if (!m.equals(clone))
182
fail("Map not equal to copy.");
183
if (!clone.equals(m))
184
fail("Copy not equal to map.");
185
if (!m.entrySet().containsAll(clone.entrySet()))
186
fail("Set does not contain copy.");
187
if (!clone.entrySet().containsAll(m.entrySet()))
188
fail("Copy does not contain set.");
189
if (!m.entrySet().equals(clone.entrySet()))
190
fail("Set not equal clone set");
191
if (!clone.entrySet().equals(m.entrySet()))
192
fail("Clone set not equal set");
193
}
194
195
// Utility method to do a deep copy of an object *very slowly* using
196
// serialization/deserialization
197
static <T> T deepCopy(T oldObj) {
198
try {
199
ByteArrayOutputStream bos = new ByteArrayOutputStream();
200
ObjectOutputStream oos = new ObjectOutputStream(bos);
201
oos.writeObject(oldObj);
202
oos.flush();
203
ByteArrayInputStream bin = new ByteArrayInputStream(
204
bos.toByteArray());
205
ObjectInputStream ois = new ObjectInputStream(bin);
206
return (T) ois.readObject();
207
} catch(Exception e) {
208
throw new IllegalArgumentException(e.toString());
209
}
210
}
211
212
static void fail(String s) {
213
throw new RuntimeException(s);
214
}
215
216
public enum Silly31 {
217
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
218
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30
219
}
220
221
public enum Silly32 {
222
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
223
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31
224
}
225
226
public enum Silly33 {
227
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
228
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
229
e32
230
}
231
232
public enum Silly63 {
233
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
234
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
235
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
236
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
237
e62
238
}
239
240
public enum Silly64 {
241
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
242
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
243
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
244
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
245
e62, e63
246
}
247
248
public enum Silly65 {
249
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
250
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
251
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
252
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
253
e62, e63, e64
254
}
255
256
public enum Silly127 {
257
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
258
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
259
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
260
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
261
e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
262
e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
263
e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
264
e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
265
e118, e119, e120, e121, e122, e123, e124, e125, e126
266
}
267
268
public enum Silly128 {
269
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
270
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
271
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
272
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
273
e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
274
e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
275
e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
276
e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
277
e118, e119, e120, e121, e122, e123, e124, e125, e126, e127
278
}
279
280
public enum Silly129 {
281
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
282
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
283
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
284
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
285
e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
286
e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
287
e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
288
e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
289
e118, e119, e120, e121, e122, e123, e124, e125, e126, e127, e128
290
}
291
292
public enum Silly500 {
293
e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16,
294
e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31,
295
e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46,
296
e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61,
297
e62, e63, e64, e65, e66, e67, e68, e69, e70, e71, e72, e73, e74, e75, e76,
298
e77, e78, e79, e80, e81, e82, e83, e84, e85, e86, e87, e88, e89, e90, e91,
299
e92, e93, e94, e95, e96, e97, e98, e99, e100, e101, e102, e103, e104, e105,
300
e106, e107, e108, e109, e110, e111, e112, e113, e114, e115, e116, e117,
301
e118, e119, e120, e121, e122, e123, e124, e125, e126, e127, e128, e129,
302
e130, e131, e132, e133, e134, e135, e136, e137, e138, e139, e140, e141,
303
e142, e143, e144, e145, e146, e147, e148, e149, e150, e151, e152, e153,
304
e154, e155, e156, e157, e158, e159, e160, e161, e162, e163, e164, e165,
305
e166, e167, e168, e169, e170, e171, e172, e173, e174, e175, e176, e177,
306
e178, e179, e180, e181, e182, e183, e184, e185, e186, e187, e188, e189,
307
e190, e191, e192, e193, e194, e195, e196, e197, e198, e199, e200, e201,
308
e202, e203, e204, e205, e206, e207, e208, e209, e210, e211, e212, e213,
309
e214, e215, e216, e217, e218, e219, e220, e221, e222, e223, e224, e225,
310
e226, e227, e228, e229, e230, e231, e232, e233, e234, e235, e236, e237,
311
e238, e239, e240, e241, e242, e243, e244, e245, e246, e247, e248, e249,
312
e250, e251, e252, e253, e254, e255, e256, e257, e258, e259, e260, e261,
313
e262, e263, e264, e265, e266, e267, e268, e269, e270, e271, e272, e273,
314
e274, e275, e276, e277, e278, e279, e280, e281, e282, e283, e284, e285,
315
e286, e287, e288, e289, e290, e291, e292, e293, e294, e295, e296, e297,
316
e298, e299, e300, e301, e302, e303, e304, e305, e306, e307, e308, e309,
317
e310, e311, e312, e313, e314, e315, e316, e317, e318, e319, e320, e321,
318
e322, e323, e324, e325, e326, e327, e328, e329, e330, e331, e332, e333,
319
e334, e335, e336, e337, e338, e339, e340, e341, e342, e343, e344, e345,
320
e346, e347, e348, e349, e350, e351, e352, e353, e354, e355, e356, e357,
321
e358, e359, e360, e361, e362, e363, e364, e365, e366, e367, e368, e369,
322
e370, e371, e372, e373, e374, e375, e376, e377, e378, e379, e380, e381,
323
e382, e383, e384, e385, e386, e387, e388, e389, e390, e391, e392, e393,
324
e394, e395, e396, e397, e398, e399, e400, e401, e402, e403, e404, e405,
325
e406, e407, e408, e409, e410, e411, e412, e413, e414, e415, e416, e417,
326
e418, e419, e420, e421, e422, e423, e424, e425, e426, e427, e428, e429,
327
e430, e431, e432, e433, e434, e435, e436, e437, e438, e439, e440, e441,
328
e442, e443, e444, e445, e446, e447, e448, e449, e450, e451, e452, e453,
329
e454, e455, e456, e457, e458, e459, e460, e461, e462, e463, e464, e465,
330
e466, e467, e468, e469, e470, e471, e472, e473, e474, e475, e476, e477,
331
e478, e479, e480, e481, e482, e483, e484, e485, e486, e487, e488, e489,
332
e490, e491, e492, e493, e494, e495, e496, e497, e498, e499
333
}
334
335
}
336
337