1289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/* 2289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Copyright (c) 2012, 2013, 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 org.testng.Assert; 26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.Spliterator; 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntFunction; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.*; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/** Test helper class for java.util.stream test framework */ 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpublic final class CollectorOps { 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private CollectorOps() { } 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <E_IN> StatefulTestOp<E_IN> collector() { 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new StatefulCollector<>(0, StreamShape.REFERENCE); 37289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 38289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 39289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin /* Utility classes for collecting output of intermediate pipeline stages */ 40289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static class StatefulCollector<E_IN> implements StatefulTestOp<E_IN> { 41289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private final int opFlags; 42289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private final StreamShape inputShape; 43289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 44289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public StatefulCollector(int opFlags, StreamShape inputShape) { 45289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this.opFlags = opFlags; 46289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this.inputShape = inputShape; 47289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 48289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 49289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 50289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public StreamShape inputShape() { 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return inputShape; 52289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 53289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 54289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 55289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public StreamShape outputShape() { 56289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return inputShape; 57289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 58289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 59289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 60289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public int opGetFlags() { 61289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return opFlags; 62289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 63289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 64289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 65289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public Sink<E_IN> opWrapSink(int flags, boolean parallel, Sink<E_IN> sink) { 66289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return sink; 67289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 68289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 69289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 70289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public <P_IN> Node<E_IN> opEvaluateParallel(PipelineHelper<E_IN> helper, 71289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Spliterator<P_IN> spliterator, 72289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin IntFunction<E_IN[]> generator) { 73289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return helper.evaluate(spliterator, false, generator); 74289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 75289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 76289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 77289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static class TestParallelSizedOp<T> extends StatefulCollector<T> { 78289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public TestParallelSizedOp() { 79289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin this(StreamShape.REFERENCE); 80289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 81289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 82289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin protected TestParallelSizedOp(StreamShape shape) { 83289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin super(0, shape); 84289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 85289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 86289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 87289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public <P_IN> Node<T> opEvaluateParallel(PipelineHelper<T> helper, 88289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Spliterator<P_IN> spliterator, 89289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin IntFunction<T[]> generator) { 90289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin int flags = helper.getStreamAndOpFlags(); 91289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 92289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Assert.assertTrue(StreamOpFlag.SIZED.isKnown(flags)); 93289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return super.opEvaluateParallel(helper, spliterator, generator); 94289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 95289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 96289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static class OfInt extends TestParallelSizedOp<Integer> { 97289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public OfInt() { 98289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin super(StreamShape.INT_VALUE); 99289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 100289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 101289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 102289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static class OfLong extends TestParallelSizedOp<Long> { 103289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public OfLong() { 104289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin super(StreamShape.LONG_VALUE); 105289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 106289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 107289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 108289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static class OfDouble extends TestParallelSizedOp<Double> { 109289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public OfDouble() { 110289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin super(StreamShape.DOUBLE_VALUE); 111289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 112289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 113289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 114289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin} 115