1 /* 2 * Copyright (c) 2016, 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 26 * @bug 8072727 27 */ 28 29 package org.openjdk.tests.java.util.stream; 30 31 import java.util.Objects; 32 import java.util.function.Supplier; 33 import java.util.stream.BaseStream; 34 import java.util.stream.DoubleStream; 35 import java.util.stream.IntStream; 36 import java.util.stream.LongStream; 37 import java.util.stream.OpTestCase; 38 import java.util.stream.SpliteratorTestHelper; 39 import java.util.stream.Stream; 40 41 import static java.util.stream.ThowableHelper.checkNPE; 42 43 import org.testng.annotations.DataProvider; 44 import org.testng.annotations.Test; 45 46 @Test 47 public class IterateTest extends OpTestCase { 48 private static Object[] row(String name, Supplier<BaseStream<?, ?>> supplier) { 49 return new Object[] {name, supplier}; 50 } 51 52 @DataProvider(name = "IterateStreamsData.OfRef") 53 public static Object[][] makeIterateStreamsTestData() { 54 Object[][] data = { 55 row("ref.empty", () -> Stream.iterate(1, x -> x < 0, x -> x * 2)), 56 row("ref.one", () -> Stream.iterate(1, x -> x < 2, x -> x * 2)), 57 row("ref.ten", () -> Stream.iterate(1, x -> x < 1000, x -> x * 2)), 58 row("ref.nullCheck", () -> Stream.iterate(10, Objects::nonNull, x -> x > 0 ? x - 1 : null)) 59 }; 60 return data; 61 } 62 63 @DataProvider(name = "IterateStreamsData.OfInt") 64 public static Object[][] makeIterateIntStreamsTestData() { 65 Object[][] data = { 66 row("int.empty", () -> IntStream.iterate(1, x -> x < 0, x -> x + 1)), 67 row("int.one", () -> IntStream.iterate(1, x -> x < 2, x -> x + 1)), 68 row("int.ten", () -> IntStream.iterate(1, x -> x <= 10, x -> x + 1)), 69 }; 70 return data; 71 } 72 73 @DataProvider(name = "IterateStreamsData.OfLong") 74 public static Object[][] makeIterateLongStreamsTestData() { 75 Object[][] data = { 76 row("long.empty", () -> LongStream.iterate(1L, x -> x < 0, x -> x + 1)), 77 row("long.one", () -> LongStream.iterate(1L, x -> x < 2, x -> x + 1)), 78 row("long.ten", () -> LongStream.iterate(1L, x -> x <= 10, x -> x + 1)), 79 }; 80 return data; 81 } 82 83 @DataProvider(name = "IterateStreamsData.OfDouble") 84 public static Object[][] makeIterateDoubleStreamsTestData() { 85 Object[][] data = { 86 row("double.empty", () -> DoubleStream.iterate(1.0, x -> x < 0, x -> x + 1)), 87 row("double.one", () -> DoubleStream.iterate(1.0, x -> x < 2, x -> x + 1)), 88 row("double.ten", () -> DoubleStream.iterate(1.0, x -> x <= 10, x -> x + 1)), 89 }; 90 return data; 91 } 92 93 @Test(dataProvider = "IterateStreamsData.OfRef") 94 public void testRefIterate(String name, Supplier<Stream<Integer>> data) { 95 SpliteratorTestHelper.testSpliterator(() -> data.get().spliterator()); 96 } 97 98 @Test(dataProvider = "IterateStreamsData.OfInt") 99 public void testIntIterate(String name, Supplier<IntStream> data) { 100 SpliteratorTestHelper.testIntSpliterator(() -> data.get().spliterator()); 101 } 102 103 @Test(dataProvider = "IterateStreamsData.OfLong") 104 public void testLongIterate(String name, Supplier<LongStream> data) { 105 SpliteratorTestHelper.testLongSpliterator(() -> data.get().spliterator()); 106 } 107 108 @Test(dataProvider = "IterateStreamsData.OfDouble") 109 public void testDoubleIterate(String name, Supplier<DoubleStream> data) { 110 SpliteratorTestHelper.testDoubleSpliterator(() -> data.get().spliterator()); 111 } 112 113 @Test 114 public void testNPE() { 115 checkNPE(() -> Stream.iterate("", null, x -> x + "a")); 116 checkNPE(() -> Stream.iterate("", String::isEmpty, null)); 117 checkNPE(() -> IntStream.iterate(0, null, x -> x + 1)); 118 checkNPE(() -> IntStream.iterate(0, x -> x < 10, null)); 119 checkNPE(() -> LongStream.iterate(0, null, x -> x + 1)); 120 checkNPE(() -> LongStream.iterate(0, x -> x < 10, null)); 121 checkNPE(() -> DoubleStream.iterate(0, null, x -> x + 1)); 122 checkNPE(() -> DoubleStream.iterate(0, x -> x < 10, null)); 123 } 124 }