1a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/* 2a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Copyright (c) 2013, 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 java.util.stream; 24a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 25a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Collections; 26a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.EnumSet; 27a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.PrimitiveIterator; 28a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Set; 29a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Spliterator; 30a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.Consumer; 31a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.DoubleConsumer; 32a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.Function; 33a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 34a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/** 35a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Test scenarios for double streams. 36a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 37a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Each scenario is provided with a data source, a function that maps a fresh 38a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * stream (as provided by the data source) to a new stream, and a sink to 39a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * receive results. Each scenario describes a different way of computing the 40a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * stream contents. The test driver will ensure that all scenarios produce 41a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * the same output (modulo allowable differences in ordering). 42a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin */ 43a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin@SuppressWarnings({"rawtypes", "unchecked"}) 44a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpublic enum DoubleStreamTestScenario implements OpTestCase.BaseStreamTestScenario { 45a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 46a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_FOR_EACH_WITH_CLOSE(false) { 47a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 48a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 49a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStream s = m.apply(data.stream()); 50a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin if (s.isParallel()) { 51a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin s = s.sequential(); 52a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 53a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin s.forEach(b); 54a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin s.close(); 55a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 56a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 57a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 58a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_TO_ARRAY(false) { 59a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 60a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 61a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (double t : m.apply(data.stream()).toArray()) { 62a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(t); 63a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 64a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 65a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 66a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 67a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_ITERATOR(false) { 68a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 69a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 70a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (PrimitiveIterator.OfDouble seqIter = m.apply(data.stream()).iterator(); seqIter.hasNext(); ) 71a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(seqIter.nextDouble()); 72a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 73a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 74a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 75a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as stream, and spliterate then iterate in pull mode 76a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_SPLITERATOR(false) { 77a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 78a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 79a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (Spliterator.OfDouble spl = m.apply(data.stream()).spliterator(); spl.tryAdvance(b); ) { 80a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 81a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 82a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 83a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 84a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as stream, spliterate, then split a few times mixing advances with forEach 85a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_SPLITERATOR_WITH_MIXED_TRAVERSE_AND_SPLIT(false) { 86a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 87a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 88a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin SpliteratorTestHelper.mixedTraverseAndSplit(b, m.apply(data.stream()).spliterator()); 89a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 90a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 91a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 92a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as stream, and spliterate then iterate in pull mode 93a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin STREAM_SPLITERATOR_FOREACH(false) { 94a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 95a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 96a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(data.stream()).spliterator().forEachRemaining(b); 97a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 98a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 99a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 100a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_SEQUENTIAL_FOR_EACH(true) { 101a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 102a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 103a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(data.parallelStream()).sequential().forEach(b); 104a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 105a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 106a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 107a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as parallel stream + forEachOrdered 108a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_FOR_EACH_ORDERED(true) { 109a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 110a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 111a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // @@@ Want to explicitly select ordered equalator 112a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(data.parallelStream()).forEachOrdered(b); 113a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 114a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 115a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 116a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as stream, and spliterate then iterate sequentially 117a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_SPLITERATOR(true) { 118a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 119a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 120a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (Spliterator.OfDouble spl = m.apply(data.parallelStream()).spliterator(); spl.tryAdvance(b); ) { 121a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 122a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 123a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 124a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 125a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as stream, and spliterate then iterate sequentially 126a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_SPLITERATOR_FOREACH(true) { 127a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 128a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 129a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(data.parallelStream()).spliterator().forEachRemaining(b); 130a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 131a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 132a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 133a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_TO_ARRAY(true) { 134a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 135a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 136a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (double t : m.apply(data.parallelStream()).toArray()) 137a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(t); 138a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 139a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 140a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 141a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as parallel stream, get the spliterator, wrap as a stream + toArray 142a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_SPLITERATOR_STREAM_TO_ARRAY(true) { 143a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 144a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 145a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStream s = m.apply(data.parallelStream()); 146a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin Spliterator.OfDouble sp = s.spliterator(); 147a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStream ss = StreamSupport.doubleStream(() -> sp, 148a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin StreamOpFlag.toCharacteristics(OpTestCase.getStreamFlags(s)) 149a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin | (sp.getExactSizeIfKnown() < 0 ? 0 : Spliterator.SIZED), true); 150a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (double t : ss.toArray()) 151a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(t); 152a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 153a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 154a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 155a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_TO_ARRAY_CLEAR_SIZED(true) { 156a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 157a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 158a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin S_IN pipe1 = (S_IN) OpTestCase.chain(data.parallelStream(), 159a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin new FlagDeclaringOp(StreamOpFlag.NOT_SIZED, data.getShape())); 160a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStream pipe2 = m.apply(pipe1); 161a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 162a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin for (double t : pipe2.toArray()) 163a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(t); 164a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 165a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 166a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 167a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as parallel stream + forEach synchronizing 168a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_FOR_EACH(true, false) { 169a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 170a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 171a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(data.parallelStream()).forEach(e -> { 172a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin synchronized (data) { 173a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(e); 174a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 175a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }); 176a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 177a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 178a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 179a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // Wrap as parallel stream + forEach synchronizing and clear SIZED flag 180a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin PAR_STREAM_FOR_EACH_CLEAR_SIZED(true, false) { 181a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin <T, S_IN extends BaseStream<T, S_IN>> 182a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m) { 183a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin S_IN pipe1 = (S_IN) OpTestCase.chain(data.parallelStream(), 184a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin new FlagDeclaringOp(StreamOpFlag.NOT_SIZED, data.getShape())); 185a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin m.apply(pipe1).forEach(e -> { 186a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin synchronized (data) { 187a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin b.accept(e); 188a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 189a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }); 190a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 191a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin }, 192a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin ; 193a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 194a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin // The set of scenarios that clean the SIZED flag 195a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public static final Set<DoubleStreamTestScenario> CLEAR_SIZED_SCENARIOS = Collections.unmodifiableSet( 196a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin EnumSet.of(PAR_STREAM_TO_ARRAY_CLEAR_SIZED, PAR_STREAM_FOR_EACH_CLEAR_SIZED)); 197a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 198a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private boolean isParallel; 199a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 200a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin private final boolean isOrdered; 201a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 202a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStreamTestScenario(boolean isParallel) { 203a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin this(isParallel, true); 204a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 205a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 206a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin DoubleStreamTestScenario(boolean isParallel, boolean isOrdered) { 207a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin this.isParallel = isParallel; 208a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin this.isOrdered = isOrdered; 209a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 210a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 211a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public StreamShape getShape() { 212a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return StreamShape.DOUBLE_VALUE; 213a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 214a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 215a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public boolean isParallel() { 216a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return isParallel; 217a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 218a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 219a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public boolean isOrdered() { 220a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin return isOrdered; 221a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 222a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 223a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin public <T, U, S_IN extends BaseStream<T, S_IN>, S_OUT extends BaseStream<U, S_OUT>> 224a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void run(TestData<T, S_IN> data, Consumer<U> b, Function<S_IN, S_OUT> m) { 225a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin _run(data, (DoubleConsumer) b, (Function<S_IN, DoubleStream>) m); 226a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin } 227a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 228a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin abstract <T, S_IN extends BaseStream<T, S_IN>> 229a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin void _run(TestData<T, S_IN> data, DoubleConsumer b, Function<S_IN, DoubleStream> m); 230a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin 231a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin} 232