/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package libcore.java.util; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.PrimitiveIterator; import java.util.Spliterator; import java.util.Spliterators; import java.util.function.Consumer; import java.util.function.DoubleConsumer; import java.util.function.IntConsumer; import java.util.function.LongConsumer; public class SpliteratorsTest extends TestCase { public void testEmptyIntSpliterator() { Spliterator.OfInt empty = Spliterators.emptyIntSpliterator(); assertNull(empty.trySplit()); assertEquals(0, empty.estimateSize()); assertEquals(0, empty.getExactSizeIfKnown()); IntConsumer alwaysFails = (int value) -> fail(); Consumer alwaysFailsBoxed = (Integer value) -> fail(); empty.tryAdvance(alwaysFails); empty.tryAdvance(alwaysFailsBoxed); empty.forEachRemaining(alwaysFails); empty.forEachRemaining(alwaysFailsBoxed); assertEquals(Spliterator.SIZED | Spliterator.SUBSIZED, empty.characteristics()); } public void testEmptyRefSpliterator() { Spliterator empty = Spliterators.emptySpliterator(); assertNull(empty.trySplit()); assertEquals(0, empty.estimateSize()); assertEquals(0, empty.getExactSizeIfKnown()); Consumer alwaysFails = (Object value) -> fail(); empty.tryAdvance(alwaysFails); empty.forEachRemaining(alwaysFails); assertEquals(Spliterator.SIZED | Spliterator.SUBSIZED, empty.characteristics()); } public void testEmptyLongSpliterator() { Spliterator.OfLong empty = Spliterators.emptyLongSpliterator(); assertNull(empty.trySplit()); assertEquals(0, empty.estimateSize()); assertEquals(0, empty.getExactSizeIfKnown()); LongConsumer alwaysFails = (long value) -> fail(); Consumer alwaysFailsBoxed = (Long value) -> fail(); empty.tryAdvance(alwaysFails); empty.tryAdvance(alwaysFailsBoxed); empty.forEachRemaining(alwaysFails); empty.forEachRemaining(alwaysFailsBoxed); assertEquals(Spliterator.SIZED | Spliterator.SUBSIZED, empty.characteristics()); } public void testEmptyDoubleSpliterator() { Spliterator.OfDouble empty = Spliterators.emptyDoubleSpliterator(); assertNull(empty.trySplit()); assertEquals(0, empty.estimateSize()); assertEquals(0, empty.getExactSizeIfKnown()); DoubleConsumer alwaysFails = (double value) -> fail(); Consumer alwaysFailsBoxed = (Double value) -> fail(); empty.tryAdvance(alwaysFails); empty.tryAdvance(alwaysFailsBoxed); empty.forEachRemaining(alwaysFails); empty.forEachRemaining(alwaysFailsBoxed); assertEquals(Spliterator.SIZED | Spliterator.SUBSIZED, empty.characteristics()); } public void testSpliteratorObjectArray() { String[] array = { "a", "b", "c", "d", "e", "f", "g", "h" }; ArrayList expectedValues = new ArrayList<>(Arrays.asList(array)); Spliterator sp = Spliterators.spliterator(array, 0); assertEquals(8, sp.estimateSize()); assertEquals(8, sp.getExactSizeIfKnown()); sp = Spliterators.spliterator(array, 0); SpliteratorTester.runBasicIterationTests(sp, expectedValues); sp = Spliterators.spliterator(array, 0); SpliteratorTester.testSpliteratorNPE(sp); sp = Spliterators.spliterator(array, 0); SpliteratorTester.runBasicSplitTests(sp, expectedValues, String::compareTo); sp = Spliterators.spliterator(array, 0); SpliteratorTester.runSizedTests(sp, 8); sp = Spliterators.spliterator(array, 0); SpliteratorTester.runSubSizedTests(sp, 8); // Assert the spliterator inherits any characteristics we ask it to. sp = Spliterators.spliterator(array, Spliterator.ORDERED); assertTrue(sp.hasCharacteristics(Spliterator.ORDERED)); } public void testSpliteratorObjectArrayRange() { String[] array = { "FOO", "BAR", "a", "b", "c", "d", "e", "f", "g", "h", "BAZ", "BAH" }; ArrayList expectedValues = new ArrayList<>( Arrays.asList(Arrays.copyOfRange(array, 2, 10))); Spliterator sp = Spliterators.spliterator(array, 2, 10, 0); assertEquals(8, sp.estimateSize()); assertEquals(8, sp.getExactSizeIfKnown()); sp = Spliterators.spliterator(array, 2, 10, 0); SpliteratorTester.runBasicIterationTests(sp, expectedValues); sp = Spliterators.spliterator(array, 2, 10, 0); SpliteratorTester.testSpliteratorNPE(sp); sp = Spliterators.spliterator(array, 2, 10, 0); SpliteratorTester.runBasicSplitTests(sp, expectedValues, String::compareTo); sp = Spliterators.spliterator(array, 2, 10, 0); SpliteratorTester.runSizedTests(sp, 8); sp = Spliterators.spliterator(array, 2, 10, 0); SpliteratorTester.runSubSizedTests(sp, 8); // Assert the spliterator inherits any characteristics we ask it to. sp = Spliterators.spliterator(array, 2, 10, Spliterator.ORDERED); assertTrue(sp.hasCharacteristics(Spliterator.ORDERED)); } private static class PrimitiveIntArrayList { final int[] array; int idx; PrimitiveIntArrayList(int size) { array = new int[size]; } public void add(int element) { array[idx++] = element; } public int[] toSortedArray() { Arrays.sort(array); return array; } } private static class PrimitiveLongArrayList { final long[] array; int idx; PrimitiveLongArrayList(int size) { array = new long[size]; } public void add(long element) { array[idx++] = element; } public long[] toSortedArray() { Arrays.sort(array); return array; } } private static class PrimitiveDoubleArrayList { final double[] array; int idx; PrimitiveDoubleArrayList(int size) { array = new double[size]; } public void add(double element) { array[idx++] = element; } public double[] toSortedArray() { Arrays.sort(array); return array; } } public void test_spliterator_int() { int[] elements = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfInt intSp = Spliterators.spliterator(elements, 0); assertEquals(16, intSp.estimateSize()); assertEquals(16, intSp.getExactSizeIfKnown()); assertTrue(intSp.tryAdvance((Integer value) -> assertEquals(1, (int) value))); assertTrue(intSp.tryAdvance((int value) -> assertEquals(2, (int) value))); PrimitiveIntArrayList recorder = new PrimitiveIntArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfInt split1 = intSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((int value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Integer value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfInt split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((int value) -> recorder.add(value)); assertFalse(split2.tryAdvance((int value) -> fail())); assertFalse(split2.tryAdvance((Integer value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((int value) -> recorder.add(value)); intSp.forEachRemaining((int value) -> recorder.add(value)); int[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(elements), Arrays.toString(recorded)); } public void test_spliterator_intOffsetBasic() { int[] elements = { 123123, 131321312, 1, 2, 3, 4, 32323232, 45454}; Spliterator.OfInt sp = Spliterators.spliterator(elements, 2, 6, 0); PrimitiveIntArrayList recorder = new PrimitiveIntArrayList(4); sp.tryAdvance((Integer value) -> recorder.add((int) value)); sp.tryAdvance((int value) -> recorder.add(value)); sp.forEachRemaining((int value) -> recorder.add(value)); int[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(new int[] { 1, 2, 3, 4 }), Arrays.toString(recorded)); } public void test_spliterator_longOffsetBasic() { long[] elements = { 123123, 131321312, 1, 2, 3, 4, 32323232, 45454}; Spliterator.OfLong sp = Spliterators.spliterator(elements, 2, 6, 0); PrimitiveLongArrayList recorder = new PrimitiveLongArrayList(4); sp.tryAdvance((Long value) -> recorder.add((long) value)); sp.tryAdvance((long value) -> recorder.add(value)); sp.forEachRemaining((long value) -> recorder.add(value)); long[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(new long[] { 1, 2, 3, 4 }), Arrays.toString(recorded)); } public void test_spliterator_doubleOffsetBasic() { double[] elements = { 123123, 131321312, 1, 2, 3, 4, 32323232, 45454}; Spliterator.OfDouble sp = Spliterators.spliterator(elements, 2, 6, 0); PrimitiveDoubleArrayList recorder = new PrimitiveDoubleArrayList(4); sp.tryAdvance((Double value) -> recorder.add((double) value)); sp.tryAdvance((double value) -> recorder.add(value)); sp.forEachRemaining((double value) -> recorder.add(value)); double[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(new double[] { 1, 2, 3, 4 }), Arrays.toString(recorded)); } public void test_spliterator_long() { long[] elements = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfLong longSp = Spliterators.spliterator(elements, 0); assertEquals(16, longSp.estimateSize()); assertEquals(16, longSp.getExactSizeIfKnown()); assertTrue(longSp.tryAdvance((Long value) -> assertEquals(1, (long) value))); assertTrue(longSp.tryAdvance((long value) -> assertEquals(2, (long) value))); PrimitiveLongArrayList recorder = new PrimitiveLongArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfLong split1 = longSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((long value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Long value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfLong split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((long value) -> recorder.add(value)); assertFalse(split2.tryAdvance((long value) -> fail())); assertFalse(split2.tryAdvance((Long value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((long value) -> recorder.add(value)); longSp.forEachRemaining((long value) -> recorder.add(value)); long[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(elements), Arrays.toString(recorded)); } public void test_spliterator_double() { double[] elements = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfDouble doubleSp = Spliterators.spliterator(elements, 0); assertEquals(16, doubleSp.estimateSize()); assertEquals(16, doubleSp.getExactSizeIfKnown()); assertTrue(doubleSp.tryAdvance((Double value) -> assertEquals(1.0, (double) value))); assertTrue(doubleSp.tryAdvance((double value) -> assertEquals(2.0, (double) value))); PrimitiveDoubleArrayList recorder = new PrimitiveDoubleArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfDouble split1 = doubleSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((double value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Double value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfDouble split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((double value) -> recorder.add(value)); assertFalse(split2.tryAdvance((double value) -> fail())); assertFalse(split2.tryAdvance((Double value) -> fail())); // Iterate over the remaining elements so we can make sure we've looked at // everything. split1.forEachRemaining((double value) -> recorder.add(value)); doubleSp.forEachRemaining((double value) -> recorder.add(value)); double[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(elements), Arrays.toString(recorded)); } public void test_primitive_spliterators_NPE() { final int[] elements = { 1, 2, 3, 4, 5, 6}; Spliterator.OfInt intSp = Spliterators.spliterator(elements, 0); try { intSp.forEachRemaining((Consumer) null); fail(); } catch (NullPointerException expected) { } try { assertTrue(intSp.tryAdvance((Consumer) null)); fail(); } catch (NullPointerException expected) { } try { intSp.forEachRemaining((IntConsumer) null); fail(); } catch (NullPointerException expected) { } try { intSp.tryAdvance((IntConsumer) null); fail(); } catch (NullPointerException expected) { } final long[] longElements = { 1, 2, 3, 4, 5, 6}; Spliterator.OfLong longSp = Spliterators.spliterator(longElements, 0); try { longSp.forEachRemaining((Consumer) null); fail(); } catch (NullPointerException expected) { } try { longSp.tryAdvance((Consumer) null); fail(); } catch (NullPointerException expected) { } try { longSp.forEachRemaining((LongConsumer) null); fail(); } catch (NullPointerException expected) { } try { longSp.tryAdvance((LongConsumer) null); fail(); } catch (NullPointerException expected) { } final double[] doubleElements = { 1, 2, 3, 4, 5, 6}; Spliterator.OfDouble doubleSp = Spliterators.spliterator(doubleElements, 0); try { doubleSp.forEachRemaining((Consumer) null); fail(); } catch (NullPointerException expected) { } try { doubleSp.tryAdvance((Consumer) null); fail(); } catch (NullPointerException expected) { } try { doubleSp.forEachRemaining((DoubleConsumer) null); fail(); } catch (NullPointerException expected) { } try { doubleSp.tryAdvance((DoubleConsumer) null); fail(); } catch (NullPointerException expected) { } } public void testSpliterator_Collection() { String[] array = { "a", "b", "c", "d", "e", "f", "g", "h" }; ArrayList expectedValues = new ArrayList<>(Arrays.asList(array)); Collection collection = Arrays.asList(array); Spliterator sp = Spliterators.spliterator(collection, 0); assertEquals(8, sp.estimateSize()); assertEquals(8, sp.getExactSizeIfKnown()); sp = Spliterators.spliterator(collection, 0); SpliteratorTester.runBasicIterationTests(sp, expectedValues); sp = Spliterators.spliterator(collection, 0); SpliteratorTester.testSpliteratorNPE(sp); sp = Spliterators.spliterator(collection, 0); SpliteratorTester.runBasicSplitTests(sp, expectedValues, String::compareTo); sp = Spliterators.spliterator(collection, 0); SpliteratorTester.runSizedTests(sp, 8); sp = Spliterators.spliterator(collection, 0); SpliteratorTester.runSubSizedTests(sp, 8); // Assert the spliterator inherits any characteristics we ask it to. sp = Spliterators.spliterator(collection, Spliterator.ORDERED); assertTrue(sp.hasCharacteristics(Spliterator.ORDERED)); } public void testSpliterator_sizedIterator() { String[] array = { "a", "b", "c", "d", "e", "f", "g", "h" }; List asList = Arrays.asList(array); ArrayList expectedValues = new ArrayList<>(asList); Spliterator sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); assertEquals(8, sp.estimateSize()); assertEquals(8, sp.getExactSizeIfKnown()); sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); SpliteratorTester.runBasicIterationTests(sp, expectedValues); sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); SpliteratorTester.testSpliteratorNPE(sp); sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); SpliteratorTester.runBasicSplitTests(sp, expectedValues, String::compareTo); sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); SpliteratorTester.runSizedTests(sp, 8); sp = Spliterators.spliterator(asList.iterator(), 8 /* size */, 0); SpliteratorTester.runSubSizedTests(sp, 8); // Assert the spliterator inherits any characteristics we ask it to. sp = Spliterators.spliterator(array, Spliterator.ORDERED); assertTrue(sp.hasCharacteristics(Spliterator.ORDERED)); } public void testSpliterator_unsizedIterator() { String[] array = { "a", "b", "c", "d", "e", "f", "g", "h" }; List asList = Arrays.asList(array); ArrayList expectedValues = new ArrayList<>(asList); Spliterator sp = Spliterators.spliteratorUnknownSize(asList.iterator(), 0); SpliteratorTester.runBasicIterationTests(sp, expectedValues); sp = Spliterators.spliteratorUnknownSize(asList.iterator(), 0); SpliteratorTester.testSpliteratorNPE(sp); sp = Spliterators.spliteratorUnknownSize(asList.iterator(), 0); SpliteratorTester.runBasicSplitTests(sp, expectedValues, String::compareTo); // Assert the spliterator inherits any characteristics we ask it to. sp = Spliterators.spliterator(array, Spliterator.ORDERED); assertTrue(sp.hasCharacteristics(Spliterator.ORDERED)); } private static class CannedIntPrimitiveIterator implements PrimitiveIterator.OfInt { private final int[] data; private int idx; public CannedIntPrimitiveIterator(int[] data) { this.data = data; this.idx = 0; } @Override public int nextInt() { return data[idx++]; } @Override public boolean hasNext() { return idx < data.length; } } private static class CannedLongPrimitiveIterator implements PrimitiveIterator.OfLong { private final long[] data; private int idx; public CannedLongPrimitiveIterator(long[] data) { this.data = data; this.idx = 0; } @Override public long nextLong() { return data[idx++]; } @Override public boolean hasNext() { return idx < data.length; } } private static class CannedDoublePrimitiveIterator implements PrimitiveIterator.OfDouble { private final double[] data; private int idx; public CannedDoublePrimitiveIterator(double[] data) { this.data = data; this.idx = 0; } @Override public double nextDouble() { return data[idx++]; } @Override public boolean hasNext() { return idx < data.length; } } public void test_spliterator_intPrimitiveIterator() { int[] data = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfInt elements = new CannedIntPrimitiveIterator(data); Spliterator.OfInt intSp = Spliterators.spliterator(elements, 16 /* size */, 0); assertEquals(16, intSp.estimateSize()); assertEquals(16, intSp.getExactSizeIfKnown()); assertTrue(intSp.tryAdvance((Integer value) -> assertEquals(1, (int) value))); assertTrue(intSp.tryAdvance((int value) -> assertEquals(2, (int) value))); PrimitiveIntArrayList recorder = new PrimitiveIntArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfInt split1 = intSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((int value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Integer value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfInt split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((int value) -> recorder.add(value)); assertFalse(split2.tryAdvance((int value) -> fail())); assertFalse(split2.tryAdvance((Integer value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((int value) -> recorder.add(value)); intSp.forEachRemaining((int value) -> recorder.add(value)); int[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } public void test_spliterator_intPrimitiveIterator_unsized() { int[] data = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfInt elements = new CannedIntPrimitiveIterator(data); Spliterator.OfInt intSp = Spliterators.spliteratorUnknownSize(elements, 0); assertTrue(intSp.tryAdvance((Integer value) -> assertEquals(1, (int) value))); assertTrue(intSp.tryAdvance((int value) -> assertEquals(2, (int) value))); PrimitiveIntArrayList recorder = new PrimitiveIntArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfInt split1 = intSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((int value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Integer value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfInt split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((int value) -> recorder.add(value)); assertFalse(split2.tryAdvance((int value) -> fail())); assertFalse(split2.tryAdvance((Integer value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((int value) -> recorder.add(value)); intSp.forEachRemaining((int value) -> recorder.add(value)); int[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } public void test_spliterator_longPrimitiveIterator() { long[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfLong elements = new CannedLongPrimitiveIterator(data); Spliterator.OfLong longSp = Spliterators.spliterator(elements, 16 /* size */, 0); assertEquals(16, longSp.estimateSize()); assertEquals(16, longSp.getExactSizeIfKnown()); assertTrue(longSp.tryAdvance((Long value) -> assertEquals(1, (long) value))); assertTrue(longSp.tryAdvance((long value) -> assertEquals(2, (long) value))); PrimitiveLongArrayList recorder = new PrimitiveLongArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfLong split1 = longSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((long value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Long value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfLong split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((long value) -> recorder.add(value)); assertFalse(split2.tryAdvance((long value) -> fail())); assertFalse(split2.tryAdvance((Long value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((long value) -> recorder.add(value)); longSp.forEachRemaining((long value) -> recorder.add(value)); long[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } public void test_spliterator_longPrimitiveIterator_unsized() { long[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfLong elements = new CannedLongPrimitiveIterator(data); Spliterator.OfLong longSp = Spliterators.spliteratorUnknownSize(elements, 0); assertTrue(longSp.tryAdvance((Long value) -> assertEquals(1, (long) value))); assertTrue(longSp.tryAdvance((long value) -> assertEquals(2, (long) value))); PrimitiveLongArrayList recorder = new PrimitiveLongArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfLong split1 = longSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((long value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Long value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfLong split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((long value) -> recorder.add(value)); assertFalse(split2.tryAdvance((long value) -> fail())); assertFalse(split2.tryAdvance((Long value) -> fail())); // Iterate over the remaning elements so we can make sure we've looked at // everything. split1.forEachRemaining((long value) -> recorder.add(value)); longSp.forEachRemaining((long value) -> recorder.add(value)); long[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } public void test_spliterator_doublePrimitiveIterator() { double[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfDouble elements = new CannedDoublePrimitiveIterator(data); Spliterator.OfDouble doubleSp = Spliterators.spliterator(elements, 16 /* size */, 0); assertEquals(16, doubleSp.estimateSize()); assertEquals(16, doubleSp.getExactSizeIfKnown()); assertTrue(doubleSp.tryAdvance((Double value) -> assertEquals(1.0, (double) value))); assertTrue(doubleSp.tryAdvance((double value) -> assertEquals(2.0, (double) value))); PrimitiveDoubleArrayList recorder = new PrimitiveDoubleArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfDouble split1 = doubleSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((double value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Double value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfDouble split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((double value) -> recorder.add(value)); assertFalse(split2.tryAdvance((double value) -> fail())); assertFalse(split2.tryAdvance((Double value) -> fail())); // Iterate over the remaining elements so we can make sure we've looked at // everything. split1.forEachRemaining((double value) -> recorder.add(value)); doubleSp.forEachRemaining((double value) -> recorder.add(value)); double[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } public void test_spliterator_doublePrimitiveIterator_unsized() { double[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; PrimitiveIterator.OfDouble elements = new CannedDoublePrimitiveIterator(data); Spliterator.OfDouble doubleSp = Spliterators.spliteratorUnknownSize(elements, 0); assertTrue(doubleSp.tryAdvance((Double value) -> assertEquals(1.0, (double) value))); assertTrue(doubleSp.tryAdvance((double value) -> assertEquals(2.0, (double) value))); PrimitiveDoubleArrayList recorder = new PrimitiveDoubleArrayList(16); // Record elements observed by previous tests. recorder.add(1); recorder.add(2); Spliterator.OfDouble split1 = doubleSp.trySplit(); assertNotNull(split1); assertTrue(split1.tryAdvance((double value) -> recorder.add(value))); assertTrue(split1.tryAdvance((Double value) -> recorder.add(value))); // Assert that splits can themselves resplit. Spliterator.OfDouble split2 = split1.trySplit(); assertNotNull(split2); split2.forEachRemaining((double value) -> recorder.add(value)); assertFalse(split2.tryAdvance((double value) -> fail())); assertFalse(split2.tryAdvance((Double value) -> fail())); // Iterate over the remaining elements so we can make sure we've looked at // everything. split1.forEachRemaining((double value) -> recorder.add(value)); doubleSp.forEachRemaining((double value) -> recorder.add(value)); double[] recorded = recorder.toSortedArray(); assertEquals(Arrays.toString(data), Arrays.toString(recorded)); } // Conversions from spliterators to iterators public void test_iterator_int() { int[] data = new int[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfInt intSp = Spliterators.spliterator(data, 0); PrimitiveIterator.OfInt it = Spliterators.iterator(intSp); assertTrue(it.hasNext()); assertEquals(1, (int) it.next()); assertEquals(2, it.nextInt()); PrimitiveIntArrayList recorder = new PrimitiveIntArrayList(16); recorder.add(1); recorder.add(2); it.forEachRemaining((Integer l) -> recorder.add(l)); assertEquals(Arrays.toString(data), Arrays.toString(recorder.toSortedArray())); assertFalse(it.hasNext()); } public void test_iterator_long() { long[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfLong longSp = Spliterators.spliterator(data, 0); PrimitiveIterator.OfLong it = Spliterators.iterator(longSp); assertTrue(it.hasNext()); assertEquals(1, (long) it.next()); assertEquals(2, it.nextLong()); PrimitiveLongArrayList recorder = new PrimitiveLongArrayList(16); recorder.add(1); recorder.add(2); it.forEachRemaining((Long l) -> recorder.add(l)); assertEquals(Arrays.toString(data), Arrays.toString(recorder.toSortedArray())); assertFalse(it.hasNext()); } public void test_iterator_double() { double[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Spliterator.OfDouble doubleSp = Spliterators.spliterator(data, 0); PrimitiveIterator.OfDouble it = Spliterators.iterator(doubleSp); assertTrue(it.hasNext()); assertEquals(1.0, it.next()); assertEquals(2.0, it.nextDouble()); PrimitiveDoubleArrayList recorder = new PrimitiveDoubleArrayList(16); recorder.add(1.0); recorder.add(2.0); it.forEachRemaining((Double l) -> recorder.add(l)); assertEquals(Arrays.toString(data), Arrays.toString(recorder.toSortedArray())); assertFalse(it.hasNext()); } public void test_iterator_ref() { String[] array = { "a", "b", "c", "d", "e", "f", "g", "h" }; Spliterator stringSp = Spliterators.spliterator(array, 0); Iterator it = Spliterators.iterator(stringSp); assertTrue(it.hasNext()); assertEquals("a", it.next()); ArrayList recorder = new ArrayList<>(); recorder.add("a"); it.forEachRemaining((val) -> recorder.add(val)); assertEquals(Arrays.toString(array), Arrays.toString(recorder.toArray())); assertFalse(it.hasNext()); } }