1a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/*
2a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin *
5a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * This code is free software; you can redistribute it and/or modify it
6a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * under the terms of the GNU General Public License version 2 only, as
7a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * published by the Free Software Foundation.
8a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin *
9a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT
10a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * version 2 for more details (a copy is included in the LICENSE file that
13a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * accompanied this code).
14a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin *
15a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * You should have received a copy of the GNU General Public License version
16a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * 2 along with this work; if not, write to the Free Software Foundation,
17a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin *
19a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * or visit www.oracle.com if you need additional information or have any
21a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * questions.
22a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin */
23a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpackage java.util.stream;
24a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
25a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport org.testng.annotations.Test;
26a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
27a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.Function;
28a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
29a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport static org.testng.Assert.fail;
30a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
31a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/**
32a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * StreamReuseTest
33a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin *
34a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * @author Brian Goetz
35a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin */
36a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin@Test
37a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpublic class StreamReuseTest {
38a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
39a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private <T, U, E, S extends BaseStream<E, S>, D extends TestData<E, S>> void assertSecondFails(
40a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            D data,
41a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            Function<S, T> first,
42a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            Function<S, U> second,
43a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            Class<? extends Throwable> exception,
44a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            String text) {
45a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        S stream = data.stream();
46a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        T fr = first.apply(stream);
47a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        try {
48a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            U sr = second.apply(stream);
49a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            fail(text + " (seq)");
50a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        }
51a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        catch (Throwable e) {
52a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            if (exception.isAssignableFrom(e.getClass())) {
53a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                // Expected
54a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            }
55a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else if (e instanceof Error)
56a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw (Error) e;
57a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else if (e instanceof RuntimeException)
58a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw (RuntimeException) e;
59a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else
60a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw new AssertionError("Unexpected exception " + e.getClass(), e);
61a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        }
62a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
63a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        stream = data.parallelStream();
64a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        fr = first.apply(stream);
65a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        try {
66a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            U sr = second.apply(stream);
67a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            fail(text + " (par)");
68a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        }
69a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        catch (Throwable e) {
70a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            if (exception.isAssignableFrom(e.getClass())) {
71a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                // Expected
72a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            }
73a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else if (e instanceof Error)
74a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw (Error) e;
75a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else if (e instanceof RuntimeException)
76a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw (RuntimeException) e;
77a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            else
78a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                throw new AssertionError("Unexpected exception " + e.getClass(), e);
79a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        }
80a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
81a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
82a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    // Stream
83a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
84a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
85a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoStreams(String name, TestData<Integer, Stream<Integer>> data) {
86a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
87a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (Stream<Integer> s) -> s.map(i -> i), (Stream<Integer> s) -> s.map(i -> i),
88a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
89a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream map / map succeeded erroneously");
90a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
91a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::distinct, (Stream<Integer> s) -> s.map(i -> i),
92a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
93a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream distinct / map succeeded erroneously");
94a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
95a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (Stream<Integer> s) -> s.map(i -> i), Stream::distinct,
96a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
97a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream map / distinct succeeded erroneously");
98a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
99a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::distinct, Stream::distinct,
100a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
101a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream distinct / distinct succeeded erroneously");
102a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
103a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
104a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
105a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoTerminals(String name, TestData<Integer, Stream<Integer>> data) {
106a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
107a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::findFirst, Stream::findFirst,
108a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
109a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream findFirst / findFirst succeeded erroneously");
110a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
111a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
112a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
113a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalStream(String name, TestData<Integer, Stream<Integer>> data) {
114a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
115a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::findFirst, (Stream<Integer> s) -> s.map(i -> i),
116a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
117a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream findFirst / map succeeded erroneously");
118a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
119a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (Stream<Integer> s) -> s.map(i -> i), Stream::findFirst,
120a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
121a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream map / findFirst succeeded erroneously");
122a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
123a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::findFirst, Stream::distinct,
124a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
125a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream findFirst / distinct succeeded erroneously");
126a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
127a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::distinct, Stream::findFirst,
128a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
129a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream distinct / findFirst succeeded erroneously");
130a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
131a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
132a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
133a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoIterators(String name, TestData<Integer, Stream<Integer>> data) {
134a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
135a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::iterator, Stream::iterator,
136a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
137a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream iterator / iterator succeeded erroneously");
138a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
139a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
140a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
141a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalIterator(String name, TestData<Integer, Stream<Integer>> data) {
142a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
143a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::iterator, Stream::findFirst,
144a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
145a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream iterator / findFirst succeeded erroneously");
146a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
147a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::findFirst, Stream::iterator,
148a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
149a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream findFirst / iterator succeeded erroneously");
150a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
151a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
152a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
153a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testStreamIterator(String name, TestData<Integer, Stream<Integer>> data) {
154a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
155a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::iterator, (Stream<Integer> s) -> s.map(i -> i),
156a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
157a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream iterator / map succeeded erroneously");
158a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
159a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (Stream<Integer> s) -> s.map(i -> i), Stream::iterator,
160a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
161a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream map / iterator succeeded erroneously");
162a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
163a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::iterator, Stream::distinct,
164a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
165a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream iterator / distinct succeeded erroneously");
166a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
167a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          Stream::distinct, Stream::iterator,
168a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
169a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream distinct / iterator succeeded erroneously");
170a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
171a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
172a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    // IntStream
173a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
174a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
175a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoStreams(String name, TestData.OfInt data) {
176a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
177a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (IntStream s) -> s.mapToObj(i -> i), (IntStream s) -> s.mapToObj(i -> i),
178a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
179a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream map / map succeeded erroneously");
180a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
181a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::distinct, (IntStream s) -> s.mapToObj(i -> i),
182a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
183a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream distinct / map succeeded erroneously");
184a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
185a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (IntStream s) -> s.mapToObj(i -> i), IntStream::distinct,
186a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
187a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream map / distinct succeeded erroneously");
188a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
189a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::distinct, IntStream::distinct,
190a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
191a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream distinct / distinct succeeded erroneously");
192a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
193a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
194a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
195a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoTerminals(String name, TestData.OfInt data) {
196a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
197a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::sum, IntStream::sum,
198a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
199a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream sum / sum succeeded erroneously");
200a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
201a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
202a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
203a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalStream(String name, TestData.OfInt data) {
204a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
205a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::sum, (IntStream s) -> s.mapToObj(i -> i),
206a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
207a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream sum / map succeeded erroneously");
208a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
209a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (IntStream s) -> s.mapToObj(i -> i), IntStream::sum,
210a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
211a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream map / sum succeeded erroneously");
212a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
213a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::sum, IntStream::distinct,
214a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
215a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream sum / distinct succeeded erroneously");
216a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
217a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::distinct, IntStream::sum,
218a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
219a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream distinct / sum succeeded erroneously");
220a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
221a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
222a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
223a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoIterators(String name, TestData.OfInt data) {
224a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
225a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::iterator, IntStream::iterator,
226a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
227a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream iterator / iterator succeeded erroneously");
228a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
229a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
230a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
231a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalIterator(String name, TestData.OfInt data) {
232a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
233a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::iterator, IntStream::sum,
234a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
235a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream iterator / sum succeeded erroneously");
236a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
237a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::sum, IntStream::iterator,
238a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
239a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream sum / iterator succeeded erroneously");
240a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
241a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
242a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
243a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testStreamIterator(String name, TestData.OfInt data) {
244a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
245a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::iterator, (IntStream s) -> s.mapToObj(i -> i),
246a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
247a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream iterator / map succeeded erroneously");
248a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
249a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (IntStream s) -> s.mapToObj(i -> i), IntStream::iterator,
250a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
251a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream map / iterator succeeded erroneously");
252a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
253a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::iterator, IntStream::distinct,
254a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
255a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream iterator / distinct succeeded erroneously");
256a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
257a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IntStream::distinct, IntStream::iterator,
258a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
259a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "IntStream distinct / iterator succeeded erroneously");
260a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
261a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
262a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    // LongStream
263a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
264a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
265a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoStreams(String name, TestData.OfLong data) {
266a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
267a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (LongStream s) -> s.mapToObj(i -> i), (LongStream s) -> s.mapToObj(i -> i),
268a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
269a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream map / map succeeded erroneously");
270a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
271a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::distinct, (LongStream s) -> s.mapToObj(i -> i),
272a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
273a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream distinct / map succeeded erroneously");
274a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
275a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (LongStream s) -> s.mapToObj(i -> i), LongStream::distinct,
276a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
277a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream map / distinct succeeded erroneously");
278a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
279a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::distinct, LongStream::distinct,
280a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
281a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream distinct / distinct succeeded erroneously");
282a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
283a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
284a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
285a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoTerminals(String name, TestData.OfLong data) {
286a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
287a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::sum, LongStream::sum,
288a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
289a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream sum / sum succeeded erroneously");
290a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
291a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
292a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
293a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalStream(String name, TestData.OfLong data) {
294a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
295a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::sum, (LongStream s) -> s.mapToObj(i -> i),
296a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
297a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream sum / map succeeded erroneously");
298a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
299a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (LongStream s) -> s.mapToObj(i -> i), LongStream::sum,
300a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
301a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream map / sum succeeded erroneously");
302a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
303a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::sum, LongStream::distinct,
304a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
305a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream sum / distinct succeeded erroneously");
306a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
307a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::distinct, LongStream::sum,
308a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
309a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream distinct / sum succeeded erroneously");
310a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
311a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
312a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
313a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoIterators(String name, TestData.OfLong data) {
314a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
315a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::iterator, LongStream::iterator,
316a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
317a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream iterator / iterator succeeded erroneously");
318a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
319a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
320a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
321a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalIterator(String name, TestData.OfLong data) {
322a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
323a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::iterator, LongStream::sum,
324a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
325a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream iterator / sum succeeded erroneously");
326a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
327a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::sum, LongStream::iterator,
328a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
329a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream sum / iterator succeeded erroneously");
330a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
331a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
332a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
333a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testStreamIterator(String name, TestData.OfLong data) {
334a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
335a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::iterator, (LongStream s) -> s.mapToObj(i -> i),
336a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
337a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream iterator / map succeeded erroneously");
338a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
339a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (LongStream s) -> s.mapToObj(i -> i), LongStream::iterator,
340a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
341a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream map / iterator succeeded erroneously");
342a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
343a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::iterator, LongStream::distinct,
344a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
345a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream iterator / distinct succeeded erroneously");
346a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
347a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          LongStream::distinct, LongStream::iterator,
348a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
349a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "LongStream distinct / iterator succeeded erroneously");
350a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
351a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
352a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    // DoubleStream
353a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
354a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
355a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoStreams(String name, TestData.OfDouble data) {
356a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
357a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (DoubleStream s) -> s.mapToObj(i -> i), (DoubleStream s) -> s.mapToObj(i -> i),
358a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
359a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream map / map succeeded erroneously");
360a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
361a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::distinct, (DoubleStream s) -> s.mapToObj(i -> i),
362a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
363a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream distinct / map succeeded erroneously");
364a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
365a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (DoubleStream s) -> s.mapToObj(i -> i), DoubleStream::distinct,
366a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
367a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream map / distinct succeeded erroneously");
368a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
369a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::distinct, DoubleStream::distinct,
370a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
371a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream distinct / distinct succeeded erroneously");
372a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
373a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
374a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
375a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoTerminals(String name, TestData.OfDouble data) {
376a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
377a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::sum, DoubleStream::sum,
378a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
379a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream sum / sum succeeded erroneously");
380a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
381a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
382a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
383a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalStream(String name, TestData.OfDouble data) {
384a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
385a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::sum, (DoubleStream s) -> s.mapToObj(i -> i),
386a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
387a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream sum / map succeeded erroneously");
388a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
389a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (DoubleStream s) -> s.mapToObj(i -> i), DoubleStream::sum,
390a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
391a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream map / sum succeeded erroneously");
392a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
393a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::sum, DoubleStream::distinct,
394a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
395a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream sum / distinct succeeded erroneously");
396a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
397a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::distinct, DoubleStream::sum,
398a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
399a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream distinct / sum succeeded erroneously");
400a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
401a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
402a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
403a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTwoIterators(String name, TestData.OfDouble data) {
404a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
405a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::iterator, DoubleStream::iterator,
406a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
407a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream iterator / iterator succeeded erroneously");
408a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
409a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
410a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
411a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testTerminalIterator(String name, TestData.OfDouble data) {
412a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
413a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::iterator, DoubleStream::sum,
414a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
415a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream iterator / sum succeeded erroneously");
416a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
417a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::sum, DoubleStream::iterator,
418a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
419a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "Stream sum / iterator succeeded erroneously");
420a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
421a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
422a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
423a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testStreamIterator(String name, TestData.OfDouble data) {
424a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
425a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::iterator, (DoubleStream s) -> s.mapToObj(i -> i),
426a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
427a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream iterator / map succeeded erroneously");
428a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
429a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          (DoubleStream s) -> s.mapToObj(i -> i), DoubleStream::iterator,
430a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
431a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream map / iterator succeeded erroneously");
432a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
433a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::iterator, DoubleStream::distinct,
434a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
435a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream iterator / distinct succeeded erroneously");
436a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertSecondFails(data,
437a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          DoubleStream::distinct, DoubleStream::iterator,
438a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          IllegalStateException.class,
439a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                          "DoubleStream distinct / iterator succeeded erroneously");
440a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
441a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin}
442