Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/util/Spliterator/SpliteratorCharacteristics.java
38811 views
/*1* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/**24* @test25* @bug 8020156 8020009 8022326 8012913 8024405 802440826* @run testng SpliteratorCharacteristics27*/2829import org.testng.annotations.Test;3031import java.util.Arrays;32import java.util.Collection;33import java.util.Comparator;34import java.util.HashMap;35import java.util.HashSet;36import java.util.LinkedHashMap;37import java.util.LinkedHashSet;38import java.util.List;39import java.util.Map;40import java.util.PrimitiveIterator;41import java.util.Set;42import java.util.SortedMap;43import java.util.SortedSet;44import java.util.Spliterator;45import java.util.Spliterators;46import java.util.TreeMap;47import java.util.TreeSet;48import java.util.WeakHashMap;49import java.util.concurrent.ConcurrentSkipListMap;50import java.util.concurrent.ConcurrentSkipListSet;51import java.util.function.Supplier;52import java.util.stream.DoubleStream;53import java.util.stream.IntStream;54import java.util.stream.LongStream;5556import static org.testng.Assert.*;5758@Test59public class SpliteratorCharacteristics {6061public void testSpliteratorFromCollection() {62List<Integer> l = Arrays.asList(1, 2, 3, 4);6364{65Spliterator<?> s = Spliterators.spliterator(l, 0);66assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);67assertHasNotCharacteristics(s, Spliterator.CONCURRENT);68}6970{71Spliterator<?> s = Spliterators.spliterator(l, Spliterator.CONCURRENT);72assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);73assertCharacteristics(s, Spliterator.CONCURRENT);74}7576{77Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, 0);78assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);79assertHasNotCharacteristics(s, Spliterator.CONCURRENT);80}8182{83Spliterator<?> s = Spliterators.spliterator(l.iterator( ), 1, Spliterator.CONCURRENT);84assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);85assertCharacteristics(s, Spliterator.CONCURRENT);86}8788{89Spliterator<?> s = Spliterators.spliteratorUnknownSize(l.iterator( ), 0);90assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);91}9293{94Spliterator<?> s = Spliterators.spliteratorUnknownSize(95l.iterator(), Spliterator.SIZED | Spliterator.SUBSIZED);96assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);97}98}99100public void testSpliteratorOfIntFromIterator() {101Supplier<PrimitiveIterator.OfInt> si = () -> IntStream.of(1, 2, 3, 4).iterator();102103{104Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);105assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);106assertHasNotCharacteristics(s, Spliterator.CONCURRENT);107}108109{110Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);111assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);112assertCharacteristics(s, Spliterator.CONCURRENT);113}114115{116Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);117assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);118}119120{121Spliterator<?> s = Spliterators.spliteratorUnknownSize(122si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);123assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);124}125}126127public void testSpliteratorOfLongFromIterator() {128Supplier<PrimitiveIterator.OfLong> si = () -> LongStream.of(1, 2, 3, 4).iterator();129130{131Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);132assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);133assertHasNotCharacteristics(s, Spliterator.CONCURRENT);134}135136{137Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);138assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);139assertCharacteristics(s, Spliterator.CONCURRENT);140}141142{143Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);144assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);145}146147{148Spliterator<?> s = Spliterators.spliteratorUnknownSize(149si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);150assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);151}152}153154public void testSpliteratorOfDoubleFromIterator() {155Supplier<PrimitiveIterator.OfDouble> si = () -> DoubleStream.of(1, 2, 3, 4).iterator();156157{158Spliterator<?> s = Spliterators.spliterator(si.get(), 1, 0);159assertCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);160assertHasNotCharacteristics(s, Spliterator.CONCURRENT);161}162163{164Spliterator<?> s = Spliterators.spliterator(si.get(), 1, Spliterator.CONCURRENT);165assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);166assertCharacteristics(s, Spliterator.CONCURRENT);167}168169{170Spliterator<?> s = Spliterators.spliteratorUnknownSize(si.get(), 0);171assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);172}173174{175Spliterator<?> s = Spliterators.spliteratorUnknownSize(176si.get(), Spliterator.SIZED | Spliterator.SUBSIZED);177assertHasNotCharacteristics(s, Spliterator.SIZED | Spliterator.SUBSIZED);178}179}180181//182183public void testHashMap() {184assertMapCharacteristics(new HashMap<>(),185Spliterator.SIZED | Spliterator.DISTINCT);186}187188public void testWeakHashMap() {189assertMapCharacteristics(new WeakHashMap<>(),190Spliterator.DISTINCT);191}192193public void testHashSet() {194assertSetCharacteristics(new HashSet<>(),195Spliterator.SIZED | Spliterator.DISTINCT);196}197198public void testLinkedHashMap() {199assertMapCharacteristics(new LinkedHashMap<>(),200Spliterator.SIZED | Spliterator.DISTINCT |201Spliterator.ORDERED);202}203204public void testLinkedHashSet() {205assertSetCharacteristics(new LinkedHashSet<>(),206Spliterator.SIZED | Spliterator.DISTINCT |207Spliterator.ORDERED);208}209210public void testTreeMap() {211assertSortedMapCharacteristics(new TreeMap<>(),212Spliterator.SIZED | Spliterator.DISTINCT |213Spliterator.SORTED | Spliterator.ORDERED);214}215216public void testTreeMapWithComparator() {217assertSortedMapCharacteristics(new TreeMap<>(Comparator.reverseOrder()),218Spliterator.SIZED | Spliterator.DISTINCT |219Spliterator.SORTED | Spliterator.ORDERED);220}221222public void testTreeSet() {223assertSortedSetCharacteristics(new TreeSet<>(),224Spliterator.SIZED | Spliterator.DISTINCT |225Spliterator.SORTED | Spliterator.ORDERED);226}227228public void testTreeSetWithComparator() {229assertSortedSetCharacteristics(new TreeSet<>(Comparator.reverseOrder()),230Spliterator.SIZED | Spliterator.DISTINCT |231Spliterator.SORTED | Spliterator.ORDERED);232}233234public void testConcurrentSkipListMap() {235assertSortedMapCharacteristics(new ConcurrentSkipListMap<>(),236Spliterator.CONCURRENT | Spliterator.NONNULL |237Spliterator.DISTINCT | Spliterator.SORTED |238Spliterator.ORDERED);239}240241public void testConcurrentSkipListMapWithComparator() {242assertSortedMapCharacteristics(new ConcurrentSkipListMap<>(Comparator.<Integer>reverseOrder()),243Spliterator.CONCURRENT | Spliterator.NONNULL |244Spliterator.DISTINCT | Spliterator.SORTED |245Spliterator.ORDERED);246}247248public void testConcurrentSkipListSet() {249assertSortedSetCharacteristics(new ConcurrentSkipListSet<>(),250Spliterator.CONCURRENT | Spliterator.NONNULL |251Spliterator.DISTINCT | Spliterator.SORTED |252Spliterator.ORDERED);253}254255public void testConcurrentSkipListSetWithComparator() {256assertSortedSetCharacteristics(new ConcurrentSkipListSet<>(Comparator.reverseOrder()),257Spliterator.CONCURRENT | Spliterator.NONNULL |258Spliterator.DISTINCT | Spliterator.SORTED |259Spliterator.ORDERED);260}261262263//264265266void assertMapCharacteristics(Map<Integer, String> m, int keyCharacteristics) {267assertMapCharacteristics(m, keyCharacteristics, 0);268}269270void assertMapCharacteristics(Map<Integer, String> m, int keyCharacteristics, int notValueCharacteristics) {271initMap(m);272273assertCharacteristics(m.keySet(), keyCharacteristics);274275assertCharacteristics(m.values(),276keyCharacteristics & ~(Spliterator.DISTINCT | notValueCharacteristics));277278assertCharacteristics(m.entrySet(), keyCharacteristics);279280if ((keyCharacteristics & Spliterator.SORTED) == 0) {281assertISEComparator(m.keySet());282assertISEComparator(m.values());283assertISEComparator(m.entrySet());284}285}286287void assertSetCharacteristics(Set<Integer> s, int keyCharacteristics) {288initSet(s);289290assertCharacteristics(s, keyCharacteristics);291292if ((keyCharacteristics & Spliterator.SORTED) == 0) {293assertISEComparator(s);294}295}296297void assertSortedMapCharacteristics(SortedMap<Integer, String> m, int keyCharacteristics) {298assertMapCharacteristics(m, keyCharacteristics, Spliterator.SORTED);299300Set<Integer> keys = m.keySet();301if (m.comparator() != null) {302assertNotNullComparator(keys);303}304else {305assertNullComparator(keys);306}307308assertISEComparator(m.values());309310assertNotNullComparator(m.entrySet());311}312313void assertSortedSetCharacteristics(SortedSet<Integer> s, int keyCharacteristics) {314assertSetCharacteristics(s, keyCharacteristics);315316if (s.comparator() != null) {317assertNotNullComparator(s);318}319else {320assertNullComparator(s);321}322}323324void initMap(Map<Integer, String> m) {325m.put(1, "4");326m.put(2, "3");327m.put(3, "2");328m.put(4, "1");329}330331void initSet(Set<Integer> s) {332s.addAll(Arrays.asList(1, 2, 3, 4));333}334335void assertCharacteristics(Collection<?> c, int expectedCharacteristics) {336assertCharacteristics(c.spliterator(), expectedCharacteristics);337}338339void assertCharacteristics(Spliterator<?> s, int expectedCharacteristics) {340assertTrue(s.hasCharacteristics(expectedCharacteristics),341"Spliterator characteristics");342}343344void assertHasNotCharacteristics(Spliterator<?> s, int expectedCharacteristics) {345assertFalse(s.hasCharacteristics(expectedCharacteristics),346"Spliterator characteristics");347}348349void assertNullComparator(Collection<?> c) {350assertNull(c.spliterator().getComparator(),351"Comparator of Spliterator of Collection");352}353354void assertNotNullComparator(Collection<?> c) {355assertNotNull(c.spliterator().getComparator(),356"Comparator of Spliterator of Collection");357}358359void assertISEComparator(Collection<?> c) {360assertISEComparator(c.spliterator());361}362363void assertISEComparator(Spliterator<?> s) {364boolean caught = false;365try {366s.getComparator();367}368catch (IllegalStateException e) {369caught = true;370}371assertTrue(caught, "Throwing IllegalStateException");372}373}374375376