jdk/test/java/util/stream/bootlib/java.base/java/util/stream/SpliteratorTestHelper.java
author jjg
Fri, 13 Nov 2015 15:55:32 -0800
changeset 33827 2d5adfe636ee
parent 19188 jdk/test/java/util/stream/bootlib/java/util/stream/SpliteratorTestHelper.java@bbf287c5cd92
permissions -rw-r--r--
8142996: move jdk java/util/streams tests into java.base directories Reviewed-by: mchung
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
/*
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
     2
 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
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
19188
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
    25
import org.testng.annotations.Test;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
    26
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    27
import java.util.ArrayDeque;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    28
import java.util.ArrayList;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    29
import java.util.Collection;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    30
import java.util.Collections;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    31
import java.util.Deque;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    32
import java.util.HashMap;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    33
import java.util.List;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    34
import java.util.Map;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    35
import java.util.Spliterator;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    36
import java.util.function.*;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    37
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    38
import static org.testng.Assert.*;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    39
import static org.testng.Assert.assertEquals;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    40
import static org.testng.Assert.fail;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    41
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    42
/**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    43
 * Assertion methods for spliterators, to be called from other tests
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    44
 */
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    45
public class SpliteratorTestHelper {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    46
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    47
    public interface ContentAsserter<T> {
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    48
        void assertContents(Collection<T> actual, Collection<T> expected, boolean isOrdered);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    49
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    50
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    51
    private static ContentAsserter<Object> DEFAULT_CONTENT_ASSERTER
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    52
            = SpliteratorTestHelper::assertContents;
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    53
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    54
    @SuppressWarnings("unchecked")
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    55
    private static <T> ContentAsserter<T> defaultContentAsserter() {
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    56
        return (ContentAsserter<T>) DEFAULT_CONTENT_ASSERTER;
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    57
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    58
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    59
    public static void testSpliterator(Supplier<Spliterator<Integer>> supplier) {
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    60
        testSpliterator(supplier, defaultContentAsserter());
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    61
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    62
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    63
    public static void testSpliterator(Supplier<Spliterator<Integer>> supplier,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    64
                                       ContentAsserter<Integer> asserter) {
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    65
        testSpliterator(supplier, (Consumer<Integer> b) -> b, asserter);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    66
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    67
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    68
    public static void testIntSpliterator(Supplier<Spliterator.OfInt> supplier) {
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    69
        testIntSpliterator(supplier, defaultContentAsserter());
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    70
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    71
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    72
    public static void testIntSpliterator(Supplier<Spliterator.OfInt> supplier,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    73
                                          ContentAsserter<Integer> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    74
        class BoxingAdapter implements Consumer<Integer>, IntConsumer {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    75
            private final Consumer<Integer> b;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    76
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    77
            BoxingAdapter(Consumer<Integer> b) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    78
                this.b = b;
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
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    81
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    82
            public void accept(Integer value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    83
                throw new IllegalStateException();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    84
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    85
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    86
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    87
            public void accept(int value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    88
                b.accept(value);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    89
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    90
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    91
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    92
        testSpliterator(supplier, BoxingAdapter::new, asserter);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    93
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    94
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
    95
    public static void testLongSpliterator(Supplier<Spliterator.OfLong> supplier) {
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    96
        testLongSpliterator(supplier, defaultContentAsserter());
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    97
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    98
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
    99
    public static void testLongSpliterator(Supplier<Spliterator.OfLong> supplier,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   100
                                           ContentAsserter<Long> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   101
        class BoxingAdapter implements Consumer<Long>, LongConsumer {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   102
            private final Consumer<Long> b;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   103
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   104
            BoxingAdapter(Consumer<Long> b) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   105
                this.b = b;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   106
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   107
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   108
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   109
            public void accept(Long value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   110
                throw new IllegalStateException();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   111
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   112
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   113
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   114
            public void accept(long value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   115
                b.accept(value);
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
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   118
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   119
        testSpliterator(supplier, BoxingAdapter::new, asserter);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   120
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   121
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   122
    public static void testDoubleSpliterator(Supplier<Spliterator.OfDouble> supplier) {
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   123
        testDoubleSpliterator(supplier, defaultContentAsserter());
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   124
    }
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   125
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   126
    public static void testDoubleSpliterator(Supplier<Spliterator.OfDouble> supplier,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   127
                                             ContentAsserter<Double> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   128
        class BoxingAdapter implements Consumer<Double>, DoubleConsumer {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   129
            private final Consumer<Double> b;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   130
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   131
            BoxingAdapter(Consumer<Double> b) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   132
                this.b = b;
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
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   136
            public void accept(Double value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   137
                throw new IllegalStateException();
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
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   140
            @Override
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   141
            public void accept(double value) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   142
                b.accept(value);
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
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   145
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   146
        testSpliterator(supplier, BoxingAdapter::new, asserter);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   147
    }
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
    static <T, S extends Spliterator<T>> void testSpliterator(Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   150
                                                              UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   151
                                                              ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   152
        ArrayList<T> fromForEach = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   153
        Spliterator<T> spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   154
        Consumer<T> addToFromForEach = boxingAdapter.apply(fromForEach::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   155
        spliterator.forEachRemaining(addToFromForEach);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   156
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   157
        Collection<T> exp = Collections.unmodifiableList(fromForEach);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   158
19188
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   159
        testNullPointerException(supplier);
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   160
        testForEach(exp, supplier, boxingAdapter, asserter);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   161
        testTryAdvance(exp, supplier, boxingAdapter, asserter);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   162
        testMixedTryAdvanceForEach(exp, supplier, boxingAdapter, asserter);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   163
        testMixedTraverseAndSplit(exp, supplier, boxingAdapter, asserter);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   164
        testSplitAfterFullTraversal(supplier, boxingAdapter);
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   165
        testSplitOnce(exp, supplier, boxingAdapter, asserter);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   166
        testSplitSixDeep(exp, supplier, boxingAdapter, asserter);
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   167
        testSplitUntilNull(exp, supplier, boxingAdapter, asserter);
17442
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
    //
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   171
19188
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   172
    private static <T, S extends Spliterator<T>> void testNullPointerException(Supplier<S> s) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   173
        S sp = s.get();
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   174
        // Have to check instances and use casts to avoid tripwire messages and
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   175
        // directly test the primitive methods
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   176
        if (sp instanceof Spliterator.OfInt) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   177
            Spliterator.OfInt psp = (Spliterator.OfInt) sp;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   178
            executeAndCatch(NullPointerException.class, () -> psp.forEachRemaining((IntConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   179
            executeAndCatch(NullPointerException.class, () -> psp.tryAdvance((IntConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   180
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   181
        else if (sp instanceof Spliterator.OfLong) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   182
            Spliterator.OfLong psp = (Spliterator.OfLong) sp;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   183
            executeAndCatch(NullPointerException.class, () -> psp.forEachRemaining((LongConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   184
            executeAndCatch(NullPointerException.class, () -> psp.tryAdvance((LongConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   185
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   186
        else if (sp instanceof Spliterator.OfDouble) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   187
            Spliterator.OfDouble psp = (Spliterator.OfDouble) sp;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   188
            executeAndCatch(NullPointerException.class, () -> psp.forEachRemaining((DoubleConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   189
            executeAndCatch(NullPointerException.class, () -> psp.tryAdvance((DoubleConsumer) null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   190
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   191
        else {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   192
            executeAndCatch(NullPointerException.class, () -> sp.forEachRemaining(null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   193
            executeAndCatch(NullPointerException.class, () -> sp.tryAdvance(null));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   194
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   195
    }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   196
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   197
    private static <T, S extends Spliterator<T>> void testForEach(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   198
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   199
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   200
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   201
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   202
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   203
        long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   204
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
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
        ArrayList<T> fromForEach = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   207
        spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   208
        Consumer<T> addToFromForEach = boxingAdapter.apply(fromForEach::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   209
        spliterator.forEachRemaining(addToFromForEach);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   210
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   211
        // Assert that forEach now produces no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   212
        spliterator.forEachRemaining(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   213
                e -> fail("Spliterator.forEach produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   214
        // Assert that tryAdvance now produce no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   215
        spliterator.tryAdvance(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   216
                e -> fail("Spliterator.tryAdvance produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   217
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   218
        // assert that size, tryAdvance, and forEach are consistent
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   219
        if (sizeIfKnown >= 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   220
            assertEquals(sizeIfKnown, exp.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   221
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   222
        assertEquals(fromForEach.size(), exp.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   223
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   224
        asserter.assertContents(fromForEach, exp, isOrdered);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   225
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   226
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   227
    private static <T, S extends Spliterator<T>> void testTryAdvance(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   228
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   229
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   230
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   231
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   232
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   233
        long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   234
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
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
        spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   237
        ArrayList<T> fromTryAdvance = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   238
        Consumer<T> addToFromTryAdvance = boxingAdapter.apply(fromTryAdvance::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   239
        while (spliterator.tryAdvance(addToFromTryAdvance)) { }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   240
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   241
        // Assert that forEach now produces no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   242
        spliterator.forEachRemaining(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   243
                e -> fail("Spliterator.forEach produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   244
        // Assert that tryAdvance now produce no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   245
        spliterator.tryAdvance(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   246
                e -> fail("Spliterator.tryAdvance produced an element after spliterator exhausted: " + e)));
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
        // assert that size, tryAdvance, and forEach are consistent
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   249
        if (sizeIfKnown >= 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   250
            assertEquals(sizeIfKnown, exp.size());
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
        assertEquals(fromTryAdvance.size(), exp.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   253
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   254
        asserter.assertContents(fromTryAdvance, exp, isOrdered);
17442
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
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   257
    private static <T, S extends Spliterator<T>> void testMixedTryAdvanceForEach(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   258
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   259
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   260
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   261
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   262
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   263
        long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   264
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   265
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   266
        // tryAdvance first few elements, then forEach rest
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   267
        ArrayList<T> dest = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   268
        spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   269
        Consumer<T> addToDest = boxingAdapter.apply(dest::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   270
        for (int i = 0; i < 10 && spliterator.tryAdvance(addToDest); i++) { }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   271
        spliterator.forEachRemaining(addToDest);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   272
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   273
        // Assert that forEach now produces no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   274
        spliterator.forEachRemaining(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   275
                e -> fail("Spliterator.forEach produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   276
        // Assert that tryAdvance now produce no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   277
        spliterator.tryAdvance(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   278
                e -> fail("Spliterator.tryAdvance produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   279
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   280
        if (sizeIfKnown >= 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   281
            assertEquals(sizeIfKnown, dest.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   282
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   283
        assertEquals(dest.size(), exp.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   284
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   285
        asserter.assertContents(dest, exp, isOrdered);
17442
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
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   288
    private static <T, S extends Spliterator<T>> void testMixedTraverseAndSplit(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   289
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   290
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   291
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   292
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   293
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   294
        long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   295
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   296
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   297
        // tryAdvance first few elements, then forEach rest
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   298
        ArrayList<T> dest = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   299
        spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   300
        Consumer<T> b = boxingAdapter.apply(dest::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   301
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   302
        Spliterator<T> spl1, spl2, spl3;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   303
        spliterator.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   304
        spl2 = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   305
        if (spl2 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   306
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   307
            spl1 = spl2.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   308
            if (spl1 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   309
                spl1.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   310
                spl1.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   311
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   312
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   313
            spl2.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   314
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   315
        spliterator.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   316
        spl3 = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   317
        if (spl3 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   318
            spl3.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   319
            spl3.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   320
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   321
        spliterator.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   322
        spliterator.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   323
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   324
        if (sizeIfKnown >= 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   325
            assertEquals(sizeIfKnown, dest.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   326
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   327
        assertEquals(dest.size(), exp.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   328
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   329
        asserter.assertContents(dest, exp, isOrdered);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   330
    }
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
    private static <T, S extends Spliterator<T>> void testSplitAfterFullTraversal(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   333
            Supplier<S> supplier,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   334
            UnaryOperator<Consumer<T>> boxingAdapter) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   335
        // Full traversal using tryAdvance
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   336
        Spliterator<T> spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   337
        while (spliterator.tryAdvance(boxingAdapter.apply(e -> { }))) { }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   338
        Spliterator<T> split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   339
        assertNull(split);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   340
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   341
        // Full traversal using forEach
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   342
        spliterator = supplier.get();
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   343
        spliterator.forEachRemaining(boxingAdapter.apply(e -> { }));
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   344
        split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   345
        assertNull(split);
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
        // Full traversal using tryAdvance then forEach
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   348
        spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   349
        spliterator.tryAdvance(boxingAdapter.apply(e -> { }));
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   350
        spliterator.forEachRemaining(boxingAdapter.apply(e -> { }));
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   351
        split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   352
        assertNull(split);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   353
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   354
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   355
    private static <T, S extends Spliterator<T>> void testSplitOnce(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   356
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   357
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   358
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   359
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   360
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   361
        long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   362
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
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
        ArrayList<T> fromSplit = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   365
        Spliterator<T> s1 = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   366
        Spliterator<T> s2 = s1.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   367
        long s1Size = s1.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   368
        long s2Size = (s2 != null) ? s2.getExactSizeIfKnown() : 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   369
        Consumer<T> addToFromSplit = boxingAdapter.apply(fromSplit::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   370
        if (s2 != null)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   371
            s2.forEachRemaining(addToFromSplit);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   372
        s1.forEachRemaining(addToFromSplit);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   373
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   374
        if (sizeIfKnown >= 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   375
            assertEquals(sizeIfKnown, fromSplit.size());
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   376
            if (s1Size >= 0 && s2Size >= 0)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   377
                assertEquals(sizeIfKnown, s1Size + s2Size);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   378
        }
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   379
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   380
        asserter.assertContents(fromSplit, exp, isOrdered);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   381
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   382
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   383
    private static <T, S extends Spliterator<T>> void testSplitSixDeep(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   384
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   385
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   386
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   387
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   388
        S spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   389
        boolean isOrdered = spliterator.hasCharacteristics(Spliterator.ORDERED);
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
        for (int depth=0; depth < 6; depth++) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   392
            List<T> dest = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   393
            spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   394
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   395
            assertSpliterator(spliterator);
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
            // verify splitting with forEach
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   398
            splitSixDeepVisitor(depth, 0, dest, spliterator, boxingAdapter, spliterator.characteristics(), false);
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   399
            asserter.assertContents(dest, exp, isOrdered);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   400
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   401
            // verify splitting with tryAdvance
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   402
            dest.clear();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   403
            spliterator = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   404
            splitSixDeepVisitor(depth, 0, dest, spliterator, boxingAdapter, spliterator.characteristics(), true);
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   405
            asserter.assertContents(dest, exp, isOrdered);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   406
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   407
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   408
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   409
    private static <T, S extends Spliterator<T>>
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   410
    void splitSixDeepVisitor(int depth, int curLevel,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   411
                             List<T> dest, S spliterator, UnaryOperator<Consumer<T>> boxingAdapter,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   412
                             int rootCharacteristics, boolean useTryAdvance) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   413
        if (curLevel < depth) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   414
            long beforeSize = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   415
            Spliterator<T> split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   416
            if (split != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   417
                assertSpliterator(split, rootCharacteristics);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   418
                assertSpliterator(spliterator, rootCharacteristics);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   419
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   420
                if ((rootCharacteristics & Spliterator.SUBSIZED) != 0 &&
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   421
                    (rootCharacteristics & Spliterator.SIZED) != 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   422
                    assertEquals(beforeSize, split.estimateSize() + spliterator.estimateSize());
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
                splitSixDeepVisitor(depth, curLevel + 1, dest, split, boxingAdapter, rootCharacteristics, useTryAdvance);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   425
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   426
            splitSixDeepVisitor(depth, curLevel + 1, dest, spliterator, boxingAdapter, rootCharacteristics, useTryAdvance);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   427
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   428
        else {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   429
            long sizeIfKnown = spliterator.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   430
            if (useTryAdvance) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   431
                Consumer<T> addToDest = boxingAdapter.apply(dest::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   432
                int count = 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   433
                while (spliterator.tryAdvance(addToDest)) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   434
                    ++count;
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
                if (sizeIfKnown >= 0)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   438
                    assertEquals(sizeIfKnown, count);
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
                // Assert that forEach now produces no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   441
                spliterator.forEachRemaining(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   442
                        e -> fail("Spliterator.forEach produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   443
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   444
                Spliterator<T> split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   445
                assertNull(split);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   446
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   447
            else {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   448
                List<T> leafDest = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   449
                Consumer<T> addToLeafDest = boxingAdapter.apply(leafDest::add);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   450
                spliterator.forEachRemaining(addToLeafDest);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   451
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   452
                if (sizeIfKnown >= 0)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   453
                    assertEquals(sizeIfKnown, leafDest.size());
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
                // Assert that forEach now produces no elements
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   456
                spliterator.tryAdvance(boxingAdapter.apply(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   457
                        e -> fail("Spliterator.tryAdvance produced an element after spliterator exhausted: " + e)));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   458
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   459
                Spliterator<T> split = spliterator.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   460
                assertNull(split);
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
                dest.addAll(leafDest);
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
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   465
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   466
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   467
    private static <T, S extends Spliterator<T>> void testSplitUntilNull(
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   468
            Collection<T> exp,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   469
            Supplier<S> supplier,
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   470
            UnaryOperator<Consumer<T>> boxingAdapter,
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   471
            ContentAsserter<T> asserter) {
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   472
        Spliterator<T> s = supplier.get();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   473
        boolean isOrdered = s.hasCharacteristics(Spliterator.ORDERED);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   474
        assertSpliterator(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
        List<T> splits = new ArrayList<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   477
        Consumer<T> c = boxingAdapter.apply(splits::add);
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
        testSplitUntilNull(new SplitNode<T>(c, s));
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   480
        asserter.assertContents(splits, exp, isOrdered);
17442
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
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   483
    private static class SplitNode<T> {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   484
        // Constant for every node
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   485
        final Consumer<T> c;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   486
        final int rootCharacteristics;
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
        final Spliterator<T> s;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   489
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   490
        SplitNode(Consumer<T> c, Spliterator<T> s) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   491
            this(c, s.characteristics(), s);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   492
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   493
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   494
        private SplitNode(Consumer<T> c, int rootCharacteristics, Spliterator<T> s) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   495
            this.c = c;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   496
            this.rootCharacteristics = rootCharacteristics;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   497
            this.s = s;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   498
        }
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
        SplitNode<T> fromSplit(Spliterator<T> split) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   501
            return new SplitNode<>(c, rootCharacteristics, split);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   502
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   503
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   504
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   505
    /**
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   506
     * Set the maximum stack capacity to 0.25MB. This should be more than enough to detect a bad spliterator
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   507
     * while not unduly disrupting test infrastructure given the test data sizes that are used are small.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   508
     * Note that j.u.c.ForkJoinPool sets the max queue size to 64M (1 << 26).
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
    private static final int MAXIMUM_STACK_CAPACITY = 1 << 18; // 0.25MB
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   511
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   512
    private static <T> void testSplitUntilNull(SplitNode<T> e) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   513
        // Use an explicit stack to avoid a StackOverflowException when testing a Spliterator
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   514
        // that when repeatedly split produces a right-balanced (and maybe degenerate) tree, or
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   515
        // for a spliterator that is badly behaved.
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   516
        Deque<SplitNode<T>> stack = new ArrayDeque<>();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   517
        stack.push(e);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   518
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   519
        int iteration = 0;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   520
        while (!stack.isEmpty()) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   521
            assertTrue(iteration++ < MAXIMUM_STACK_CAPACITY, "Exceeded maximum stack modification count of 1 << 18");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   522
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   523
            e = stack.pop();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   524
            Spliterator<T> parentAndRightSplit = e.s;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   525
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   526
            long parentEstimateSize = parentAndRightSplit.estimateSize();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   527
            assertTrue(parentEstimateSize >= 0,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   528
                       String.format("Split size estimate %d < 0", parentEstimateSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   529
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   530
            long parentSize = parentAndRightSplit.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   531
            Spliterator<T> leftSplit = parentAndRightSplit.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   532
            if (leftSplit == null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   533
                parentAndRightSplit.forEachRemaining(e.c);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   534
                continue;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   535
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   536
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   537
            assertSpliterator(leftSplit, e.rootCharacteristics);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   538
            assertSpliterator(parentAndRightSplit, e.rootCharacteristics);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   539
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   540
            if (parentEstimateSize != Long.MAX_VALUE && leftSplit.estimateSize() > 0
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   541
                && parentAndRightSplit.estimateSize() > 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   542
                assertTrue(leftSplit.estimateSize() < parentEstimateSize,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   543
                           String.format("Left split size estimate %d >= parent split size estimate %d",
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   544
                                         leftSplit.estimateSize(), parentEstimateSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   545
                assertTrue(parentAndRightSplit.estimateSize() < parentEstimateSize,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   546
                           String.format("Right split size estimate %d >= parent split size estimate %d",
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   547
                                         leftSplit.estimateSize(), parentEstimateSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   548
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   549
            else {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   550
                assertTrue(leftSplit.estimateSize() <= parentEstimateSize,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   551
                           String.format("Left split size estimate %d > parent split size estimate %d",
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   552
                                         leftSplit.estimateSize(), parentEstimateSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   553
                assertTrue(parentAndRightSplit.estimateSize() <= parentEstimateSize,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   554
                           String.format("Right split size estimate %d > parent split size estimate %d",
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   555
                                         leftSplit.estimateSize(), parentEstimateSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   556
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   557
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   558
            long leftSize = leftSplit.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   559
            long rightSize = parentAndRightSplit.getExactSizeIfKnown();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   560
            if (parentSize >= 0 && leftSize >= 0 && rightSize >= 0)
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   561
                assertEquals(parentSize, leftSize + rightSize,
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   562
                             String.format("exact left split size %d + exact right split size %d != parent exact split size %d",
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   563
                                           leftSize, rightSize, parentSize));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   564
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   565
            // Add right side to stack first so left side is popped off first
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   566
            stack.push(e.fromSplit(parentAndRightSplit));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   567
            stack.push(e.fromSplit(leftSplit));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   568
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   569
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   570
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   571
    private static void assertSpliterator(Spliterator<?> s, int rootCharacteristics) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   572
        if ((rootCharacteristics & Spliterator.SUBSIZED) != 0) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   573
            assertTrue(s.hasCharacteristics(Spliterator.SUBSIZED),
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   574
                       "Child split is not SUBSIZED when root split is SUBSIZED");
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   575
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   576
        assertSpliterator(s);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   577
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   578
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   579
    private static void assertSpliterator(Spliterator<?> s) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   580
        if (s.hasCharacteristics(Spliterator.SUBSIZED)) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   581
            assertTrue(s.hasCharacteristics(Spliterator.SIZED));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   582
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   583
        if (s.hasCharacteristics(Spliterator.SIZED)) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   584
            assertTrue(s.estimateSize() != Long.MAX_VALUE);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   585
            assertTrue(s.getExactSizeIfKnown() >= 0);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   586
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   587
        try {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   588
            s.getComparator();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   589
            assertTrue(s.hasCharacteristics(Spliterator.SORTED));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   590
        } catch (IllegalStateException e) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   591
            assertFalse(s.hasCharacteristics(Spliterator.SORTED));
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   592
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   593
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   594
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   595
    private static<T> void assertContents(Collection<T> actual, Collection<T> expected, boolean isOrdered) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   596
        if (isOrdered) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   597
            assertEquals(actual, expected);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   598
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   599
        else {
18572
53b8b8c30086 8012987: Optimizations for Stream.limit/substream
psandoz
parents: 18529
diff changeset
   600
            LambdaTestHelpers.assertContentsUnordered(actual, expected);
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   601
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   602
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   603
19188
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   604
    private static void executeAndCatch(Class<? extends Exception> expected, Runnable r) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   605
        Exception caught = null;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   606
        try {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   607
            r.run();
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   608
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   609
        catch (Exception e) {
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   610
            caught = e;
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   611
        }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   612
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   613
        assertNotNull(caught,
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   614
                      String.format("No Exception was thrown, expected an Exception of %s to be thrown",
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   615
                                    expected.getName()));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   616
        assertTrue(expected.isInstance(caught),
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   617
                   String.format("Exception thrown %s not an instance of %s",
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   618
                                 caught.getClass().getName(), expected.getName()));
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   619
    }
bbf287c5cd92 8020016: Numerous splitereator impls do not throw NPE for null Consumers
psandoz
parents: 18572
diff changeset
   620
17442
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   621
    static<U> void mixedTraverseAndSplit(Consumer<U> b, Spliterator<U> splTop) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   622
        Spliterator<U> spl1, spl2, spl3;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   623
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   624
        spl2 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   625
        if (spl2 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   626
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   627
            spl1 = spl2.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   628
            if (spl1 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   629
                spl1.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   630
                spl1.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   631
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   632
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   633
            spl2.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   634
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   635
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   636
        spl3 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   637
        if (spl3 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   638
            spl3.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   639
            spl3.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   640
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   641
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   642
        splTop.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   643
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   644
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   645
    static void mixedTraverseAndSplit(IntConsumer b, Spliterator.OfInt splTop) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   646
        Spliterator.OfInt spl1, spl2, spl3;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   647
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   648
        spl2 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   649
        if (spl2 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   650
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   651
            spl1 = spl2.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   652
            if (spl1 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   653
                spl1.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   654
                spl1.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   655
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   656
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   657
            spl2.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   658
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   659
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   660
        spl3 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   661
        if (spl3 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   662
            spl3.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   663
            spl3.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   664
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   665
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   666
        splTop.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   667
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   668
    static void mixedTraverseAndSplit(LongConsumer b, Spliterator.OfLong splTop) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   669
        Spliterator.OfLong spl1, spl2, spl3;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   670
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   671
        spl2 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   672
        if (spl2 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   673
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   674
            spl1 = spl2.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   675
            if (spl1 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   676
                spl1.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   677
                spl1.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   678
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   679
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   680
            spl2.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   681
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   682
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   683
        spl3 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   684
        if (spl3 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   685
            spl3.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   686
            spl3.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   687
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   688
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   689
        splTop.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   690
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   691
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   692
    static void mixedTraverseAndSplit(DoubleConsumer b, Spliterator.OfDouble splTop) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   693
        Spliterator.OfDouble spl1, spl2, spl3;
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   694
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   695
        spl2 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   696
        if (spl2 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   697
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   698
            spl1 = spl2.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   699
            if (spl1 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   700
                spl1.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   701
                spl1.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   702
            }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   703
            spl2.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   704
            spl2.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   705
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   706
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   707
        spl3 = splTop.trySplit();
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   708
        if (spl3 != null) {
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   709
            spl3.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   710
            spl3.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   711
        }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   712
        splTop.tryAdvance(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   713
        splTop.forEachRemaining(b);
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   714
    }
1444a769a68a 8012664: Add tests for java.util.stream and lambda translation
briangoetz
parents:
diff changeset
   715
}