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/Spliterator/SpliteratorCharacteristics.java
38811 views
1
/*
2
* Copyright (c) 2013, 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 8020156 8020009 8022326 8012913 8024405 8024408
27
* @run testng SpliteratorCharacteristics
28
*/
29
30
import org.testng.annotations.Test;
31
32
import java.util.Arrays;
33
import java.util.Collection;
34
import java.util.Comparator;
35
import java.util.HashMap;
36
import java.util.HashSet;
37
import java.util.LinkedHashMap;
38
import java.util.LinkedHashSet;
39
import java.util.List;
40
import java.util.Map;
41
import java.util.PrimitiveIterator;
42
import java.util.Set;
43
import java.util.SortedMap;
44
import java.util.SortedSet;
45
import java.util.Spliterator;
46
import java.util.Spliterators;
47
import java.util.TreeMap;
48
import java.util.TreeSet;
49
import java.util.WeakHashMap;
50
import java.util.concurrent.ConcurrentSkipListMap;
51
import java.util.concurrent.ConcurrentSkipListSet;
52
import java.util.function.Supplier;
53
import java.util.stream.DoubleStream;
54
import java.util.stream.IntStream;
55
import java.util.stream.LongStream;
56
57
import static org.testng.Assert.*;
58
59
@Test
60
public class SpliteratorCharacteristics {
61
62
public void testSpliteratorFromCollection() {
63
List<Integer> l = Arrays.asList(1, 2, 3, 4);
64
65
{
66
Spliterator<?> s = Spliterators.spliterator(l, 0);
67
assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
68
assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
69
}
70
71
{
72
Spliterator<?> s = Spliterators.spliterator(l, Spliterator.CONCURRENT);
73
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
74
assertCharacteristics(s, Spliterator.CONCURRENT);
75
}
76
77
{
78
Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, 0);
79
assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
80
assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
81
}
82
83
{
84
Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, Spliterator.CONCURRENT);
85
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
86
assertCharacteristics(s, Spliterator.CONCURRENT);
87
}
88
89
{
90
Spliterator<?> s = Spliterators.spliteratorUnknownSize(l.iterator( ), 0);
91
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
92
}
93
94
{
95
Spliterator<?> s = Spliterators.spliteratorUnknownSize(
96
l.iterator(), Spliterator.SIZED | Spliterator.SUBSIZED);
97
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
98
}
99
}
100
101
public void testSpliteratorOfIntFromIterator() {
102
Supplier<PrimitiveIterator.OfInt> si = () -> IntStream.of(1, 2, 3, 4).iterator();
103
104
{
105
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
106
assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
107
assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
108
}
109
110
{
111
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
112
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
113
assertCharacteristics(s, Spliterator.CONCURRENT);
114
}
115
116
{
117
Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
118
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
119
}
120
121
{
122
Spliterator<?> s = Spliterators.spliteratorUnknownSize(
123
si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
124
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
125
}
126
}
127
128
public void testSpliteratorOfLongFromIterator() {
129
Supplier<PrimitiveIterator.OfLong> si = () -> LongStream.of(1, 2, 3, 4).iterator();
130
131
{
132
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
133
assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
134
assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
135
}
136
137
{
138
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
139
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
140
assertCharacteristics(s, Spliterator.CONCURRENT);
141
}
142
143
{
144
Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
145
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
146
}
147
148
{
149
Spliterator<?> s = Spliterators.spliteratorUnknownSize(
150
si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
151
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
152
}
153
}
154
155
public void testSpliteratorOfDoubleFromIterator() {
156
Supplier<PrimitiveIterator.OfDouble> si = () -> DoubleStream.of(1, 2, 3, 4).iterator();
157
158
{
159
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);
160
assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
161
assertHasNotCharacteristics(s, Spliterator.CONCURRENT);
162
}
163
164
{
165
Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);
166
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
167
assertCharacteristics(s, Spliterator.CONCURRENT);
168
}
169
170
{
171
Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);
172
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
173
}
174
175
{
176
Spliterator<?> s = Spliterators.spliteratorUnknownSize(
177
si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);
178
assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);
179
}
180
}
181
182
//
183
184
public void testHashMap() {
185
assertMapCharacteristics(new HashMap<>(),
186
Spliterator.SIZED | Spliterator.DISTINCT);
187
}
188
189
public void testWeakHashMap() {
190
assertMapCharacteristics(new WeakHashMap<>(),
191
Spliterator.DISTINCT);
192
}
193
194
public void testHashSet() {
195
assertSetCharacteristics(new HashSet<>(),
196
Spliterator.SIZED | Spliterator.DISTINCT);
197
}
198
199
public void testLinkedHashMap() {
200
assertMapCharacteristics(new LinkedHashMap<>(),
201
Spliterator.SIZED | Spliterator.DISTINCT |
202
Spliterator.ORDERED);
203
}
204
205
public void testLinkedHashSet() {
206
assertSetCharacteristics(new LinkedHashSet<>(),
207
Spliterator.SIZED | Spliterator.DISTINCT |
208
Spliterator.ORDERED);
209
}
210
211
public void testTreeMap() {
212
assertSortedMapCharacteristics(new TreeMap<>(),
213
Spliterator.SIZED | Spliterator.DISTINCT |
214
Spliterator.SORTED | Spliterator.ORDERED);
215
}
216
217
public void testTreeMapWithComparator() {
218
assertSortedMapCharacteristics(new TreeMap<>(Comparator.reverseOrder()),
219
Spliterator.SIZED | Spliterator.DISTINCT |
220
Spliterator.SORTED | Spliterator.ORDERED);
221
}
222
223
public void testTreeSet() {
224
assertSortedSetCharacteristics(new TreeSet<>(),
225
Spliterator.SIZED | Spliterator.DISTINCT |
226
Spliterator.SORTED | Spliterator.ORDERED);
227
}
228
229
public void testTreeSetWithComparator() {
230
assertSortedSetCharacteristics(new TreeSet<>(Comparator.reverseOrder()),
231
Spliterator.SIZED | Spliterator.DISTINCT |
232
Spliterator.SORTED | Spliterator.ORDERED);
233
}
234
235
public void testConcurrentSkipListMap() {
236
assertSortedMapCharacteristics(new ConcurrentSkipListMap<>(),
237
Spliterator.CONCURRENT | Spliterator.NONNULL |
238
Spliterator.DISTINCT | Spliterator.SORTED |
239
Spliterator.ORDERED);
240
}
241
242
public void testConcurrentSkipListMapWithComparator() {
243
assertSortedMapCharacteristics(new ConcurrentSkipListMap<>(Comparator.<Integer>reverseOrder()),
244
Spliterator.CONCURRENT | Spliterator.NONNULL |
245
Spliterator.DISTINCT | Spliterator.SORTED |
246
Spliterator.ORDERED);
247
}
248
249
public void testConcurrentSkipListSet() {
250
assertSortedSetCharacteristics(new ConcurrentSkipListSet<>(),
251
Spliterator.CONCURRENT | Spliterator.NONNULL |
252
Spliterator.DISTINCT | Spliterator.SORTED |
253
Spliterator.ORDERED);
254
}
255
256
public void testConcurrentSkipListSetWithComparator() {
257
assertSortedSetCharacteristics(new ConcurrentSkipListSet<>(Comparator.reverseOrder()),
258
Spliterator.CONCURRENT | Spliterator.NONNULL |
259
Spliterator.DISTINCT | Spliterator.SORTED |
260
Spliterator.ORDERED);
261
}
262
263
264
//
265
266
267
void assertMapCharacteristics(Map<Integer, String> m, int keyCharacteristics) {
268
assertMapCharacteristics(m, keyCharacteristics, 0);
269
}
270
271
void assertMapCharacteristics(Map<Integer, String> m, int keyCharacteristics, int notValueCharacteristics) {
272
initMap(m);
273
274
assertCharacteristics(m.keySet(), keyCharacteristics);
275
276
assertCharacteristics(m.values(),
277
keyCharacteristics & ~(Spliterator.DISTINCT | notValueCharacteristics));
278
279
assertCharacteristics(m.entrySet(), keyCharacteristics);
280
281
if ((keyCharacteristics & Spliterator.SORTED) == 0) {
282
assertISEComparator(m.keySet());
283
assertISEComparator(m.values());
284
assertISEComparator(m.entrySet());
285
}
286
}
287
288
void assertSetCharacteristics(Set<Integer> s, int keyCharacteristics) {
289
initSet(s);
290
291
assertCharacteristics(s, keyCharacteristics);
292
293
if ((keyCharacteristics & Spliterator.SORTED) == 0) {
294
assertISEComparator(s);
295
}
296
}
297
298
void assertSortedMapCharacteristics(SortedMap<Integer, String> m, int keyCharacteristics) {
299
assertMapCharacteristics(m, keyCharacteristics, Spliterator.SORTED);
300
301
Set<Integer> keys = m.keySet();
302
if (m.comparator() != null) {
303
assertNotNullComparator(keys);
304
}
305
else {
306
assertNullComparator(keys);
307
}
308
309
assertISEComparator(m.values());
310
311
assertNotNullComparator(m.entrySet());
312
}
313
314
void assertSortedSetCharacteristics(SortedSet<Integer> s, int keyCharacteristics) {
315
assertSetCharacteristics(s, keyCharacteristics);
316
317
if (s.comparator() != null) {
318
assertNotNullComparator(s);
319
}
320
else {
321
assertNullComparator(s);
322
}
323
}
324
325
void initMap(Map<Integer, String> m) {
326
m.put(1, "4");
327
m.put(2, "3");
328
m.put(3, "2");
329
m.put(4, "1");
330
}
331
332
void initSet(Set<Integer> s) {
333
s.addAll(Arrays.asList(1, 2, 3, 4));
334
}
335
336
void assertCharacteristics(Collection<?> c, int expectedCharacteristics) {
337
assertCharacteristics(c.spliterator(), expectedCharacteristics);
338
}
339
340
void assertCharacteristics(Spliterator<?> s, int expectedCharacteristics) {
341
assertTrue(s.hasCharacteristics(expectedCharacteristics),
342
"Spliterator characteristics");
343
}
344
345
void assertHasNotCharacteristics(Spliterator<?> s, int expectedCharacteristics) {
346
assertFalse(s.hasCharacteristics(expectedCharacteristics),
347
"Spliterator characteristics");
348
}
349
350
void assertNullComparator(Collection<?> c) {
351
assertNull(c.spliterator().getComparator(),
352
"Comparator of Spliterator of Collection");
353
}
354
355
void assertNotNullComparator(Collection<?> c) {
356
assertNotNull(c.spliterator().getComparator(),
357
"Comparator of Spliterator of Collection");
358
}
359
360
void assertISEComparator(Collection<?> c) {
361
assertISEComparator(c.spliterator());
362
}
363
364
void assertISEComparator(Spliterator<?> s) {
365
boolean caught = false;
366
try {
367
s.getComparator();
368
}
369
catch (IllegalStateException e) {
370
caught = true;
371
}
372
assertTrue(caught, "Throwing IllegalStateException");
373
}
374
}
375
376