1289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/* 2289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 3289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 5289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is free software; you can redistribute it and/or modify it 6289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * under the terms of the GNU General Public License version 2 only, as 7289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * published by the Free Software Foundation. 8289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 9289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT 10289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * version 2 for more details (a copy is included in the LICENSE file that 13289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * accompanied this code). 14289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 15289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * You should have received a copy of the GNU General Public License version 16289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 2 along with this work; if not, write to the Free Software Foundation, 17289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * 19289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * or visit www.oracle.com if you need additional information or have any 21289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin * questions. 22289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin */ 23289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpackage org.openjdk.testlib.java.util.stream; 24289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 25289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport org.testng.annotations.DataProvider; 26289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 27289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.*; 28289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.Spliterators; 29289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.function.Supplier; 30289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinimport java.util.stream.*; 31289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 32289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin/** TestNG DataProvider for long-valued streams */ 33289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkinpublic class LongStreamTestDataProvider { 34289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] to0 = new long[0]; 35289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] to1 = new long[1]; 36289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] to10 = new long[10]; 37289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] to100 = new long[100]; 389add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer // Android-changed: remove 0..1000 test data from data providers. 399add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer // private static final long[] to1000 = new long[1000]; 40289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] reversed = new long[100]; 41289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] ones = new long[100]; 42289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] twice = new long[200]; 43289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final long[] pseudoRandom; 44289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 45289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final Object[][] testData; 46289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin private static final Object[][] spliteratorTestData; 47289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 48289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin static { 499add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer // Android-changed: remove 0..1000 test data from data providers. 509add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer long[][] arrays = {to0, to1, to10, to100}; 51289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (long[] arr : arrays) { 52289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i = 0; i < arr.length; i++) { 53289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin arr[i] = i; 54289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 55289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 56289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i = 0; i < reversed.length; i++) { 57289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin reversed[i] = reversed.length - i; 58289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 59289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i = 0; i < ones.length; i++) { 60289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin ones[i] = 1; 61289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 62289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin System.arraycopy(to100, 0, twice, 0, to100.length); 63289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin System.arraycopy(to100, 0, twice, to100.length, to100.length); 64289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin pseudoRandom = new long[LambdaTestHelpers.LONG_STRING.length()]; 65289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (int i = 0; i < LambdaTestHelpers.LONG_STRING.length(); i++) { 66289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin pseudoRandom[i] = (long) LambdaTestHelpers.LONG_STRING.charAt(i); 67289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 68289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 69289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 70289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin static final Object[][] arrays = { 71289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"empty", to0}, 72289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"0..1", to1}, 73289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"0..10", to10}, 74289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"0..100", to100}, 759add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer // Android-changed: remove 0..1000 test data from data providers. 769add833209e09e0c8dede31b7ed1ebdc90291e1cJoachim Sauer // {"0..1000", to1000}, 77289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"100x[1]", ones}, 78289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"2x[0..100]", twice}, 79289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"reverse 0..100", reversed}, 80289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin {"pseudorandom", pseudoRandom} 81289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin }; 82289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 83289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin static { 84289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin { 85289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Object[]> list = new ArrayList<>(); 86289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Object[] data : arrays) { 87289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin final Object name = data[0]; 88289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin final long[] longs = (long[]) data[1]; 89289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 90289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(new Object[]{"array:" + name, 91289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin TestData.Factory.ofArray("array:" + name, longs)}); 92289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 93289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin SpinedBuffer.OfLong isl = new SpinedBuffer.OfLong(); 94289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (long i : longs) { 95289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin isl.accept(i); 96289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 97289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(new Object[]{"SpinedList:" + name, 98289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin TestData.Factory.ofSpinedBuffer("SpinedList:" + name, isl)}); 99289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 100289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(streamDataDescr("LongStream.longRange(0,l): " + longs.length, 101289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> LongStream.range(0, longs.length))); 102289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin list.add(streamDataDescr("LongStream.longRangeClosed(0,l): " + longs.length, 103289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> LongStream.rangeClosed(0, longs.length))); 104289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 105289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin testData = list.toArray(new Object[0][]); 106289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 107289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 108289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin { 109289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin List<Object[]> spliterators = new ArrayList<>(); 110289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (Object[] data : arrays) { 111289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin final Object name = data[0]; 112289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin final long[] longs = (long[]) data[1]; 113289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 114289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin SpinedBuffer.OfLong isl = new SpinedBuffer.OfLong(); 115289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin for (long i : longs) { 116289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin isl.accept(i); 117289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 118289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 119289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("Arrays.s(array):" + name, 120289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> Arrays.spliterator(longs))); 121289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("Arrays.s(array,o,l):" + name, 122289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> Arrays.spliterator(longs, 0, longs.length / 2))); 123289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 124289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("SpinedBuffer.s():" + name, 125289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> isl.spliterator())); 126289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 127289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("Primitives.s(SpinedBuffer.iterator(), size):" + name, 128289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> Spliterators.spliterator(isl.iterator(), longs.length, 0))); 129289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("Primitives.s(SpinedBuffer.iterator()):" + name, 130289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> Spliterators.spliteratorUnknownSize(isl.iterator(), 0))); 131289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 132289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("LongStream.longRange(0,l):" + name, 133289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> LongStream.range(0, longs.length).spliterator())); 134289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliterators.add(splitDescr("LongStream.longRangeClosed(0,l):" + name, 135289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin () -> LongStream.rangeClosed(0, longs.length).spliterator())); 136289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Need more! 137289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 138289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin spliteratorTestData = spliterators.toArray(new Object[0][]); 139289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 140289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 141289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 142289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 143289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin static <T> Object[] streamDataDescr(String description, Supplier<LongStream> s) { 144289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new Object[] { description, TestData.Factory.ofLongSupplier(description, s) }; 145289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 146289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 147289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin static <T> Object[] splitDescr(String description, Supplier<Spliterator.OfLong> s) { 148289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return new Object[] { description, s }; 149289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 150289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 151289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // Return an array of ( String name, LongStreamTestData ) 152289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @DataProvider(name = "LongStreamTestData") 153289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static Object[][] makeLongStreamTestData() { 154289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return testData; 155289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 156289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin 157289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin // returns an array of (String name, Supplier<PrimitiveSpliterator<Long>>) 158289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin @DataProvider(name = "LongSpliterator") 159289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin public static Object[][] spliteratorProvider() { 160289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin return spliteratorTestData; 161289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin } 162289e51c2258b001f2aa6d6e67b21be7bb65d5102Igor Murashkin} 163