test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/LambdaTestHelpers.java
author redestad
Wed, 10 Jan 2018 00:08:46 +0100
changeset 48453 37d2147852fc
parent 47216 71c04702a3d5
permissions -rw-r--r--
8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out Reviewed-by: psandoz, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     1
/*
35713
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
     2
 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     4
 *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     7
 * published by the Free Software Foundation.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     8
 *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    13
 * accompanied this code).
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    14
 *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    18
 *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    21
 * questions.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    22
 */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    23
package java.util.stream;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    24
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    25
import java.util.*;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    26
import java.util.function.BiConsumer;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    27
import java.util.function.BiPredicate;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    28
import java.util.function.BinaryOperator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    29
import java.util.function.Consumer;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    30
import java.util.function.DoubleBinaryOperator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    31
import java.util.function.DoubleConsumer;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    32
import java.util.function.DoublePredicate;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    33
import java.util.function.Function;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    34
import java.util.function.IntBinaryOperator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    35
import java.util.function.IntConsumer;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    36
import java.util.function.IntFunction;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    37
import java.util.function.IntPredicate;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    38
import java.util.function.IntUnaryOperator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    39
import java.util.function.LongBinaryOperator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    40
import java.util.function.LongConsumer;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    41
import java.util.function.LongPredicate;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    42
import java.util.function.Predicate;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    43
import java.util.function.Supplier;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    44
import java.util.function.ToDoubleFunction;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    45
import java.util.function.ToIntFunction;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    46
import java.util.function.ToLongFunction;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    47
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    48
import static org.testng.Assert.assertEquals;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    49
import static org.testng.Assert.assertTrue;
35713
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
    50
import static org.testng.Assert.assertFalse;
48453
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
    51
import static org.testng.Assert.fail;
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    52
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    53
/**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    54
 * LambdaTestHelpers -- assertion methods and useful objects for lambda test cases
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    55
 */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    56
public class LambdaTestHelpers {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    57
    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.";
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    58
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    59
    @SuppressWarnings("rawtypes")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    60
    public static final Consumer bEmpty = x -> {  };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    61
    @SuppressWarnings("rawtypes")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    62
    public static final IntConsumer bIntEmpty = x -> {  };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    63
    @SuppressWarnings("rawtypes")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    64
    public static final BiConsumer bBiEmpty = (x,y) -> { };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    65
    @SuppressWarnings("rawtypes")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    66
    public static final Consumer bHashCode = x -> { Objects.hashCode(x); };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    67
    @SuppressWarnings("rawtypes")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    68
    public static final BiConsumer bBiHashCode = (x,y) -> { Objects.hash(x, y); };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    69
    public static final Function<Integer, Integer> mZero = x -> 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    70
    public static final Function<Integer, Integer> mId = x -> x;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    71
    public static final Function<Integer, Integer> mDoubler = x -> x * 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    72
    public static final Function<Integer, Stream<Integer>> mfId = e -> Collections.singletonList(e).stream();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    73
    public static final Function<Integer, Stream<Integer>> mfNull = e -> Collections.<Integer>emptyList().stream();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    74
    public static final Function<Integer, Stream<Integer>> mfLt = e -> {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    75
        List<Integer> l = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    76
        for (int i=0; i<e; i++)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    77
            l.add(i);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    78
        return l.stream();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    79
    };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    80
    public static final ToIntFunction<Integer> imDoubler = x -> x * 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    81
    public static final ToLongFunction<Long> lmDoubler = x -> x * 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    82
    public static final ToDoubleFunction<Double> dmDoubler = x -> x * 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    83
    public static final Predicate<Integer> pFalse = x -> false;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    84
    public static final Predicate<Integer> pTrue = x -> true;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    85
    public static final Predicate<Integer> pEven = x -> 0 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    86
    public static final Predicate<Integer> pOdd = x -> 1 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    87
    public static final IntPredicate ipFalse = x -> false;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    88
    public static final IntPredicate ipTrue = x -> true;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    89
    public static final IntPredicate ipEven = x -> 0 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    90
    public static final IntPredicate ipOdd = x -> 1 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    91
    public static final LongPredicate lpFalse = x -> false;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    92
    public static final LongPredicate lpTrue = x -> true;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    93
    public static final LongPredicate lpEven = x -> 0 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    94
    public static final LongPredicate lpOdd = x -> 1 == x % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    95
    public static final DoublePredicate dpFalse = x -> false;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    96
    public static final DoublePredicate dpTrue = x -> true;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    97
    public static final DoublePredicate dpEven = x -> 0 == ((long) x) % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    98
    public static final DoublePredicate dpOdd = x -> 1 == ((long) x) % 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    99
    public static final BinaryOperator<Integer> rPlus = (x, y) -> x+y;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   100
    public static final BinaryOperator<Integer> rMax = (x, y) -> Math.max(x, y);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   101
    public static final BinaryOperator<Integer> rMin = (x, y) -> Math.min(x,y);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   102
    public static final IntBinaryOperator irPlus = (x, y) -> x+y;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   103
    public static final IntBinaryOperator irMax = (x, y) -> Math.max(x, y);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   104
    public static final IntBinaryOperator irMin = (x, y) -> Math.min(x,y);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   105
    public static final IntUnaryOperator irDoubler = x -> x * 2;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   106
    public static final LongBinaryOperator lrPlus = (x, y) -> x+y;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   107
    public static final DoubleBinaryOperator drPlus = (x, y) -> x+y;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   108
    public static final Comparator<Integer> cInteger = (a, b) -> Integer.compare(a, b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   109
    public static final BiPredicate<?, ?> bipFalse = (x, y) -> false;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   110
    public static final BiPredicate<?, ?> bipTrue = (x, y) -> true;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   111
    public static final BiPredicate<Integer, Integer> bipBothEven = (x, y) -> 0 == (x % 2 + y % 2);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   112
    public static final BiPredicate<Integer, Integer> bipBothOdd = (x, y) -> 2 == (x % 2 + y % 2);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   113
    public static final BiPredicate<?, ?> bipSameString = (x, y) -> String.valueOf(x).equals(String.valueOf(y));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   114
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   115
    public static final IntFunction<Integer[]> integerArrayGenerator = s -> new Integer[s];
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   116
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   117
    public static final IntFunction<Object[]> objectArrayGenerator = s -> new Object[s];
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   118
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   119
    public static final Function<String, Stream<Character>> flattenChars = string -> {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   120
        List<Character> l = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   121
        for (int i=0; i<string.length(); i++)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   122
            l.add(string.charAt(i));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   123
        return l.stream();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   124
    };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   125
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   126
    public static final Function<String, IntStream> flattenInt
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   127
            = string -> IntStream.range(0, string.length()).map(string::charAt);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   128
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   129
    public static <T, R> Function<T, R> forPredicate(Predicate<? super T> predicate, R forTrue, R forFalse) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   130
        Objects.requireNonNull(predicate);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   131
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   132
        return t -> predicate.test(t) ? forTrue : forFalse;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   133
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   134
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   135
    public static <T> Function<T, T> identity() {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   136
        return t -> t;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   137
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   138
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   139
    public static<V, T, R> Function<V, R> compose(Function<? super T, ? extends R> after, Function<? super V, ? extends T> before) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   140
        Objects.requireNonNull(before);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   141
        return (V v) -> after.apply(before.apply(v));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   142
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   143
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   144
    public static List<Integer> empty() {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   145
        ArrayList<Integer> list = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   146
        list.add(null);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   147
        return list;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   148
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   149
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   150
    public static List<Integer> countTo(int n) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   151
        return range(1, n);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   152
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   153
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   154
    public static List<Integer> range(int l, int u) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   155
        ArrayList<Integer> list = new ArrayList<>(u - l + 1);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   156
        for (int i=l; i<=u; i++) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   157
            list.add(i);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   158
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   159
        return list;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   160
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   161
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   162
    public static List<Integer> repeat(int value, int n) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   163
        ArrayList<Integer> list = new ArrayList<>(n);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   164
        for (int i=1; i<=n; i++) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   165
            list.add(value);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   166
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   167
        return list;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   168
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   169
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   170
    public static List<Double> asDoubles(List<Integer> integers) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   171
        ArrayList<Double> list = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   172
        for (Integer i : integers) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   173
            list.add((double) i);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   174
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   175
        return list;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   176
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   177
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   178
    public static List<Long> asLongs(List<Integer> integers) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   179
        ArrayList<Long> list = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   180
        for (Integer i : integers) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   181
            list.add((long) i);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   182
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   183
        return list;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   184
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   185
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   186
    public static void assertCountSum(Stream<? super Integer> it, int count, int sum) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   187
        assertCountSum(it.iterator(), count, sum);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   188
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   189
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   190
    public static void assertCountSum(Iterable<? super Integer> it, int count, int sum) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   191
        assertCountSum(it.iterator(), count, sum);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   192
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   193
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   194
    public static void assertCountSum(Iterator<? super Integer> it, int count, int sum) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   195
        int c = 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   196
        int s = 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   197
        while (it.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   198
            int i = (Integer) it.next();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   199
            c++;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   200
            s += i;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   201
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   202
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   203
        assertEquals(c, count);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   204
        assertEquals(s, sum);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   205
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   206
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   207
    public static void assertConcat(Iterator<Character> it, String result) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   208
        StringBuilder sb = new StringBuilder();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   209
        while (it.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   210
            sb.append(it.next());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   211
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   212
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   213
        assertEquals(result, sb.toString());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   214
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   215
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   216
    public static<T extends Comparable<? super T>> void assertSorted(Iterator<T> i) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   217
        i = toBoxedList(i).iterator();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   218
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   219
        if (!i.hasNext())
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   220
            return;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   221
        T last = i.next();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   222
        while (i.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   223
            T t = i.next();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   224
            assertTrue(last.compareTo(t) <= 0);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   225
            assertTrue(t.compareTo(last) >= 0);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   226
            last = t;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   227
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   228
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   229
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   230
    public static<T> void assertSorted(Iterator<T> i, Comparator<? super T> comp) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   231
        if (i instanceof PrimitiveIterator.OfInt
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   232
                || i instanceof PrimitiveIterator.OfDouble
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   233
                || i instanceof PrimitiveIterator.OfLong) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   234
            i = toBoxedList(i).iterator();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   235
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   236
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   237
        if (!i.hasNext())
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   238
            return;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   239
        T last = i.next();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   240
        while (i.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   241
            T t = i.next();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   242
            assertTrue(comp.compare(last, t) <= 0);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   243
            assertTrue(comp.compare(t, last) >= 0);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   244
            last = t;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   245
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   246
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   247
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   248
    public static<T extends Comparable<? super T>> void assertSorted(Iterable<T> iter) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   249
        assertSorted(iter.iterator());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   250
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   251
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   252
    public static<T> void assertSorted(Iterable<T> iter, Comparator<? super T> comp) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   253
        assertSorted(iter.iterator(), comp);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   254
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   255
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   256
    public static <T> void assertUnique(Iterable<T> iter) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   257
        assertUnique(iter.iterator());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   258
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   259
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   260
    public static<T> void assertUnique(Iterator<T> iter) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   261
        if (!iter.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   262
            return;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   263
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   264
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   265
        if (iter instanceof PrimitiveIterator.OfInt
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   266
            || iter instanceof PrimitiveIterator.OfDouble
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   267
            || iter instanceof PrimitiveIterator.OfLong) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   268
            iter = toBoxedList(iter).iterator();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   269
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   270
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   271
        Set<T> uniq = new HashSet<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   272
        while(iter.hasNext()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   273
            T each = iter.next();
18529
930f51c90ea7 8016455: Sync stream tests from lambda to tl
psandoz
parents: 17442
diff changeset
   274
            assertTrue(!uniq.contains(each), "Not unique");
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   275
            uniq.add(each);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   276
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   277
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   278
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   279
    public static<T> void assertContents(Iterable<T> actual, Iterable<T> expected) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   280
        if (actual instanceof Collection && expected instanceof Collection) {
48453
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   281
            assertIterableEquals(actual, expected);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   282
        } else {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   283
            assertContents(actual.iterator(), expected.iterator());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   284
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   285
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   286
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   287
    public static<T> void assertContents(Iterator<T> actual, Iterator<T> expected) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   288
        assertEquals(toBoxedList(actual), toBoxedList(expected));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   289
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   290
48453
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   291
    // Workaround excessive String creation in inner loop in org.testng.Assert.assertEquals(Iterable<?>, Iterable<?>)
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   292
    static public void assertIterableEquals(Iterable<?> actual, Iterable<?> expected) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   293
        if(actual == expected) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   294
            return;
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   295
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   296
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   297
        if(actual == null || expected == null) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   298
            fail("Iterables not equal: expected: " + expected + " and actual: " + actual);
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   299
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   300
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   301
        assertIteratorsEquals(actual.iterator(), expected.iterator());
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   302
    }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   303
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   304
    // Workaround excessive String creation in inner loop in org.testng.Assert.assertEquals(Iterator<?>, Iterator<?>)
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   305
    static public void assertIteratorsEquals(Iterator<?> actual, Iterator<?> expected) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   306
        if (actual == expected) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   307
            return;
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   308
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   309
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   310
        if (actual == null || expected == null) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   311
            fail("Iterators not equal: expected: " + expected + " and actual: " + actual);
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   312
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   313
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   314
        while (actual.hasNext() && expected.hasNext()) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   315
            Object e = expected.next();
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   316
            Object a = actual.next();
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   317
            assertEquals(a, e, "Iterator contents differ");
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   318
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   319
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   320
        if(actual.hasNext()) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   321
            fail("Actual iterator returned more elements than the expected iterator.");
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   322
        } else if(expected.hasNext()) {
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   323
            fail("Expected iterator returned more elements than the actual iterator.");
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   324
        }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   325
    }
37d2147852fc 8134459: java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java timed out
redestad
parents: 47216
diff changeset
   326
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   327
    @SafeVarargs
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   328
    @SuppressWarnings("varargs")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   329
    public static<T> void assertContents(Iterator<T> actual, T... expected) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   330
        assertContents(actual, Arrays.asList(expected).iterator());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   331
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   332
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   333
    /**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   334
     * The all consuming consumer (rampant capitalist) that can accepting a reference or any primitive value.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   335
     */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   336
    private static interface OmnivorousConsumer<T>
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   337
            extends Consumer<T>, IntConsumer, LongConsumer, DoubleConsumer { }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   338
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   339
    @SuppressWarnings({"rawtypes", "unchecked"})
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   340
    public static<T> Consumer<T> toBoxingConsumer(Consumer<? super T> c) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   341
        return (Consumer<T>) new OmnivorousConsumer() {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   342
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   343
            public void accept(Object t) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   344
                c.accept((T) t);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   345
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   346
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   347
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   348
            public void accept(int t) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   349
                accept((Object) t);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   350
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   351
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   352
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   353
            public void accept(long t) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   354
                accept((Object) t);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   355
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   356
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   357
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   358
            public void accept(double t) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   359
                accept((Object) t);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   360
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   361
        };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   362
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   363
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   364
    /**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   365
     * Convert an iterator to a list using forEach with an implementation of
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   366
     * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   367
     *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   368
     * This ensures equality comparisons for test results do not trip
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   369
     * the boxing trip-wires.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   370
     */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   371
    private static<T> List<T> toBoxedList(Iterator<T> it) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   372
        List<T> l = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   373
        it.forEachRemaining(toBoxingConsumer(l::add));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   374
        return l;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   375
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   376
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   377
    /**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   378
     * Convert a spliterator to a list using forEach with an implementation of
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   379
     * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   380
     *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   381
     * This ensures equality comparisons for test results do not trip
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   382
     * the boxing trip-wires.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   383
     */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   384
    public static<T> List<T> toBoxedList(Spliterator<T> sp) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   385
        List<T> l = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   386
        sp.forEachRemaining(toBoxingConsumer(l::add));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   387
        return l;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   388
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   389
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   390
    /**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   391
     * Convert an iterator to a multi-set, represented as a Map, using forEach with an implementation of
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   392
     * {@link java.util.stream.LambdaTestHelpers.OmnivorousConsumer}.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   393
     *
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   394
     * This ensures equality comparisons for test results do not trip
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   395
     * the boxing trip-wires.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   396
     */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   397
    @SuppressWarnings("unchecked")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   398
    private static<T> Map<T, Integer> toBoxedMultiset(Iterator<T> it) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   399
        Map<Object, Integer> result = new HashMap<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   400
18820
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   401
        it.forEachRemaining(toBoxingConsumer(o -> {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   402
                if (result.containsKey(o))
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   403
                    result.put(o, result.get(o) + 1);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   404
                else
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   405
                    result.put(o, 1);
18820
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   406
            }));
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   407
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   408
        return (Map<T, Integer>) result;
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   409
    }
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   410
18820
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   411
    @SuppressWarnings("unchecked")
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   412
    public static<T> Map<T, Integer> toBoxedMultiset(Spliterator<T> it) {
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   413
        Map<Object, Integer> result = new HashMap<>();
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   414
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   415
        it.forEachRemaining(toBoxingConsumer(o -> {
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   416
                if (result.containsKey(o))
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   417
                    result.put(o, result.get(o) + 1);
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   418
                else
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   419
                    result.put(o, 1);
a87cdd6a8834 8015315: Stream.concat methods
mduigou
parents: 18529
diff changeset
   420
            }));
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   421
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   422
        return (Map<T, Integer>) result;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   423
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   424
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   425
    @SuppressWarnings("unchecked")
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   426
    public static void assertContentsEqual(Object a, Object b) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   427
        if (a instanceof Iterable && b instanceof Iterable)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   428
            assertContents((Iterable) a, (Iterable) b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   429
        else
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   430
            assertEquals(a, b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   431
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   432
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   433
    public static<T> void assertContentsUnordered(Iterable<T> actual, Iterable<T> expected) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   434
        assertContentsUnordered(actual.iterator(), expected.iterator());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   435
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   436
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   437
    public static<T> void assertContentsUnordered(Iterator<T> actual, Iterator<T> expected) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   438
        assertEquals(toBoxedMultiset(actual), toBoxedMultiset(expected));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   439
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   440
35713
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   441
    public static<T> void assertContains(Optional<T> actual, Iterator<T> it) {
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   442
        actual.ifPresentOrElse(r -> {
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   443
            boolean contained = false;
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   444
            while (!contained && it.hasNext()) {
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   445
                contained = Objects.equals(r, it.next());
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   446
            }
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   447
            assertTrue(contained, "Not found: "+r);
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   448
        }, () -> assertFalse(it.hasNext()));
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   449
    }
f61cb8475e5a 8148115: Stream.findFirst for unordered source optimization
tvaleev
parents: 33827
diff changeset
   450
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   451
    public static void launderAssertion(Runnable r, Supplier<String> additionalInfo) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   452
        try {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   453
            r.run();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   454
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   455
        catch (AssertionError ae) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   456
            AssertionError cloned = new AssertionError(ae.getMessage() + String.format("%n%s", additionalInfo.get()));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   457
            cloned.setStackTrace(ae.getStackTrace());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   458
            if (ae.getCause() != null)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   459
                cloned.initCause(ae.getCause());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   460
            throw cloned;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   461
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   462
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   463
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   464
    public static <T, S extends BaseStream<T, S>>
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   465
    List<Function<S, S>> permuteStreamFunctions(List<Function<S, S>> opFunctions) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   466
        List<List<Function<S, S>>> opFunctionPermutations = perm(opFunctions);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   467
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   468
        List<Function<S, S>> appliedFunctions = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   469
        for (List<Function<S, S>> fs : opFunctionPermutations) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   470
            Function<S, S> applied = s -> {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   471
                for (Function<S, S> f : fs) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   472
                    s = f.apply(s);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   473
                }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   474
                return s;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   475
            };
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   476
            appliedFunctions.add(applied);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   477
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   478
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   479
        return appliedFunctions;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   480
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   481
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   482
    private static <T> List<T> sub(List<T> l, int index) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   483
        List<T> subL = new ArrayList<>(l);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   484
        subL.remove(index);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   485
        return subL;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   486
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   487
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   488
    public static <T> List<List<T>> perm(List<T> l) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   489
        List<List<T>> result = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   490
        for (int i = 0; i < l.size(); i++) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   491
            for (List<T> perm : perm(sub(l, i))) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   492
                perm.add(0, l.get(i));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   493
                result.add(perm);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   494
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   495
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   496
        result.add(new ArrayList<T>());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   497
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   498
        return result;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   499
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   500
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   501
    public static String flagsToString(int flags) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   502
        StringJoiner sj = new StringJoiner(", ", "StreamOpFlag[", "]");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   503
        if (StreamOpFlag.DISTINCT.isKnown(flags)) sj.add("IS_DISTINCT");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   504
        if (StreamOpFlag.ORDERED.isKnown(flags)) sj.add("IS_ORDERED");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   505
        if (StreamOpFlag.SIZED.isKnown(flags)) sj.add("IS_SIZED");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   506
        if (StreamOpFlag.SORTED.isKnown(flags)) sj.add("IS_SORTED");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   507
        if (StreamOpFlag.SHORT_CIRCUIT.isKnown(flags)) sj.add("IS_SHORT_CIRCUIT");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   508
        return sj.toString();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   509
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   510
}