1/*
2 * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * @test 8037857
26 * @summary tests for stream and spliterator factory methods
27 * @run testng StreamAndSpliterator
28 */
29
30import org.testng.annotations.Test;
31
32import java.util.Arrays;
33import java.util.Spliterators;
34
35import org.testng.Assert.ThrowingRunnable;
36
37import static org.testng.Assert.assertThrows;
38
39public class StreamAndSpliterator {
40    @Test
41    public void testStreamNPEs() {
42        assertThrowsNPE(() -> Arrays.stream((int[]) null, 0, 0));
43        assertThrowsNPE(() -> Arrays.stream((long[]) null, 0, 0));
44        assertThrowsNPE(() -> Arrays.stream((double[]) null, 0, 0));
45        assertThrowsNPE(() -> Arrays.stream((String[]) null, 0, 0));
46    }
47
48    @Test
49    public void testStreamAIOBEs() {
50        // origin > fence
51        assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, 1, 0));
52        assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, 1, 0));
53        assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, 1, 0));
54        assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, 1, 0));
55
56        // bad origin
57        assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, -1, 0));
58        assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, -1, 0));
59        assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, -1, 0));
60        assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, -1, 0));
61
62        // bad fence
63        assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, 0, 1));
64        assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, 0, 1));
65        assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, 0, 1));
66        assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, 0, 1));
67    }
68
69
70    @Test
71    public void testSpliteratorNPEs() {
72        assertThrowsNPE(() -> Arrays.spliterator((int[]) null, 0, 0));
73        assertThrowsNPE(() -> Arrays.spliterator((long[]) null, 0, 0));
74        assertThrowsNPE(() -> Arrays.spliterator((double[]) null, 0, 0));
75        assertThrowsNPE(() -> Arrays.spliterator((String[]) null, 0, 0));
76    }
77
78    @Test
79    public void testSpliteratorAIOBEs() {
80        // origin > fence
81        assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, 1, 0));
82        assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, 1, 0));
83        assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, 1, 0));
84        assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, 1, 0));
85
86        // bad origin
87        assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, -1, 0));
88        assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, -1, 0));
89        assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, -1, 0));
90        assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, -1, 0));
91
92        // bad fence
93        assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, 0, 1));
94        assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, 0, 1));
95        assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, 0, 1));
96        assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, 0, 1));
97    }
98
99
100    @Test
101    public void testSpliteratorNPEsFromSpliterators() {
102        assertThrowsNPE(() -> Spliterators.spliterator((int[]) null, 0, 0, 0));
103        assertThrowsNPE(() -> Spliterators.spliterator((long[]) null, 0, 0, 0));
104        assertThrowsNPE(() -> Spliterators.spliterator((double[]) null, 0, 0, 0));
105        assertThrowsNPE(() -> Spliterators.spliterator((String[]) null, 0, 0, 0));
106    }
107
108    @Test
109    public void testSpliteratorAIOBEsFromSpliterators() {
110        // origin > fence
111        assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, 1, 0, 0));
112        assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, 1, 0, 0));
113        assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, 1, 0, 0));
114        assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, 1, 0, 0));
115
116        // bad origin
117        assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, -1, 0, 0));
118        assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, -1, 0, 0));
119        assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, -1, 0, 0));
120        assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, -1, 0, 0));
121
122        // bad fence
123        assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, 0, 1, 0));
124        assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, 0, 1, 0));
125        assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, 0, 1, 0));
126        assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, 0, 1, 0));
127    }
128
129    void assertThrowsNPE(ThrowingRunnable r) {
130        assertThrows(NullPointerException.class, r);
131    }
132
133    void assertThrowsAIOOB(ThrowingRunnable r) {
134        assertThrows(ArrayIndexOutOfBoundsException.class, r);
135    }
136}
137