1289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/* 2289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. 3289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 5289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is free software; you can redistribute it and/or modify it 6289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * under the terms of the GNU General Public License version 2 only, as 7289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * published by the Free Software Foundation. 8289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 9289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT 10289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * version 2 for more details (a copy is included in the LICENSE file that 13289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * accompanied this code). 14289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 15289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * You should have received a copy of the GNU General Public License version 16289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 2 along with this work; if not, write to the Free Software Foundation, 17289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 19289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * or visit www.oracle.com if you need additional information or have any 21289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * questions. 22289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 23289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpackage org.openjdk.testlib.java.util.stream; 24289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 25289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.Collections; 26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.EnumSet; 27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.PrimitiveIterator; 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.Set; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.Spliterator; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Consumer; 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.DoubleConsumer; 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Function; 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.FlagDeclaringOp; 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.*; 37289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 38289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/** 39289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Test scenarios for double streams. 40289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 41289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Each scenario is provided with a data source, a function that maps a fresh 42289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * stream (as provided by the data source) to a new stream, and a sink to 43289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * receive results. Each scenario describes a different way of computing the 44289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * stream contents. The test driver will ensure that all scenarios produce 45289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * the same output (modulo allowable differences in ordering). 46289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 47289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin@SuppressWarnings({"rawtypes", "unchecked"}) 48289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpublic enum DoubleStreamTestScenario implements OpTestCase.BaseStreamTestScenario { 49289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 50289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_FOR_EACH_WITH_CLOSE(false) { 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 52289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 53289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStream s = m.apply(data.stream()); 54289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (s.isParallel()) { 55289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin s = s.sequential(); 56289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 57289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin s.forEach(b); 58289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin s.close(); 59289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 60289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 61289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 62289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_TO_ARRAY(false) { 63289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 64289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 65289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (double t : m.apply(data.stream()).toArray()) { 66289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(t); 67289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 68289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 69289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 70289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 71289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_ITERATOR(false) { 72289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 73289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 74289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (PrimitiveIterator.OfDouble seqIter = m.apply(data.stream()).iterator(); seqIter.hasNext(); ) 75289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(seqIter.nextDouble()); 76289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 77289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 78289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 79289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as stream, and spliterate then iterate in pull mode 80289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_SPLITERATOR(false) { 81289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 82289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 83289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Spliterator.OfDouble spl = m.apply(data.stream()).spliterator(); spl.tryAdvance(b); ) { 84289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 85289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 86289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 87289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 88289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as stream, spliterate, then split a few times mixing advances with forEach 89289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_SPLITERATOR_WITH_MIXED_TRAVERSE_AND_SPLIT(false) { 90289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 91289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 92289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin SpliteratorTestHelper.mixedTraverseAndSplit(b, m.apply(data.stream()).spliterator()); 93289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 94289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 95289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 96289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as stream, and spliterate then iterate in pull mode 97289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin STREAM_SPLITERATOR_FOREACH(false) { 98289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 99289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 100289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(data.stream()).spliterator().forEachRemaining(b); 101289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 102289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 103289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 104289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_SEQUENTIAL_FOR_EACH(true) { 105289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 106289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 107289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(data.parallelStream()).sequential().forEach(b); 108289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 109289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 110289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 111289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as parallel stream + forEachOrdered 112289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_FOR_EACH_ORDERED(true) { 113289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 114289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 115289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // @@@ Want to explicitly select ordered equalator 116289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(data.parallelStream()).forEachOrdered(b); 117289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 118289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 119289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 120289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as stream, and spliterate then iterate sequentially 121289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_SPLITERATOR(true) { 122289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 123289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 124289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Spliterator.OfDouble spl = m.apply(data.parallelStream()).spliterator(); spl.tryAdvance(b); ) { 125289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 126289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 127289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 128289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 129289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as stream, and spliterate then iterate sequentially 130289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_SPLITERATOR_FOREACH(true) { 131289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 132289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 133289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(data.parallelStream()).spliterator().forEachRemaining(b); 134289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 135289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 136289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 137289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_TO_ARRAY(true) { 138289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 139289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 140289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (double t : m.apply(data.parallelStream()).toArray()) 141289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(t); 142289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 143289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 144289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 145289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as parallel stream, get the spliterator, wrap as a stream + toArray 146289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_SPLITERATOR_STREAM_TO_ARRAY(true) { 147289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 148289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 149289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStream s = m.apply(data.parallelStream()); 150289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Spliterator.OfDouble sp = s.spliterator(); 151289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStream ss = StreamSupport.doubleStream(() -> sp, 152289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin StreamOpFlag.toCharacteristics(OpTestCase.getStreamFlags(s)) 153289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin | (sp.getExactSizeIfKnown() < 0 ? 0 : Spliterator.SIZED), true); 154289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (double t : ss.toArray()) 155289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(t); 156289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 157289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 158289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 159289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_TO_ARRAY_CLEAR_SIZED(true) { 160289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 161289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 162289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin S_IN pipe1 = (S_IN) OpTestCase.chain(data.parallelStream(), 163289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin new FlagDeclaringOp(StreamOpFlag.NOT_SIZED, data.getShape())); 164289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStream pipe2 = m.apply(pipe1); 165289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 166289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (double t : pipe2.toArray()) 167289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(t); 168289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 169289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 170289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 171289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as parallel stream + forEach synchronizing 172289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_FOR_EACH(true, false) { 173289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 174289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 175289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(data.parallelStream()).forEach(e -> { 176289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin synchronized (data) { 177289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(e); 178289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 179289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }); 180289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 181289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 182289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 183289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Wrap as parallel stream + forEach synchronizing and clear SIZED flag 184289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin PAR_STREAM_FOR_EACH_CLEAR_SIZED(true, false) { 185289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 186289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 187289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin S_IN pipe1 = (S_IN) OpTestCase.chain(data.parallelStream(), 188289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin new FlagDeclaringOp(StreamOpFlag.NOT_SIZED, data.getShape())); 189289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin m.apply(pipe1).forEach(e -> { 190289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin synchronized (data) { 191289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin b.accept(e); 192289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 193289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }); 194289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 195289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }, 196289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ; 197289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 198289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // The set of scenarios that clean the SIZED flag 199289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Set<DoubleStreamTestScenario> CLEAR_SIZED_SCENARIOS = Collections.unmodifiableSet( 200289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin EnumSet.of(PAR_STREAM_TO_ARRAY_CLEAR_SIZED, PAR_STREAM_FOR_EACH_CLEAR_SIZED)); 201289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 202289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private boolean isParallel; 203289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 204289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private final boolean isOrdered; 205289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 206289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStreamTestScenario(boolean isParallel) { 207289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this(isParallel, true); 208289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 209289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 210289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin DoubleStreamTestScenario(boolean isParallel, boolean isOrdered) { 211289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this.isParallel = isParallel; 212289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this.isOrdered = isOrdered; 213289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 214289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 215289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public StreamShape getShape() { 216289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return StreamShape.DOUBLE_VALUE; 217289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 218289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 219289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public boolean isParallel() { 220289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return isParallel; 221289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 222289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 223289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public boolean isOrdered() { 224289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return isOrdered; 225289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 226289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 227289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public <T, U, S_IN extends BaseStream<T, S_IN>, S_OUT extends BaseStream<U, S_OUT>> 228289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void run(TestData<T, S_IN> data, Consumer<U> b, Function<S_IN, S_OUT> m) { 229289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin _run(data, (DoubleConsumer) b, (Function<S_IN, DoubleStream>) m); 230289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 231289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 232289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin abstract <T, S_IN extends BaseStream<T, S_IN>> 233289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m); 234289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 235289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin} 236