1a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/* 2a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. 3a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 5a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * This code is free software; you can redistribute it and/or modify it 6a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * under the terms of the GNU General Public License version 2 only, as 7a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * published by the Free Software Foundation. 8a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 9a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT 10a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * version 2 for more details (a copy is included in the LICENSE file that 13a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * accompanied this code). 14a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 15a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * You should have received a copy of the GNU General Public License version 16a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 2 along with this work; if not, write to the Free Software Foundation, 17a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 19a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * or visit www.oracle.com if you need additional information or have any 21a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * questions. 22a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin */ 23a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpackage org.openjdk.tests.java.util.stream; 24a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 25a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport org.testng.annotations.DataProvider; 26a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport org.testng.annotations.Test; 27a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.OpTestCase; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.StreamTestDataProvider; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.TestData; 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.DoubleStreamTestScenario; 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.IntStreamTestScenario; 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.LongStreamTestScenario; 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.LambdaTestHelpers; 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.StreamTestScenario; 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 37a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.lang.reflect.InvocationHandler; 38a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.lang.reflect.Method; 39a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.lang.reflect.Proxy; 40a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.ArrayList; 41a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.List; 42a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Spliterator; 43a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.Function; 44a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.UnaryOperator; 45a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.DoubleStream; 46a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.IntStream; 47a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.LongStream; 48a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.Stream; 49a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.StreamSupport; 50a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport static org.openjdk.testlib.java.util.stream.LambdaTestHelpers.assertUnique; 52a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 53a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 54a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin@Test 55a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpublic class InfiniteStreamWithLimitOpTest extends OpTestCase { 56a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 57a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private static final long SKIP_LIMIT_SIZE = 1 << 16; 58a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 59a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @DataProvider(name = "Stream.limit") 60a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @SuppressWarnings("rawtypes") 61a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public static Object[][] sliceFunctionsDataProvider() { 62a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin Function<String, String> f = s -> String.format(s, SKIP_LIMIT_SIZE); 63a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 64a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin List<Object[]> data = new ArrayList<>(); 65a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 66a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("Stream.limit(%d)"), 67a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<Stream>) s -> s.limit(SKIP_LIMIT_SIZE)}); 68a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("Stream.skip(%1$d).limit(%1$d)"), 69a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<Stream>) s -> s.skip(SKIP_LIMIT_SIZE).limit(SKIP_LIMIT_SIZE)}); 70a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 71a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return data.toArray(new Object[0][]); 72a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 73a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 74a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @DataProvider(name = "IntStream.limit") 75a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public static Object[][] intSliceFunctionsDataProvider() { 76a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin Function<String, String> f = s -> String.format(s, SKIP_LIMIT_SIZE); 77a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 78a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin List<Object[]> data = new ArrayList<>(); 79a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 80a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("IntStream.limit(%d)"), 81a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<IntStream>) s -> s.limit(SKIP_LIMIT_SIZE)}); 82a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("IntStream.skip(%1$d).limit(%1$d)"), 83a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<IntStream>) s -> s.skip(SKIP_LIMIT_SIZE).limit(SKIP_LIMIT_SIZE)}); 84a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 85a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return data.toArray(new Object[0][]); 86a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 87a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 88a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @DataProvider(name = "LongStream.limit") 89a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public static Object[][] longSliceFunctionsDataProvider() { 90a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin Function<String, String> f = s -> String.format(s, SKIP_LIMIT_SIZE); 91a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 92a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin List<Object[]> data = new ArrayList<>(); 93a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 94a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("LongStream.limit(%d)"), 95a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<LongStream>) s -> s.limit(SKIP_LIMIT_SIZE)}); 96a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("LongStream.skip(%1$d).limit(%1$d)"), 97a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<LongStream>) s -> s.skip(SKIP_LIMIT_SIZE).limit(SKIP_LIMIT_SIZE)}); 98a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 99a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return data.toArray(new Object[0][]); 100a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 101a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 102a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @DataProvider(name = "DoubleStream.limit") 103a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public static Object[][] doubleSliceFunctionsDataProvider() { 104a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin Function<String, String> f = s -> String.format(s, SKIP_LIMIT_SIZE); 105a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 106a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin List<Object[]> data = new ArrayList<>(); 107a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 108a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("DoubleStream.limit(%d)"), 109a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<DoubleStream>) s -> s.limit(SKIP_LIMIT_SIZE)}); 110a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin data.add(new Object[]{f.apply("DoubleStream.skip(%1$d).limit(%1$d)"), 111a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin (UnaryOperator<DoubleStream>) s -> s.skip(SKIP_LIMIT_SIZE).limit(SKIP_LIMIT_SIZE)}); 112a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 113a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return data.toArray(new Object[0][]); 114a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 115a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 116a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private <T> ResultAsserter<Iterable<T>> unorderedAsserter() { 117a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return (act, exp, ord, par) -> { 118a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin if (par & !ord) { 119a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Can only assert that all elements of the actual result 120a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // are distinct and that the count is the limit size 121a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // any element within the range [0, Long.MAX_VALUE) may be 122a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // present 123a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin assertUnique(act); 124a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin long count = 0; 125a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (T l : act) { 126a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin count++; 127a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 128a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin assertEquals(count, SKIP_LIMIT_SIZE, "size not equal"); 129a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 130a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin else { 131a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin LambdaTestHelpers.assertContents(act, exp); 132a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 133a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }; 134a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 135a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 136a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfRef<Long> refLongs() { 137a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return refLongRange(0, Long.MAX_VALUE); 138a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 139a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 140a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfRef<Long> refLongRange(long l, long u) { 141a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return TestData.Factory.ofSupplier( 142a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin String.format("[%d, %d)", l, u), 143a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin () -> LongStream.range(l, u).boxed()); 144a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 145a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 146a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfInt ints() { 147a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return intRange(0, Integer.MAX_VALUE); 148a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 149a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 150a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfInt intRange(int l, int u) { 151a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return TestData.Factory.ofIntSupplier( 152a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin String.format("[%d, %d)", l, u), 153a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin () -> IntStream.range(l, u)); 154a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 155a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 156a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfLong longs() { 157a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return longRange(0, Long.MAX_VALUE); 158a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 159a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 160a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfLong longRange(long l, long u) { 161a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return TestData.Factory.ofLongSupplier( 162a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin String.format("[%d, %d)", l, u), 163a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin () -> LongStream.range(l, u)); 164a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 165a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 166a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfDouble doubles() { 167a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return doubleRange(0, 1L << 53); 168a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 169a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 170a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfDouble doubleRange(long l, long u) { 171a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return TestData.Factory.ofDoubleSupplier( 172a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin String.format("[%d, %d)", l, u), 173a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin () -> LongStream.range(l, u).mapToDouble(i -> (double) i)); 174a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 175a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 176a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 177a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Sized/subsized range 178a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 179a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "Stream.limit") 180a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testSubsizedWithRange(String description, UnaryOperator<Stream<Long>> fs) { 181a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are SUBSIZED 182a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 183a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 184a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(refLongs()). 185a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s)). 186a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin without(StreamTestScenario.CLEAR_SIZED_SCENARIOS). 187a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 188a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 189a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 190a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "IntStream.limit") 191a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testIntSubsizedWithRange(String description, UnaryOperator<IntStream> fs) { 192a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Integer.MAX_VALUE), splits are SUBSIZED 193a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 194a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 195a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(ints()). 196a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s)). 197a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin without(IntStreamTestScenario.CLEAR_SIZED_SCENARIOS). 198a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 199a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 200a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 201a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "LongStream.limit") 202a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testLongSubsizedWithRange(String description, UnaryOperator<LongStream> fs) { 203a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are SUBSIZED 204a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 205a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 206a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(longs()). 207a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s)). 208a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin without(LongStreamTestScenario.CLEAR_SIZED_SCENARIOS). 209a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 210a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 211a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 212a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "DoubleStream.limit") 213a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testDoubleSubsizedWithRange(String description, UnaryOperator<DoubleStream> fs) { 214a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, 2^53), splits are SUBSIZED 215a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 216a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 217a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(doubles()). 218a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s)). 219a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin without(DoubleStreamTestScenario.CLEAR_SIZED_SCENARIOS). 220a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 221a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 222a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 223a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 224a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Unordered finite not SIZED/SUBSIZED 225a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 226a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "Stream.limit") 227a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testUnorderedFinite(String description, UnaryOperator<Stream<Long>> fs) { 228a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are SUBSIZED 229a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 230a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 231a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(longs()). 232a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered().boxed())). 233a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 234a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 235a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 236a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 237a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "IntStream.limit") 238a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testIntUnorderedFinite(String description, UnaryOperator<IntStream> fs) { 239a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Integer.MAX_VALUE), splits are SUBSIZED 240a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 241a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 242a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(ints()). 243a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 244a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 245a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 246a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 247a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 248a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "LongStream.limit") 249a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testLongUnorderedFinite(String description, UnaryOperator<LongStream> fs) { 250a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are SUBSIZED 251a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 252a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 253a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(longs()). 254a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 255a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 256a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 257a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 258a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 259a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "DoubleStream.limit") 260a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testDoubleUnorderedFinite(String description, UnaryOperator<DoubleStream> fs) { 261a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, 1L << 53), splits are SUBSIZED 262a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 263a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 264a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Upper bound ensures values mapped to doubles will be unique 265a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(doubles()). 266a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 267a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 268a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 269a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 270a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 271a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 272a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Unordered finite not SUBSIZED 273a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 274a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @SuppressWarnings({"rawtypes", "unchecked"}) 275a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private Spliterator.OfLong proxyNotSubsized(Spliterator.OfLong s) { 276a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin InvocationHandler ih = new InvocationHandler() { 277a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Override 278a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 279a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin switch (method.getName()) { 280a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin case "characteristics": { 281a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin int c = (Integer) method.invoke(s, args); 282a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return c & ~Spliterator.SUBSIZED; 283a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 284a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin case "hasCharacteristics": { 285a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin int c = (Integer) args[0]; 286a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin boolean b = (Boolean) method.invoke(s, args); 287a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return b & ((c & Spliterator.SUBSIZED) == 0); 288a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 289a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin default: 290a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return method.invoke(s, args); 291a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 292a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 293a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }; 294a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 295a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return (Spliterator.OfLong) Proxy.newProxyInstance(this.getClass().getClassLoader(), 296a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin new Class[]{Spliterator.OfLong.class}, 297a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin ih); 298a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 299a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 300a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private TestData.OfLong proxiedLongRange(long l, long u) { 301a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return TestData.Factory.ofLongSupplier( 302a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin String.format("[%d, %d)", l, u), 303a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin () -> StreamSupport.longStream(proxyNotSubsized(LongStream.range(l, u).spliterator()), false)); 304a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 305a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 306a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "Stream.limit") 307a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testUnorderedSizedNotSubsizedFinite(String description, UnaryOperator<Stream<Long>> fs) { 308a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are not SUBSIZED (proxy clears 309a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // the SUBSIZED characteristic) 310a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 311a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 312a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(proxiedLongRange(0, Long.MAX_VALUE)). 313a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered().boxed())). 314a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 315a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 316a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 317a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 318a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "IntStream.limit") 319a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testIntUnorderedSizedNotSubsizedFinite(String description, UnaryOperator<IntStream> fs) { 320a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Integer.MAX_VALUE), splits are not SUBSIZED (proxy clears 321a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // the SUBSIZED characteristic) 322a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 323a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 324a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(proxiedLongRange(0, Integer.MAX_VALUE)). 325a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered().mapToInt(i -> (int) i))). 326a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 327a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 328a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 329a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 330a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "LongStream.limit") 331a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testLongUnorderedSizedNotSubsizedFinite(String description, UnaryOperator<LongStream> fs) { 332a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Long.MAX_VALUE), splits are not SUBSIZED (proxy clears 333a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // the SUBSIZED characteristic) 334a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 335a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 336a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(proxiedLongRange(0, Long.MAX_VALUE)). 337a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered())). 338a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 339a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 340a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 341a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 342a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "DoubleStream.limit") 343a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testDoubleUnorderedSizedNotSubsizedFinite(String description, UnaryOperator<DoubleStream> fs) { 344a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Range is [0, Double.MAX_VALUE), splits are not SUBSIZED (proxy clears 345a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // the SUBSIZED characteristic) 346a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Such a size will induce out of memory errors for incorrect 347a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // slice implementations 348a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(proxiedLongRange(0, 1L << 53)). 349a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered().mapToDouble(i -> (double) i))). 350a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 351a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 352a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 353a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 354a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 355a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Unordered generation 356a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 357a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "Stream.limit") 358a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testUnorderedGenerator(String description, UnaryOperator<Stream<Long>> fs) { 359a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is spliterator of infinite size 360a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfRef<Long> generator = TestData.Factory.ofSupplier( 361a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1L, 1L, ...]", () -> Stream.generate(() -> 1L)); 362a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 363a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(generator). 364a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 365a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 366a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 367a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 368a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "IntStream.limit") 369a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testIntUnorderedGenerator(String description, UnaryOperator<IntStream> fs) { 370a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is spliterator of infinite size 371a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfInt generator = TestData.Factory.ofIntSupplier( 372a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1, 1, ...]", () -> IntStream.generate(() -> 1)); 373a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 374a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(generator). 375a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 376a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 377a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 378a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 379a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "LongStream.limit") 380a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testLongUnorderedGenerator(String description, UnaryOperator<LongStream> fs) { 381a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is spliterator of infinite size 382a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfLong generator = TestData.Factory.ofLongSupplier( 383a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1L, 1L, ...]", () -> LongStream.generate(() -> 1)); 384a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 385a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(generator). 386a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 387a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 388a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 389a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 390a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "DoubleStream.limit") 391a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testDoubleUnorderedGenerator(String description, UnaryOperator<DoubleStream> fs) { 392a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is spliterator of infinite size 393a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfDouble generator = TestData.Factory.ofDoubleSupplier( 394a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1.0, 1.0, ...]", () -> DoubleStream.generate(() -> 1.0)); 395a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 396a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(generator). 397a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.filter(i -> true).unordered())). 398a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 399a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 400a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 401a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 402a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Unordered iteration 403a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 404a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "Stream.limit") 405a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testUnorderedIteration(String description, UnaryOperator<Stream<Long>> fs) { 406a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is a right-balanced tree of infinite size 407a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfRef<Long> iterator = TestData.Factory.ofSupplier( 408a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1L, 2L, 3L, ...]", () -> Stream.iterate(1L, i -> i + 1L)); 409a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 410a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Ref 411a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(iterator). 412a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered())). 413a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 414a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 415a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 416a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 417a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "IntStream.limit") 418a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testIntUnorderedIteration(String description, UnaryOperator<IntStream> fs) { 419a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is a right-balanced tree of infinite size 420a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfInt iterator = TestData.Factory.ofIntSupplier( 421a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1, 2, 3, ...]", () -> IntStream.iterate(1, i -> i + 1)); 422a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 423a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Ref 424a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(iterator). 425a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered())). 426a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 427a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 428a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 429a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 430a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "LongStream.limit") 431a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testLongUnorderedIteration(String description, UnaryOperator<LongStream> fs) { 432a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is a right-balanced tree of infinite size 433a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfLong iterator = TestData.Factory.ofLongSupplier( 434a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1L, 2L, 3L, ...]", () -> LongStream.iterate(1, i -> i + 1)); 435a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 436a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Ref 437a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(iterator). 438a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered())). 439a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 440a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 441a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 442a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 443a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin @Test(dataProvider = "DoubleStream.limit") 444a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public void testDoubleUnorderedIteration(String description, UnaryOperator<DoubleStream> fs) { 445a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Source is a right-balanced tree of infinite size 446a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin TestData.OfDouble iterator = TestData.Factory.ofDoubleSupplier( 447a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin "[1.0, 2.0, 3.0, ...]", () -> DoubleStream.iterate(1, i -> i + 1)); 448a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 449a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Ref 450a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin withData(iterator). 451a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin stream(s -> fs.apply(s.unordered())). 452a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin resultAsserter(unorderedAsserter()). 453a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin exercise(); 454a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 455a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin} 456