1289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/* 2289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Copyright (c) 1997, 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 java.util.*; 26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.*; 27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.BiConsumer; 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.BiPredicate; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.BinaryOperator; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Consumer; 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.DoubleBinaryOperator; 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.DoubleConsumer; 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.DoublePredicate; 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Function; 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntBinaryOperator; 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntConsumer; 37289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntFunction; 38289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntPredicate; 39289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.IntUnaryOperator; 40289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.LongBinaryOperator; 41289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.LongConsumer; 42289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.LongPredicate; 43289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Predicate; 44289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Supplier; 45289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.ToDoubleFunction; 46289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.ToIntFunction; 47289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.ToLongFunction; 48289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 49289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport static org.testng.Assert.assertEquals; 50289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport static org.testng.Assert.assertTrue; 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 52289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/** 53289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * LambdaTestHelpers -- assertion methods and useful objects for lambda test cases 54289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 55289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpublic class LambdaTestHelpers { 56289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final String LONG_STRING = "When in the Course of human events it becomes necessary for one people to dissolve the political bands which have connected them with another and to assume among the powers of the earth, the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation."; 57289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 58289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("rawtypes") 59289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Consumer bEmpty = x -> { }; 60289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("rawtypes") 61289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntConsumer bIntEmpty = x -> { }; 62289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("rawtypes") 63289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiConsumer bBiEmpty = (x,y) -> { }; 64289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("rawtypes") 65289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Consumer bHashCode = x -> { Objects.hashCode(x); }; 66289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("rawtypes") 67289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiConsumer bBiHashCode = (x,y) -> { Objects.hash(x, y); }; 68289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Integer> mZero = x -> 0; 69289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Integer> mId = x -> x; 70289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Integer> mDoubler = x -> x * 2; 71289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Stream<Integer>> mfId = e -> Collections.singletonList(e).stream(); 72289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Stream<Integer>> mfNull = e -> Collections.<Integer>emptyList().stream(); 73289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<Integer, Stream<Integer>> mfLt = e -> { 74289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Integer> l = new ArrayList<>(); 75289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i=0; i<e; i++) 76289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin l.add(i); 77289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return l.stream(); 78289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 79289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final ToIntFunction<Integer> imDoubler = x -> x * 2; 80289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final ToLongFunction<Long> lmDoubler = x -> x * 2; 81289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final ToDoubleFunction<Double> dmDoubler = x -> x * 2; 82289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Predicate<Integer> pFalse = x -> false; 83289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Predicate<Integer> pTrue = x -> true; 84289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Predicate<Integer> pEven = x -> 0 == x % 2; 85289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Predicate<Integer> pOdd = x -> 1 == x % 2; 86289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntPredicate ipFalse = x -> false; 87289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntPredicate ipTrue = x -> true; 88289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntPredicate ipEven = x -> 0 == x % 2; 89289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntPredicate ipOdd = x -> 1 == x % 2; 90289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final LongPredicate lpFalse = x -> false; 91289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final LongPredicate lpTrue = x -> true; 92289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final LongPredicate lpEven = x -> 0 == x % 2; 93289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final LongPredicate lpOdd = x -> 1 == x % 2; 94289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final DoublePredicate dpFalse = x -> false; 95289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final DoublePredicate dpTrue = x -> true; 96289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final DoublePredicate dpEven = x -> 0 == ((long) x) % 2; 97289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final DoublePredicate dpOdd = x -> 1 == ((long) x) % 2; 98289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BinaryOperator<Integer> rPlus = (x, y) -> x+y; 99289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BinaryOperator<Integer> rMax = (x, y) -> Math.max(x, y); 100289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BinaryOperator<Integer> rMin = (x, y) -> Math.min(x,y); 101289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntBinaryOperator irPlus = (x, y) -> x+y; 102289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntBinaryOperator irMax = (x, y) -> Math.max(x, y); 103289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntBinaryOperator irMin = (x, y) -> Math.min(x,y); 104289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntUnaryOperator irDoubler = x -> x * 2; 105289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final LongBinaryOperator lrPlus = (x, y) -> x+y; 106289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final DoubleBinaryOperator drPlus = (x, y) -> x+y; 107289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Comparator<Integer> cInteger = (a, b) -> Integer.compare(a, b); 108289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiPredicate<?, ?> bipFalse = (x, y) -> false; 109289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiPredicate<?, ?> bipTrue = (x, y) -> true; 110289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiPredicate<Integer, Integer> bipBothEven = (x, y) -> 0 == (x % 2 + y % 2); 111289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiPredicate<Integer, Integer> bipBothOdd = (x, y) -> 2 == (x % 2 + y % 2); 112289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final BiPredicate<?, ?> bipSameString = (x, y) -> String.valueOf(x).equals(String.valueOf(y)); 113289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 114289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntFunction<Integer[]> integerArrayGenerator = s -> new Integer[s]; 115289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 116289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final IntFunction<Object[]> objectArrayGenerator = s -> new Object[s]; 117289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 118289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<String, Stream<Character>> flattenChars = string -> { 119289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Character> l = new ArrayList<>(); 120289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i=0; i<string.length(); i++) 121289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin l.add(string.charAt(i)); 122289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return l.stream(); 123289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 124289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 125289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static final Function<String, IntStream> flattenInt 126289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin = string -> IntStream.range(0, string.length()).map(string::charAt); 127289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 128289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <T, R> Function<T, R> forPredicate(Predicate<? super T> predicate, R forTrue, R forFalse) { 129289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Objects.requireNonNull(predicate); 130289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 131289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return t -> predicate.test(t) ? forTrue : forFalse; 132289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 133289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 134289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <T> Function<T, T> identity() { 135289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return t -> t; 136289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 137289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 138289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<V, T, R> Function<V, R> compose(Function<? super T, ? extends R> after, Function<? super V, ? extends T> before) { 139289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Objects.requireNonNull(before); 140289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return (V v) -> after.apply(before.apply(v)); 141289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 142289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 143289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Integer> empty() { 144289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ArrayList<Integer> list = new ArrayList<>(); 145289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(null); 146289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return list; 147289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 148289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 149289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Integer> countTo(int n) { 150289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return range(1, n); 151289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 152289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 153289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Integer> range(int l, int u) { 154289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ArrayList<Integer> list = new ArrayList<>(u - l + 1); 155289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i=l; i<=u; i++) { 156289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(i); 157289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 158289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return list; 159289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 160289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 161289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Integer> repeat(int value, int n) { 162289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ArrayList<Integer> list = new ArrayList<>(n); 163289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i=1; i<=n; i++) { 164289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(value); 165289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 166289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return list; 167289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 168289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 169289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Double> asDoubles(List<Integer> integers) { 170289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ArrayList<Double> list = new ArrayList<>(); 171289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Integer i : integers) { 172289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add((double) i); 173289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 174289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return list; 175289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 176289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 177289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static List<Long> asLongs(List<Integer> integers) { 178289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ArrayList<Long> list = new ArrayList<>(); 179289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Integer i : integers) { 180289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add((long) i); 181289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 182289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return list; 183289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 184289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 185289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void assertCountSum(Stream<? super Integer> it, int count, int sum) { 186289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertCountSum(it.iterator(), count, sum); 187289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 188289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 189289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void assertCountSum(Iterable<? super Integer> it, int count, int sum) { 190289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertCountSum(it.iterator(), count, sum); 191289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 192289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 193289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void assertCountSum(Iterator<? super Integer> it, int count, int sum) { 194289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin int c = 0; 195289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin int s = 0; 196289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin while (it.hasNext()) { 197289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin int i = (Integer) it.next(); 198289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin c++; 199289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin s += i; 200289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 201289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 202289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(c, count); 203289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(s, sum); 204289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 205289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 206289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void assertConcat(Iterator<Character> it, String result) { 207289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin StringBuilder sb = new StringBuilder(); 208289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin while (it.hasNext()) { 209289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin sb.append(it.next()); 210289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 211289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 212289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(result, sb.toString()); 213289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 214289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 215289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T extends Comparable<? super T>> void assertSorted(Iterator<T> i) { 216289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin i = toBoxedList(i).iterator(); 217289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 218289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (!i.hasNext()) 219289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return; 220289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin T last = i.next(); 221289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin while (i.hasNext()) { 222289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin T t = i.next(); 223289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertTrue(last.compareTo(t) <= 0); 224289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertTrue(t.compareTo(last) >= 0); 225289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin last = t; 226289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 227289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 228289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 229289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertSorted(Iterator<T> i, Comparator<? super T> comp) { 230289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (i instanceof PrimitiveIterator.OfInt 231289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin || i instanceof PrimitiveIterator.OfDouble 232289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin || i instanceof PrimitiveIterator.OfLong) { 233289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin i = toBoxedList(i).iterator(); 234289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 235289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 236289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (!i.hasNext()) 237289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return; 238289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin T last = i.next(); 239289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin while (i.hasNext()) { 240289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin T t = i.next(); 241289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertTrue(comp.compare(last, t) <= 0); 242289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertTrue(comp.compare(t, last) >= 0); 243289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin last = t; 244289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 245289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 246289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 247289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T extends Comparable<? super T>> void assertSorted(Iterable<T> iter) { 248289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertSorted(iter.iterator()); 249289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 250289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 251289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertSorted(Iterable<T> iter, Comparator<? super T> comp) { 252289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertSorted(iter.iterator(), comp); 253289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 254289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 255289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <T> void assertUnique(Iterable<T> iter) { 256289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertUnique(iter.iterator()); 257289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 258289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 259289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertUnique(Iterator<T> iter) { 260289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (!iter.hasNext()) { 261289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return; 262289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 263289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 264289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (iter instanceof PrimitiveIterator.OfInt 265289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin || iter instanceof PrimitiveIterator.OfDouble 266289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin || iter instanceof PrimitiveIterator.OfLong) { 267289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin iter = toBoxedList(iter).iterator(); 268289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 269289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 270289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Set<T> uniq = new HashSet<>(); 271289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin while(iter.hasNext()) { 272289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin T each = iter.next(); 273289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertTrue(!uniq.contains(each), "Not unique"); 274289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin uniq.add(each); 275289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 276289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 277289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 278289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertContents(Iterable<T> actual, Iterable<T> expected) { 279289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (actual instanceof Collection && expected instanceof Collection) { 280289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(actual, expected); 281289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } else { 282289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertContents(actual.iterator(), expected.iterator()); 283289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 284289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 285289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 286289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertContents(Iterator<T> actual, Iterator<T> expected) { 287289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(toBoxedList(actual), toBoxedList(expected)); 288289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 289289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 290289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SafeVarargs 291289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("varargs") 292289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertContents(Iterator<T> actual, T... expected) { 293289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertContents(actual, Arrays.asList(expected).iterator()); 294289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 295289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 296289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin /** 297289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * The all consuming consumer (rampant capitalist) that can accepting a reference or any primitive value. 298289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 299289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static interface OmnivorousConsumer<T> 300289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin extends Consumer<T>, IntConsumer, LongConsumer, DoubleConsumer { } 301289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 302289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings({"rawtypes", "unchecked"}) 303289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> Consumer<T> toBoxingConsumer(Consumer<? super T> c) { 304289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return (Consumer<T>) new OmnivorousConsumer() { 305289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 306289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public void accept(Object t) { 307289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin c.accept((T) t); 308289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 309289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 310289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 311289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public void accept(int t) { 312289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin accept((Object) t); 313289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 314289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 315289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 316289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public void accept(long t) { 317289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin accept((Object) t); 318289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 319289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 320289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @Override 321289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public void accept(double t) { 322289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin accept((Object) t); 323289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 324289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 325289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 326289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 327289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin /** 328289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Convert an iterator to a list using forEach with an implementation of 329289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}. 330289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 331289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This ensures equality comparisons for test results do not trip 332289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * the boxing trip-wires. 333289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 334289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static<T> List<T> toBoxedList(Iterator<T> it) { 335289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<T> l = new ArrayList<>(); 336289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin it.forEachRemaining(toBoxingConsumer(l::add)); 337289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return l; 338289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 339289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 340289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin /** 341289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Convert a spliterator to a list using forEach with an implementation of 342289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}. 343289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 344289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This ensures equality comparisons for test results do not trip 345289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * the boxing trip-wires. 346289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 347289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> List<T> toBoxedList(Spliterator<T> sp) { 348289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<T> l = new ArrayList<>(); 349289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin sp.forEachRemaining(toBoxingConsumer(l::add)); 350289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return l; 351289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 352289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 353289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin /** 354289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Convert an iterator to a multi-set, represented as a Map, using forEach with an implementation of 355289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}. 356289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 357289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This ensures equality comparisons for test results do not trip 358289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * the boxing trip-wires. 359289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 360289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("unchecked") 361289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static<T> Map<T, Integer> toBoxedMultiset(Iterator<T> it) { 362289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Map<Object, Integer> result = new HashMap<>(); 363289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 364289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin it.forEachRemaining(toBoxingConsumer(o -> { 365289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (result.containsKey(o)) 366289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.put(o, result.get(o) + 1); 367289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin else 368289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.put(o, 1); 369289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin })); 370289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 371289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return (Map<T, Integer>) result; 372289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 373289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 374289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("unchecked") 375289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> Map<T, Integer> toBoxedMultiset(Spliterator<T> it) { 376289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Map<Object, Integer> result = new HashMap<>(); 377289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 378289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin it.forEachRemaining(toBoxingConsumer(o -> { 379289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (result.containsKey(o)) 380289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.put(o, result.get(o) + 1); 381289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin else 382289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.put(o, 1); 383289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin })); 384289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 385289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return (Map<T, Integer>) result; 386289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 387289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 388289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @SuppressWarnings("unchecked") 389289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void assertContentsEqual(Object a, Object b) { 390289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (a instanceof Iterable && b instanceof Iterable) 391289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertContents((Iterable) a, (Iterable) b); 392289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin else 393289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(a, b); 394289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 395289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 396289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertContentsUnordered(Iterable<T> actual, Iterable<T> expected) { 397289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertContentsUnordered(actual.iterator(), expected.iterator()); 398289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 399289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 400289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static<T> void assertContentsUnordered(Iterator<T> actual, Iterator<T> expected) { 401289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin assertEquals(toBoxedMultiset(actual), toBoxedMultiset(expected)); 402289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 403289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 404289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static void launderAssertion(Runnable r, Supplier<String> additionalInfo) { 405289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin try { 406289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin r.run(); 407289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 408289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin catch (AssertionError ae) { 409289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin AssertionError cloned = new AssertionError(ae.getMessage() + String.format("%n%s", additionalInfo.get())); 410289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin cloned.setStackTrace(ae.getStackTrace()); 411289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (ae.getCause() != null) 412289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin cloned.initCause(ae.getCause()); 413289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin throw cloned; 414289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 415289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 416289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 417289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <T, S extends BaseStream<T, S>> 418289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Function<S, S>> permuteStreamFunctions(List<Function<S, S>> opFunctions) { 419289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<List<Function<S, S>>> opFunctionPermutations = perm(opFunctions); 420289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 421289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Function<S, S>> appliedFunctions = new ArrayList<>(); 422289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (List<Function<S, S>> fs : opFunctionPermutations) { 423289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin Function<S, S> applied = s -> { 424289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Function<S, S> f : fs) { 425289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin s = f.apply(s); 426289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 427289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return s; 428289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 429289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin appliedFunctions.add(applied); 430289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 431289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 432289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return appliedFunctions; 433289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 434289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 435289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static <T> List<T> sub(List<T> l, int index) { 436289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<T> subL = new ArrayList<>(l); 437289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin subL.remove(index); 438289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return subL; 439289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 440289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 441289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static <T> List<List<T>> perm(List<T> l) { 442289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<List<T>> result = new ArrayList<>(); 443289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i = 0; i < l.size(); i++) { 444289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (List<T> perm : perm(sub(l, i))) { 445289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin perm.add(0, l.get(i)); 446289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.add(perm); 447289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 448289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 449289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin result.add(new ArrayList<T>()); 450289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 451289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return result; 452289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 453289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 454289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static String flagsToString(int flags) { 455289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin StringJoiner sj = new StringJoiner(", ", "StreamOpFlag[", "]"); 456289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (StreamOpFlag.DISTINCT.isKnown(flags)) sj.add("IS_DISTINCT"); 457289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (StreamOpFlag.ORDERED.isKnown(flags)) sj.add("IS_ORDERED"); 458289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (StreamOpFlag.SIZED.isKnown(flags)) sj.add("IS_SIZED"); 459289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (StreamOpFlag.SORTED.isKnown(flags)) sj.add("IS_SORTED"); 460289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin if (StreamOpFlag.SHORT_CIRCUIT.isKnown(flags)) sj.add("IS_SHORT_CIRCUIT"); 461289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return sj.toString(); 462289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 463289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin} 464