--- old/test/java/util/stream/boottest/java/util/stream/SpinedBufferTest.java 2015-11-13 15:38:29.835177883 -0800 +++ /dev/null 2015-05-15 15:37:46.536788447 -0700 @@ -1,370 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package java.util.stream; - -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import java.util.*; -import java.util.function.DoubleConsumer; -import java.util.function.IntConsumer; -import java.util.function.LongConsumer; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; - -@Test -public class SpinedBufferTest { - - // Create sizes around the boundary of spines - static List sizes; - static { - try { - sizes = IntStream.range(0, 15) - .map(i -> 1 << i) - .flatMap(i -> Arrays.stream(new int[] { i-2, i-1, i, i+1, i+2 })) - .filter(i -> i >= 0) - .boxed() - .distinct() - .collect(Collectors.toList()); - } - catch (Exception e) { - e.printStackTrace(); - } - } - - private static final int TEST_SIZE = 5000; - - // SpinedBuffer - - @DataProvider(name = "SpinedBuffer") - public Object[][] createSpinedBuffer() { - List params = new ArrayList<>(); - - for (int size : sizes) { - int[] array = IntStream.range(0, size).toArray(); - - SpinedBuffer sb = new SpinedBuffer<>(); - Arrays.stream(array).boxed().forEach(sb); - params.add(new Object[]{array, sb}); - - sb = new SpinedBuffer<>(size / 2); - Arrays.stream(array).boxed().forEach(sb); - params.add(new Object[]{array, sb}); - - sb = new SpinedBuffer<>(size); - Arrays.stream(array).boxed().forEach(sb); - params.add(new Object[]{array, sb}); - - sb = new SpinedBuffer<>(size * 2); - Arrays.stream(array).boxed().forEach(sb); - params.add(new Object[]{array, sb}); - } - - return params.toArray(new Object[0][]); - } - - @Test(dataProvider = "SpinedBuffer") - public void testSpliterator(int[] array, SpinedBuffer sb) { - assertEquals(sb.count(), array.length); - assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); - - SpliteratorTestHelper.testSpliterator(sb::spliterator); - } - - @Test(dataProvider = "SpinedBuffer", groups = { "serialization-hostile" }) - public void testLastSplit(int[] array, SpinedBuffer sb) { - Spliterator spliterator = sb.spliterator(); - Spliterator split = spliterator.trySplit(); - long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); - long lastSplitSize = spliterator.getExactSizeIfKnown(); - splitSizes += lastSplitSize; - - assertEquals(splitSizes, array.length); - - List contentOfLastSplit = new ArrayList<>(); - spliterator.forEachRemaining(contentOfLastSplit::add); - - assertEquals(contentOfLastSplit.size(), lastSplitSize); - - List end = Arrays.stream(array) - .boxed() - .skip(array.length - lastSplitSize) - .collect(Collectors.toList()); - assertEquals(contentOfLastSplit, end); - } - - @Test(groups = { "serialization-hostile" }) - public void testSpinedBuffer() { - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - SpinedBuffer sb = new SpinedBuffer<>(); - for (int i = 0; i < TEST_SIZE; i++) { - list1.add(i); - sb.accept(i); - } - Iterator it = sb.iterator(); - for (int i = 0; i < TEST_SIZE; i++) - list2.add(it.next()); - assertFalse(it.hasNext()); - assertEquals(list1, list2); - - for (int i = 0; i < TEST_SIZE; i++) - assertEquals(sb.get(i), (Integer) i, Integer.toString(i)); - - list2.clear(); - sb.forEach(list2::add); - assertEquals(list1, list2); - Integer[] array = sb.asArray(LambdaTestHelpers.integerArrayGenerator); - list2.clear(); - for (Integer i : array) - list2.add(i); - assertEquals(list1, list2); - } - - // IntSpinedBuffer - - @DataProvider(name = "IntSpinedBuffer") - public Object[][] createIntSpinedBuffer() { - List params = new ArrayList<>(); - - for (int size : sizes) { - int[] array = IntStream.range(0, size).toArray(); - SpinedBuffer.OfInt sb = new SpinedBuffer.OfInt(); - Arrays.stream(array).forEach(sb); - - params.add(new Object[]{array, sb}); - } - - return params.toArray(new Object[0][]); - } - - @Test(dataProvider = "IntSpinedBuffer") - public void testIntSpliterator(int[] array, SpinedBuffer.OfInt sb) { - assertEquals(sb.count(), array.length); - assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); - - SpliteratorTestHelper.testIntSpliterator(sb::spliterator); - } - - @Test(dataProvider = "IntSpinedBuffer", groups = { "serialization-hostile" }) - public void testIntLastSplit(int[] array, SpinedBuffer.OfInt sb) { - Spliterator.OfInt spliterator = sb.spliterator(); - Spliterator.OfInt split = spliterator.trySplit(); - long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); - long lastSplitSize = spliterator.getExactSizeIfKnown(); - splitSizes += lastSplitSize; - - assertEquals(splitSizes, array.length); - - List contentOfLastSplit = new ArrayList<>(); - spliterator.forEachRemaining((IntConsumer) contentOfLastSplit::add); - - assertEquals(contentOfLastSplit.size(), lastSplitSize); - - List end = Arrays.stream(array) - .boxed() - .skip(array.length - lastSplitSize) - .collect(Collectors.toList()); - assertEquals(contentOfLastSplit, end); - } - - @Test(groups = { "serialization-hostile" }) - public void testIntSpinedBuffer() { - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - SpinedBuffer.OfInt sb = new SpinedBuffer.OfInt(); - for (int i = 0; i < TEST_SIZE; i++) { - list1.add(i); - sb.accept(i); - } - PrimitiveIterator.OfInt it = sb.iterator(); - for (int i = 0; i < TEST_SIZE; i++) - list2.add(it.nextInt()); - assertFalse(it.hasNext()); - assertEquals(list1, list2); - - for (int i = 0; i < TEST_SIZE; i++) - assertEquals(sb.get(i), i, Integer.toString(i)); - - list2.clear(); - sb.forEach((int i) -> list2.add(i)); - assertEquals(list1, list2); - int[] array = sb.asPrimitiveArray(); - list2.clear(); - for (int i : array) - list2.add(i); - assertEquals(list1, list2); - } - - // LongSpinedBuffer - - @DataProvider(name = "LongSpinedBuffer") - public Object[][] createLongSpinedBuffer() { - List params = new ArrayList<>(); - - for (int size : sizes) { - long[] array = LongStream.range(0, size).toArray(); - SpinedBuffer.OfLong sb = new SpinedBuffer.OfLong(); - Arrays.stream(array).forEach(sb); - - params.add(new Object[]{array, sb}); - } - - return params.toArray(new Object[0][]); - } - - @Test(dataProvider = "LongSpinedBuffer") - public void testLongSpliterator(long[] array, SpinedBuffer.OfLong sb) { - assertEquals(sb.count(), array.length); - assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); - - SpliteratorTestHelper.testLongSpliterator(sb::spliterator); - } - - @Test(dataProvider = "LongSpinedBuffer", groups = { "serialization-hostile" }) - public void testLongLastSplit(long[] array, SpinedBuffer.OfLong sb) { - Spliterator.OfLong spliterator = sb.spliterator(); - Spliterator.OfLong split = spliterator.trySplit(); - long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); - long lastSplitSize = spliterator.getExactSizeIfKnown(); - splitSizes += lastSplitSize; - - assertEquals(splitSizes, array.length); - - List contentOfLastSplit = new ArrayList<>(); - spliterator.forEachRemaining((LongConsumer) contentOfLastSplit::add); - - assertEquals(contentOfLastSplit.size(), lastSplitSize); - - List end = Arrays.stream(array) - .boxed() - .skip(array.length - lastSplitSize) - .collect(Collectors.toList()); - assertEquals(contentOfLastSplit, end); - } - - @Test(groups = { "serialization-hostile" }) - public void testLongSpinedBuffer() { - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - SpinedBuffer.OfLong sb = new SpinedBuffer.OfLong(); - for (long i = 0; i < TEST_SIZE; i++) { - list1.add(i); - sb.accept(i); - } - PrimitiveIterator.OfLong it = sb.iterator(); - for (int i = 0; i < TEST_SIZE; i++) - list2.add(it.nextLong()); - assertFalse(it.hasNext()); - assertEquals(list1, list2); - - for (int i = 0; i < TEST_SIZE; i++) - assertEquals(sb.get(i), i, Long.toString(i)); - - list2.clear(); - sb.forEach((long i) -> list2.add(i)); - assertEquals(list1, list2); - long[] array = sb.asPrimitiveArray(); - list2.clear(); - for (long i : array) - list2.add(i); - assertEquals(list1, list2); - } - - // DoubleSpinedBuffer - - @DataProvider(name = "DoubleSpinedBuffer") - public Object[][] createDoubleSpinedBuffer() { - List params = new ArrayList<>(); - - for (int size : sizes) { - // @@@ replace with double range when implemented - double[] array = LongStream.range(0, size).asDoubleStream().toArray(); - SpinedBuffer.OfDouble sb = new SpinedBuffer.OfDouble(); - Arrays.stream(array).forEach(sb); - - params.add(new Object[]{array, sb}); - } - - return params.toArray(new Object[0][]); - } - - @Test(dataProvider = "DoubleSpinedBuffer") - public void testDoubleSpliterator(double[] array, SpinedBuffer.OfDouble sb) { - assertEquals(sb.count(), array.length); - assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); - - SpliteratorTestHelper.testDoubleSpliterator(sb::spliterator); - } - - @Test(dataProvider = "DoubleSpinedBuffer", groups = { "serialization-hostile" }) - public void testLongLastSplit(double[] array, SpinedBuffer.OfDouble sb) { - Spliterator.OfDouble spliterator = sb.spliterator(); - Spliterator.OfDouble split = spliterator.trySplit(); - long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); - long lastSplitSize = spliterator.getExactSizeIfKnown(); - splitSizes += lastSplitSize; - - assertEquals(splitSizes, array.length); - - List contentOfLastSplit = new ArrayList<>(); - spliterator.forEachRemaining((DoubleConsumer) contentOfLastSplit::add); - - assertEquals(contentOfLastSplit.size(), lastSplitSize); - - List end = Arrays.stream(array) - .boxed() - .skip(array.length - lastSplitSize) - .collect(Collectors.toList()); - assertEquals(contentOfLastSplit, end); - } - - @Test(groups = { "serialization-hostile" }) - public void testDoubleSpinedBuffer() { - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - SpinedBuffer.OfDouble sb = new SpinedBuffer.OfDouble(); - for (long i = 0; i < TEST_SIZE; i++) { - list1.add((double) i); - sb.accept((double) i); - } - PrimitiveIterator.OfDouble it = sb.iterator(); - for (int i = 0; i < TEST_SIZE; i++) - list2.add(it.nextDouble()); - assertFalse(it.hasNext()); - assertEquals(list1, list2); - - for (int i = 0; i < TEST_SIZE; i++) - assertEquals(sb.get(i), (double) i, Double.toString(i)); - - list2.clear(); - sb.forEach((double i) -> list2.add(i)); - assertEquals(list1, list2); - double[] array = sb.asPrimitiveArray(); - list2.clear(); - for (double i : array) - list2.add(i); - assertEquals(list1, list2); - } -} --- /dev/null 2015-05-15 15:37:46.536788447 -0700 +++ new/test/java/util/stream/boottest/java.base/java/util/stream/SpinedBufferTest.java 2015-11-13 15:38:29.631169207 -0800 @@ -0,0 +1,370 @@ +/* + * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.stream; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.util.*; +import java.util.function.DoubleConsumer; +import java.util.function.IntConsumer; +import java.util.function.LongConsumer; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; + +@Test +public class SpinedBufferTest { + + // Create sizes around the boundary of spines + static List sizes; + static { + try { + sizes = IntStream.range(0, 15) + .map(i -> 1 << i) + .flatMap(i -> Arrays.stream(new int[] { i-2, i-1, i, i+1, i+2 })) + .filter(i -> i >= 0) + .boxed() + .distinct() + .collect(Collectors.toList()); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + private static final int TEST_SIZE = 5000; + + // SpinedBuffer + + @DataProvider(name = "SpinedBuffer") + public Object[][] createSpinedBuffer() { + List params = new ArrayList<>(); + + for (int size : sizes) { + int[] array = IntStream.range(0, size).toArray(); + + SpinedBuffer sb = new SpinedBuffer<>(); + Arrays.stream(array).boxed().forEach(sb); + params.add(new Object[]{array, sb}); + + sb = new SpinedBuffer<>(size / 2); + Arrays.stream(array).boxed().forEach(sb); + params.add(new Object[]{array, sb}); + + sb = new SpinedBuffer<>(size); + Arrays.stream(array).boxed().forEach(sb); + params.add(new Object[]{array, sb}); + + sb = new SpinedBuffer<>(size * 2); + Arrays.stream(array).boxed().forEach(sb); + params.add(new Object[]{array, sb}); + } + + return params.toArray(new Object[0][]); + } + + @Test(dataProvider = "SpinedBuffer") + public void testSpliterator(int[] array, SpinedBuffer sb) { + assertEquals(sb.count(), array.length); + assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); + + SpliteratorTestHelper.testSpliterator(sb::spliterator); + } + + @Test(dataProvider = "SpinedBuffer", groups = { "serialization-hostile" }) + public void testLastSplit(int[] array, SpinedBuffer sb) { + Spliterator spliterator = sb.spliterator(); + Spliterator split = spliterator.trySplit(); + long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); + long lastSplitSize = spliterator.getExactSizeIfKnown(); + splitSizes += lastSplitSize; + + assertEquals(splitSizes, array.length); + + List contentOfLastSplit = new ArrayList<>(); + spliterator.forEachRemaining(contentOfLastSplit::add); + + assertEquals(contentOfLastSplit.size(), lastSplitSize); + + List end = Arrays.stream(array) + .boxed() + .skip(array.length - lastSplitSize) + .collect(Collectors.toList()); + assertEquals(contentOfLastSplit, end); + } + + @Test(groups = { "serialization-hostile" }) + public void testSpinedBuffer() { + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + SpinedBuffer sb = new SpinedBuffer<>(); + for (int i = 0; i < TEST_SIZE; i++) { + list1.add(i); + sb.accept(i); + } + Iterator it = sb.iterator(); + for (int i = 0; i < TEST_SIZE; i++) + list2.add(it.next()); + assertFalse(it.hasNext()); + assertEquals(list1, list2); + + for (int i = 0; i < TEST_SIZE; i++) + assertEquals(sb.get(i), (Integer) i, Integer.toString(i)); + + list2.clear(); + sb.forEach(list2::add); + assertEquals(list1, list2); + Integer[] array = sb.asArray(LambdaTestHelpers.integerArrayGenerator); + list2.clear(); + for (Integer i : array) + list2.add(i); + assertEquals(list1, list2); + } + + // IntSpinedBuffer + + @DataProvider(name = "IntSpinedBuffer") + public Object[][] createIntSpinedBuffer() { + List params = new ArrayList<>(); + + for (int size : sizes) { + int[] array = IntStream.range(0, size).toArray(); + SpinedBuffer.OfInt sb = new SpinedBuffer.OfInt(); + Arrays.stream(array).forEach(sb); + + params.add(new Object[]{array, sb}); + } + + return params.toArray(new Object[0][]); + } + + @Test(dataProvider = "IntSpinedBuffer") + public void testIntSpliterator(int[] array, SpinedBuffer.OfInt sb) { + assertEquals(sb.count(), array.length); + assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); + + SpliteratorTestHelper.testIntSpliterator(sb::spliterator); + } + + @Test(dataProvider = "IntSpinedBuffer", groups = { "serialization-hostile" }) + public void testIntLastSplit(int[] array, SpinedBuffer.OfInt sb) { + Spliterator.OfInt spliterator = sb.spliterator(); + Spliterator.OfInt split = spliterator.trySplit(); + long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); + long lastSplitSize = spliterator.getExactSizeIfKnown(); + splitSizes += lastSplitSize; + + assertEquals(splitSizes, array.length); + + List contentOfLastSplit = new ArrayList<>(); + spliterator.forEachRemaining((IntConsumer) contentOfLastSplit::add); + + assertEquals(contentOfLastSplit.size(), lastSplitSize); + + List end = Arrays.stream(array) + .boxed() + .skip(array.length - lastSplitSize) + .collect(Collectors.toList()); + assertEquals(contentOfLastSplit, end); + } + + @Test(groups = { "serialization-hostile" }) + public void testIntSpinedBuffer() { + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + SpinedBuffer.OfInt sb = new SpinedBuffer.OfInt(); + for (int i = 0; i < TEST_SIZE; i++) { + list1.add(i); + sb.accept(i); + } + PrimitiveIterator.OfInt it = sb.iterator(); + for (int i = 0; i < TEST_SIZE; i++) + list2.add(it.nextInt()); + assertFalse(it.hasNext()); + assertEquals(list1, list2); + + for (int i = 0; i < TEST_SIZE; i++) + assertEquals(sb.get(i), i, Integer.toString(i)); + + list2.clear(); + sb.forEach((int i) -> list2.add(i)); + assertEquals(list1, list2); + int[] array = sb.asPrimitiveArray(); + list2.clear(); + for (int i : array) + list2.add(i); + assertEquals(list1, list2); + } + + // LongSpinedBuffer + + @DataProvider(name = "LongSpinedBuffer") + public Object[][] createLongSpinedBuffer() { + List params = new ArrayList<>(); + + for (int size : sizes) { + long[] array = LongStream.range(0, size).toArray(); + SpinedBuffer.OfLong sb = new SpinedBuffer.OfLong(); + Arrays.stream(array).forEach(sb); + + params.add(new Object[]{array, sb}); + } + + return params.toArray(new Object[0][]); + } + + @Test(dataProvider = "LongSpinedBuffer") + public void testLongSpliterator(long[] array, SpinedBuffer.OfLong sb) { + assertEquals(sb.count(), array.length); + assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); + + SpliteratorTestHelper.testLongSpliterator(sb::spliterator); + } + + @Test(dataProvider = "LongSpinedBuffer", groups = { "serialization-hostile" }) + public void testLongLastSplit(long[] array, SpinedBuffer.OfLong sb) { + Spliterator.OfLong spliterator = sb.spliterator(); + Spliterator.OfLong split = spliterator.trySplit(); + long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); + long lastSplitSize = spliterator.getExactSizeIfKnown(); + splitSizes += lastSplitSize; + + assertEquals(splitSizes, array.length); + + List contentOfLastSplit = new ArrayList<>(); + spliterator.forEachRemaining((LongConsumer) contentOfLastSplit::add); + + assertEquals(contentOfLastSplit.size(), lastSplitSize); + + List end = Arrays.stream(array) + .boxed() + .skip(array.length - lastSplitSize) + .collect(Collectors.toList()); + assertEquals(contentOfLastSplit, end); + } + + @Test(groups = { "serialization-hostile" }) + public void testLongSpinedBuffer() { + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + SpinedBuffer.OfLong sb = new SpinedBuffer.OfLong(); + for (long i = 0; i < TEST_SIZE; i++) { + list1.add(i); + sb.accept(i); + } + PrimitiveIterator.OfLong it = sb.iterator(); + for (int i = 0; i < TEST_SIZE; i++) + list2.add(it.nextLong()); + assertFalse(it.hasNext()); + assertEquals(list1, list2); + + for (int i = 0; i < TEST_SIZE; i++) + assertEquals(sb.get(i), i, Long.toString(i)); + + list2.clear(); + sb.forEach((long i) -> list2.add(i)); + assertEquals(list1, list2); + long[] array = sb.asPrimitiveArray(); + list2.clear(); + for (long i : array) + list2.add(i); + assertEquals(list1, list2); + } + + // DoubleSpinedBuffer + + @DataProvider(name = "DoubleSpinedBuffer") + public Object[][] createDoubleSpinedBuffer() { + List params = new ArrayList<>(); + + for (int size : sizes) { + // @@@ replace with double range when implemented + double[] array = LongStream.range(0, size).asDoubleStream().toArray(); + SpinedBuffer.OfDouble sb = new SpinedBuffer.OfDouble(); + Arrays.stream(array).forEach(sb); + + params.add(new Object[]{array, sb}); + } + + return params.toArray(new Object[0][]); + } + + @Test(dataProvider = "DoubleSpinedBuffer") + public void testDoubleSpliterator(double[] array, SpinedBuffer.OfDouble sb) { + assertEquals(sb.count(), array.length); + assertEquals(sb.count(), sb.spliterator().getExactSizeIfKnown()); + + SpliteratorTestHelper.testDoubleSpliterator(sb::spliterator); + } + + @Test(dataProvider = "DoubleSpinedBuffer", groups = { "serialization-hostile" }) + public void testLongLastSplit(double[] array, SpinedBuffer.OfDouble sb) { + Spliterator.OfDouble spliterator = sb.spliterator(); + Spliterator.OfDouble split = spliterator.trySplit(); + long splitSizes = (split == null) ? 0 : split.getExactSizeIfKnown(); + long lastSplitSize = spliterator.getExactSizeIfKnown(); + splitSizes += lastSplitSize; + + assertEquals(splitSizes, array.length); + + List contentOfLastSplit = new ArrayList<>(); + spliterator.forEachRemaining((DoubleConsumer) contentOfLastSplit::add); + + assertEquals(contentOfLastSplit.size(), lastSplitSize); + + List end = Arrays.stream(array) + .boxed() + .skip(array.length - lastSplitSize) + .collect(Collectors.toList()); + assertEquals(contentOfLastSplit, end); + } + + @Test(groups = { "serialization-hostile" }) + public void testDoubleSpinedBuffer() { + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + SpinedBuffer.OfDouble sb = new SpinedBuffer.OfDouble(); + for (long i = 0; i < TEST_SIZE; i++) { + list1.add((double) i); + sb.accept((double) i); + } + PrimitiveIterator.OfDouble it = sb.iterator(); + for (int i = 0; i < TEST_SIZE; i++) + list2.add(it.nextDouble()); + assertFalse(it.hasNext()); + assertEquals(list1, list2); + + for (int i = 0; i < TEST_SIZE; i++) + assertEquals(sb.get(i), (double) i, Double.toString(i)); + + list2.clear(); + sb.forEach((double i) -> list2.add(i)); + assertEquals(list1, list2); + double[] array = sb.asPrimitiveArray(); + list2.clear(); + for (double i : array) + list2.add(i); + assertEquals(list1, list2); + } +}