|
Java example source code file (ToArrayOpTest.java)
This example Java source code file (ToArrayOpTest.java) is included in the alvinalexander.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Learn more about this Java project at its project page.
The ToArrayOpTest.java Java example source code
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.openjdk.tests.java.util.stream;
import org.testng.annotations.Test;
import java.util.*;
import java.util.function.Function;
import java.util.stream.*;
import static java.util.stream.LambdaTestHelpers.*;
import static org.testng.Assert.assertEquals;
/**
* ToArrayOpTest
*
*/
@Test
public class ToArrayOpTest extends OpTestCase {
public void testToArray() {
assertCountSum(Arrays.asList(countTo(0).stream().toArray()), 0, 0);
assertCountSum(Arrays.asList(countTo(10).stream().toArray()), 10, 55);
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testOps(String name, TestData.OfRef<Integer> data) {
exerciseTerminalOps(data, s -> s.toArray());
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testOpsWithMap(String name, TestData.OfRef<Integer> data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
Object[] objects = exerciseTerminalOps(data, s -> s.map(i -> (Integer) (i + i)), s -> s.toArray());
assertTrue(objects.length == data.size());
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testOpsWithSorted(String name, TestData.OfRef<Integer> data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
Object[] objects = exerciseTerminalOps(data, s -> s.sorted(), s -> s.toArray());
assertTrue(objects.length == data.size());
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testOpsWithFlatMap(String name, TestData.OfRef<Integer> data) {
// Double the size of the source
// Fixed size optimizations will not be used
Object[] objects = exerciseTerminalOps(data,
s -> s.flatMap(e -> Arrays.stream(new Object[] { e, e })),
s -> s.toArray());
assertTrue(objects.length == data.size() * 2);
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testOpsWithFilter(String name, TestData.OfRef<Integer> data) {
// Reduce the size of the source
// Fixed size optimizations will not be used
exerciseTerminalOps(data, s -> s.filter(LambdaTestHelpers.pEven), s -> s.toArray());
}
public void testAsArrayWithType() {
exerciseTerminalOps(
TestData.Factory.ofCollection("", Arrays.asList(1.1, 2.2, 3.4, 4.4)),
s -> // First pipeline slice using Object[] with Double elements
s.sorted()
// Second pipeline slice using Integer[] with Integer elements
.map((Double d) -> Integer.valueOf(d.intValue())).sorted(),
s -> s.toArray(Integer[]::new));
}
private List<Function>> uniqueAndSortedPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.distinct(),
s -> s.distinct(),
s -> s.sorted(),
s -> s.sorted()
));
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class)
public void testDistinctAndSortedPermutations(String name, TestData.OfRef<Integer> data) {
for (Function<Stream> f : uniqueAndSortedPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
Integer[] is = exerciseTerminalOps(data, f, s -> s.toArray(Integer[]::new));
assertEquals(is.getClass(), Integer[].class);
Number[] ns = exerciseTerminalOps(data, f, s -> s.toArray(Number[]::new));
assertEquals(ns.getClass(), Number[].class);
if (data.size() > 0) {
Exception caught = null;
try {
exerciseTerminalOps(data, f, s -> s.toArray(String[]::new));
} catch (Exception e) {
caught = e;
}
assertTrue(caught != null);
assertEquals(caught.getClass(), ArrayStoreException.class);
}
}
}
private List<Function>> statefulOpPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.limit(10),
s -> s.distinct(),
s -> s.sorted()
));
private <T extends Object> ResultAsserter statefulOpResultAsserter(TestData.OfRef data) {
return (act, exp, ord, par) -> {
if (par) {
if (!data.isOrdered()) {
// Relax the checking if the data source is unordered
// It is not exactly possible to determine if the limit
// operation is present and if it is before or after
// the sorted operation
// If the limit operation is present and before the sorted
// operation then the sub-set output after limit is a
// non-deterministic sub-set of the source
List<Integer> expected = new ArrayList<>();
data.forEach(expected::add);
List<T> actual = Arrays.asList(act);
assertEquals(actual.size(), exp.length);
assertTrue(expected.containsAll(actual));
return;
}
else if (!ord) {
LambdaTestHelpers.assertContentsUnordered(Arrays.asList(act),
Arrays.asList(exp));
return;
}
}
assertEquals(act, exp);
};
}
@Test(dataProvider = "StreamTestData<Integer>", dataProviderClass = StreamTestDataProvider.class,
groups = { "serialization-hostile" })
public void testStatefulOpPermutations(String name, TestData.OfRef<Integer> data) {
for (Function<Stream> f : statefulOpPermutations) {
withData(data).terminal(f, s -> s.toArray())
.resultAsserter(statefulOpResultAsserter(data))
.exercise();
Integer[] is = withData(data).terminal(f, s -> s.toArray(Integer[]::new))
.resultAsserter(statefulOpResultAsserter(data))
.exercise();
assertEquals(is.getClass(), Integer[].class);
Number[] ns = withData(data).terminal(f, s -> s.toArray(Number[]::new))
.resultAsserter(statefulOpResultAsserter(data))
.exercise();
assertEquals(ns.getClass(), Number[].class);
if (data.size() > 0) {
Exception caught = null;
try {
exerciseTerminalOps(data, f, s -> s.toArray(String[]::new));
} catch (Exception e) {
caught = e;
}
assertTrue(caught != null);
assertEquals(caught.getClass(), ArrayStoreException.class);
}
}
}
//
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntOps(String name, TestData.OfInt data) {
exerciseTerminalOps(data, s -> s.toArray());
}
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntOpsWithMap(String name, TestData.OfInt data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
int[] ints = exerciseTerminalOps(data, s -> s.map(i -> i + i), s -> s.toArray());
assertTrue(ints.length == data.size());
}
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntOpsWithSorted(String name, TestData.OfInt data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
int[] ints = exerciseTerminalOps(data, s -> s.sorted(), (IntStream s) -> s.toArray());
assertTrue(ints.length == data.size());
}
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntOpsWithFlatMap(String name, TestData.OfInt data) {
// Int the size of the source
// Fixed size optimizations will not be used
int[] objects = exerciseTerminalOps(data,
s -> s.flatMap(e -> Arrays.stream(new int[] { e, e })),
s -> s.toArray());
assertTrue(objects.length == data.size() * 2);
}
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntOpsWithFilter(String name, TestData.OfInt data) {
// Reduce the size of the source
// Fixed size optimizations will not be used
exerciseTerminalOps(data, s -> s.filter(LambdaTestHelpers.ipEven), s -> s.toArray());
}
private List<Function intUniqueAndSortedPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.distinct(),
s -> s.distinct(),
s -> s.sorted(),
s -> s.sorted()
));
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntDistinctAndSortedPermutations(String name, TestData.OfInt data) {
for (Function<IntStream, IntStream> f : intUniqueAndSortedPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
private List<Function intStatefulOpPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.limit(10),
s -> s.distinct(),
s -> s.sorted()
));
@Test(dataProvider = "IntStreamTestData", dataProviderClass = IntStreamTestDataProvider.class)
public void testIntStatefulOpPermutations(String name, TestData.OfInt data) {
for (Function<IntStream, IntStream> f : intStatefulOpPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
//
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongOps(String name, TestData.OfLong data) {
exerciseTerminalOps(data, s -> s.toArray());
}
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongOpsWithMap(String name, TestData.OfLong data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
long[] longs = exerciseTerminalOps(data, s -> s.map(i -> i + i), s -> s.toArray());
assertTrue(longs.length == data.size());
}
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongOpsWithSorted(String name, TestData.OfLong data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
long[] longs = exerciseTerminalOps(data, s -> s.sorted(), (LongStream s) -> s.toArray());
assertTrue(longs.length == data.size());
}
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongOpsWithFlatMap(String name, TestData.OfLong data) {
// Long the size of the source
// Fixed size optimizations will not be used
long[] objects = exerciseTerminalOps(data,
s -> s.flatMap(e -> Arrays.stream(new long[] { e, e })),
s -> s.toArray());
assertTrue(objects.length == data.size() * 2);
}
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongOpsWithFilter(String name, TestData.OfLong data) {
// Reduce the size of the source
// Fixed size optimizations will not be used
exerciseTerminalOps(data, s -> s.filter(LambdaTestHelpers.lpEven), s -> s.toArray());
}
private List<Function longUniqueAndSortedPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.distinct(),
s -> s.distinct(),
s -> s.sorted(),
s -> s.sorted()
));
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongDistinctAndSortedPermutations(String name, TestData.OfLong data) {
for (Function<LongStream, LongStream> f : longUniqueAndSortedPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
private List<Function longStatefulOpPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.limit(10),
s -> s.distinct(),
s -> s.sorted()
));
@Test(dataProvider = "LongStreamTestData", dataProviderClass = LongStreamTestDataProvider.class)
public void testLongStatefulOpPermutations(String name, TestData.OfLong data) {
for (Function<LongStream, LongStream> f : longStatefulOpPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
//
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleOps(String name, TestData.OfDouble data) {
exerciseTerminalOps(data, s -> s.toArray());
}
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleOpsWithMap(String name, TestData.OfDouble data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
double[] doubles = exerciseTerminalOps(data, s -> s.map(i -> i + i), s -> s.toArray());
assertTrue(doubles.length == data.size());
}
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleOpsWithSorted(String name, TestData.OfDouble data) {
// Retain the size of the source
// This should kick in the parallel evaluation optimization for tasks stuffing elements into a shared array
double[] doubles = exerciseTerminalOps(data, s -> s.sorted(), (DoubleStream s) -> s.toArray());
assertTrue(doubles.length == data.size());
}
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleOpsWithFlatMap(String name, TestData.OfDouble data) {
// Double the size of the source
// Fixed size optimizations will not be used
double[] objects = exerciseTerminalOps(data,
s -> s.flatMap(e -> Arrays.stream(new double[] { e, e })),
s -> s.toArray());
assertTrue(objects.length == data.size() * 2);
}
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleOpsWithFilter(String name, TestData.OfDouble data) {
// Reduce the size of the source
// Fixed size optimizations will not be used
exerciseTerminalOps(data, s -> s.filter(LambdaTestHelpers.dpEven), s -> s.toArray());
}
private List<Function doubleUniqueAndSortedPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.distinct(),
s -> s.distinct(),
s -> s.sorted(),
s -> s.sorted()
));
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleDistinctAndSortedPermutations(String name, TestData.OfDouble data) {
for (Function<DoubleStream, DoubleStream> f : doubleUniqueAndSortedPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
private List<Function doubleStatefulOpPermutations =
LambdaTestHelpers.permuteStreamFunctions(Arrays.asList(
s -> s.limit(10),
s -> s.distinct(),
s -> s.sorted()
));
@Test(dataProvider = "DoubleStreamTestData", dataProviderClass = DoubleStreamTestDataProvider.class)
public void testDoubleStatefulOpPermutations(String name, TestData.OfDouble data) {
for (Function<DoubleStream, DoubleStream> f : doubleStatefulOpPermutations) {
exerciseTerminalOps(data, f, s -> s.toArray());
}
}
}
Other Java examples (source code examples)
Here is a short list of links related to this Java ToArrayOpTest.java source code file:
|