1a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin/*
2a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin * Copyright (c) 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 org.openjdk.tests.java.util.stream;
24a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
25289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.LambdaTestHelpers;
26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.OpTestCase;
27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.StreamTestDataProvider;
28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.openjdk.testlib.java.util.stream.TestData;
29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin
30a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport org.testng.annotations.DataProvider;
31a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport org.testng.annotations.Test;
32a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
33a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Arrays;
34a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.Collections;
35a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.List;
36a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.function.Function;
37a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.DoubleStream;
38a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.IntStream;
39a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.LongStream;
40a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport java.util.stream.Stream;
41a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
42a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinimport static java.util.stream.Collectors.toList;
43a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
44a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin@Test
45a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkinpublic class StreamBuilderTest extends OpTestCase {
46a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
47a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    List<Integer> sizes = Arrays.asList(0, 1, 4, 16, 256,
48a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                        1023, 1024, 1025,
49a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                        2047, 2048, 2049,
50a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                        1024 * 32 - 1, 1024 * 32, 1024 * 32 + 1);
51a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
52a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @DataProvider(name = "sizes")
53a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public Object[][] createStreamBuilders() {
54a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        return sizes.stream().map(i -> new Object[] { i }).toArray(Object[][]::new);
55a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
56a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
57a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void checkException(Class<? extends Exception> ce, Runnable r) {
58a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        Exception caught = null;
59a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        try {
60a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            r.run();
61a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        } catch (Exception e) {
62a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            caught = e;
63a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        }
64a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
65a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertNotNull(caught);
66a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        assertTrue(ce.isInstance(caught));
67a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
68a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
69a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void checkISE(Runnable r) {
70a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkException(IllegalStateException.class, r);
71a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
72a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
73a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        //
74a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
75a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test
76a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testSingleton() {
77a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfRef<Integer> data = TestData.Factory.ofSupplier("[0, 1)",
78a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                                   () -> Stream.of(1));
79a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
80a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
81a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
82a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1)).
83a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
84a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
85a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
86a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(LambdaTestHelpers.identity())).
87a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1)).
88a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
89a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
90a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
91a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes")
92a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testAfterBuilding(int size) {
93a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        Stream.Builder<Integer> sb = Stream.builder();
94a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        IntStream.range(0, size).boxed().forEach(sb);
95a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        sb.build();
96a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
97a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.accept(1));
98a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.add(1));
99a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.build());
100a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
101a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
102a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes", groups = { "serialization-hostile" })
103a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testStreamBuilder(int size) {
104a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testStreamBuilder(size, (s) -> {
105a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            Stream.Builder<Integer> sb = Stream.builder();
106a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).boxed().forEach(sb);
107a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
108a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
109a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
110a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testStreamBuilder(size, (s) -> {
111a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            Stream.Builder<Integer> sb = Stream.builder();
112a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).boxed().forEach(i -> {
113a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                Stream.Builder<Integer> _sb = sb.add(i);
114a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                assertTrue(sb == _sb);
115a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            });
116a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
117a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
118a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
119a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
120a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void testStreamBuilder(int size, Function<Integer, Stream<Integer>> supplier) {
121a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfRef<Integer> data = TestData.Factory.ofSupplier(String.format("[0, %d)", size),
122a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                                   () -> supplier.apply(size));
123a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
124a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
125a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
126a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).boxed().collect(toList())).
127a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
128a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
129a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
130a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(LambdaTestHelpers.identity())).
131a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).boxed().collect(toList())).
132a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
133a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
134a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
135a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    //
136a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
137a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test
138a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testIntSingleton() {
139a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfInt data = TestData.Factory.ofIntSupplier("[0, 1)",
140a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                             () -> IntStream.of(1));
141a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
142a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
143a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
144a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1)).
145a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
146a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
147a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
148a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
149a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1)).
150a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
151a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
152a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
153a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes")
154a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testIntAfterBuilding(int size) {
155a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        IntStream.Builder sb = IntStream.builder();
156a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        IntStream.range(0, size).forEach(sb);
157a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        sb.build();
158a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
159a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.accept(1));
160a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.add(1));
161a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.build());
162a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
163a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
164a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes", groups = { "serialization-hostile" })
165a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testIntStreamBuilder(int size) {
166a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testIntStreamBuilder(size, (s) -> {
167a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.Builder sb = IntStream.builder();
168a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).forEach(sb);
169a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
170a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
171a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
172a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testIntStreamBuilder(size, (s) -> {
173a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.Builder sb = IntStream.builder();
174a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).forEach(i -> {
175a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                IntStream.Builder _sb = sb.add(i);
176a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                assertTrue(sb == _sb);
177a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            });
178a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
179a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
180a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
181a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
182a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void testIntStreamBuilder(int size, Function<Integer, IntStream> supplier) {
183a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfInt data = TestData.Factory.ofIntSupplier(String.format("[0, %d)", size),
184a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                             () -> supplier.apply(size));
185a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
186a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
187a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
188a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).toArray()).
189a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
190a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
191a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
192a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
193a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).toArray()).
194a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
195a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
196a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
197a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    //
198a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
199a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test
200a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testLongSingleton() {
201a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfLong data = TestData.Factory.ofLongSupplier("[0, 1)",
202a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                               () -> LongStream.of(1));
203a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
204a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
205a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
206a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1L)).
207a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
208a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
209a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
210a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
211a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1L)).
212a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
213a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
214a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
215a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes")
216a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testLongAfterBuilding(int size) {
217a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        LongStream.Builder sb = LongStream.builder();
218a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        LongStream.range(0, size).forEach(sb);
219a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        sb.build();
220a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
221a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.accept(1));
222a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.add(1));
223a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.build());
224a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
225a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
226a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes", groups = { "serialization-hostile" })
227a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testLongStreamBuilder(int size) {
228a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testLongStreamBuilder(size, (s) -> {
229a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            LongStream.Builder sb = LongStream.builder();
230a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            LongStream.range(0, s).forEach(sb);
231a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
232a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
233a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
234a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testLongStreamBuilder(size, (s) -> {
235a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            LongStream.Builder sb = LongStream.builder();
236a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            LongStream.range(0, s).forEach(i -> {
237a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                LongStream.Builder _sb = sb.add(i);
238a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                assertTrue(sb == _sb);
239a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            });
240a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
241a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
242a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
243a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
244a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void testLongStreamBuilder(int size, Function<Integer, LongStream> supplier) {
245a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfLong data = TestData.Factory.ofLongSupplier(String.format("[0, %d)", size),
246a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                               () -> supplier.apply(size));
247a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
248a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
249a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
250a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(LongStream.range(0, size).toArray()).
251a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
252a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
253a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
254a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
255a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(LongStream.range(0, size).toArray()).
256a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
257a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
258a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
259a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    //
260a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
261a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test
262a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testDoubleSingleton() {
263a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfDouble data = TestData.Factory.ofDoubleSupplier("[0, 1)", () -> DoubleStream.of(1));
264a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
265a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
266a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
267a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1.0)).
268a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
269a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
270a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
271a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
272a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(Collections.singletonList(1.0)).
273a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
274a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
275a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
276a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes")
277a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testDoubleAfterBuilding(int size) {
278a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        DoubleStream.Builder sb = DoubleStream.builder();
279a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        IntStream.range(0, size).asDoubleStream().forEach(sb);
280a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        sb.build();
281a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
282a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.accept(1));
283a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.add(1));
284a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        checkISE(() -> sb.build());
285a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
286a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
287a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    @Test(dataProvider = "sizes", groups = { "serialization-hostile" })
288a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    public void testDoubleStreamBuilder(int size) {
289a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testDoubleStreamBuilder(size, (s) -> {
290a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            DoubleStream.Builder sb = DoubleStream.builder();
291a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).asDoubleStream().forEach(sb);
292a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
293a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
294a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
295a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        testDoubleStreamBuilder(size, (s) -> {
296a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            DoubleStream.Builder sb = DoubleStream.builder();
297a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            IntStream.range(0, s).asDoubleStream().forEach(i -> {
298a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                DoubleStream.Builder _sb = sb.add(i);
299a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                assertTrue(sb == _sb);
300a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            });
301a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin            return sb.build();
302a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        });
303a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
304a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
305a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    private void testDoubleStreamBuilder(int size, Function<Integer, DoubleStream> supplier) {
306a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        TestData.OfDouble data = TestData.Factory.ofDoubleSupplier(String.format("[0, %d)", size),
307a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                                                                   () -> supplier.apply(size));
308a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
309a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
310a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s).
311a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).asDoubleStream().toArray()).
312a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
313a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
314a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin        withData(data).
315a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                stream(s -> s.map(i -> i)).
316a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                expectedResult(IntStream.range(0, size).asDoubleStream().toArray()).
317a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin                exercise();
318a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin    }
319a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin
320a405b7ea164e472bcf6b75d9890021bd82e4d60dIgor Murashkin}
321