1+ /*
2+ * Copyright (c) 2025, 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+ * @run junit EnumSetSpliteratorTest
27+ * @bug 8179918
28+ * @summary EnumSet spliterator should report SORTED, ORDERED, NONNULL
29+ */
30+
31+ import java .util .EnumSet ;
32+ import java .util .List ;
33+ import java .util .Spliterator ;
34+
35+ import org .junit .jupiter .api .Test ;
36+
37+ import static org .junit .jupiter .api .Assertions .assertEquals ;
38+ import static org .junit .jupiter .api .Assertions .assertFalse ;
39+ import static org .junit .jupiter .api .Assertions .assertTrue ;
40+
41+ public class EnumSetSpliteratorTest {
42+
43+ private enum Empty {}
44+
45+ private enum Small {
46+ a , b , c , d
47+ }
48+
49+ private enum Large {
50+ e00 , e01 , e02 , e03 , e04 , e05 , e06 , e07 ,
51+ e08 , e09 , e0A , e0B , e0C , e0D , e0E , e0F ,
52+ e10 , e11 , e12 , e13 , e14 , e15 , e16 , e17 ,
53+ e18 , e19 , e1A , e1B , e1C , e1D , e1E , e1F ,
54+ e20 , e21 , e22 , e23 , e24 , e25 , e26 , e27 ,
55+ e28 , e29 , e2A , e2B , e2C , e2D , e2E , e2F ,
56+ e30 , e31 , e32 , e33 , e34 , e35 , e36 , e37 ,
57+ e38 , e39 , e3A , e3B , e3C , e3D , e3E , e3F ,
58+ e40 , e41 , e42 , e43 , e44 , e45 , e46 , e47 ,
59+ e48 , e49 , e4A , e4B , e4C , e4D , e4E , e4F
60+ }
61+
62+ @ Test
63+ public void testSpliteratorCharacteristics () {
64+ assertSpliteratorCharacteristics (EnumSet .allOf (Empty .class ));
65+ assertSpliteratorCharacteristics (EnumSet .allOf (Small .class ));
66+ assertSpliteratorCharacteristics (EnumSet .allOf (Large .class ));
67+ assertSpliteratorCharacteristics (EnumSet .noneOf (Empty .class ));
68+ assertSpliteratorCharacteristics (EnumSet .noneOf (Small .class ));
69+ assertSpliteratorCharacteristics (EnumSet .noneOf (Large .class ));
70+ assertSpliteratorCharacteristics (EnumSet .of (Small .a , Small .d ));
71+ assertSpliteratorCharacteristics (EnumSet .range (Small .a , Small .c ));
72+ assertSpliteratorCharacteristics (EnumSet .range (Large .e02 , Large .e4D ));
73+ assertSpliteratorCharacteristics (EnumSet .complementOf (EnumSet .of (Small .c )));
74+ assertSpliteratorCharacteristics (EnumSet .complementOf (EnumSet .of (Large .e00 , Large .e4F )));
75+ }
76+
77+ @ Test
78+ public void testEncounterOrder () {
79+ assertEquals (List .of (Small .values ()), EnumSet .allOf (Small .class ).stream ().toList ());
80+ assertEquals (List .of (Large .values ()), EnumSet .allOf (Large .class ).stream ().toList ());
81+ }
82+
83+ private static final int EXPECTED_CHARACTERISTICS = (
84+ Spliterator .DISTINCT | Spliterator .SORTED | Spliterator .ORDERED |
85+ Spliterator .NONNULL | Spliterator .SIZED | Spliterator .SUBSIZED );
86+
87+ private static void assertSpliteratorCharacteristics (EnumSet <?> enumSet ) {
88+ Spliterator <?> spliterator = enumSet .spliterator ();
89+ assertTrue (spliterator .hasCharacteristics (Spliterator .DISTINCT ), "Missing DISTINCT" );
90+ assertTrue (spliterator .hasCharacteristics (Spliterator .SORTED ), "Missing SORTED" );
91+ assertTrue (spliterator .hasCharacteristics (Spliterator .ORDERED ), "Missing ORDERED" );
92+ assertTrue (spliterator .hasCharacteristics (Spliterator .NONNULL ), "Missing NONNULL" );
93+ assertTrue (spliterator .hasCharacteristics (Spliterator .SIZED ), "Missing SIZED" );
94+ assertTrue (spliterator .hasCharacteristics (Spliterator .SUBSIZED ), "Missing SUBSIZED" );
95+ assertEquals (EXPECTED_CHARACTERISTICS , spliterator .characteristics (), "Unexpected characteristics" );
96+ }
97+ }
0 commit comments