alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

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.

Java - Java tags/keywords

arraylist, doublestreamtestdata, exception, function, integer, intstreamtestdata, list, longstreamtestdata, number, object, optestcase, resultasserter, test, toarrayoptest, util

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:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.