jdk/test/java/util/Arrays/ParallelPrefix.java
author martin
Tue, 15 Sep 2015 21:56:04 -0700
changeset 32649 2ee9017c7597
parent 31140 26e746beb490
child 41749 e29b8b528cdb
permissions -rw-r--r--
8136583: Core libraries should use blessed modifier order Summary: Run blessed-modifier-order script (see bug) Reviewed-by: psandoz, chegar, alanb, plevart
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     1
/*
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     4
 *
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     8
 *
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    13
 * accompanied this code).
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    14
 *
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    18
 *
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    21
 * questions.
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    22
 */
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    23
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    24
/**
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    25
 * @test 8014076 8025067
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    26
 * @summary unit test for Arrays.ParallelPrefix().
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    27
 * @author Tristan Yan
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    28
 * @run testng ParallelPrefix
31140
26e746beb490 8085879: Mark intermittently failing: java/util/Arrays/ParallelPrefix.java
amlu
parents: 30966
diff changeset
    29
 * @key intermittent
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    30
 */
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    31
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    32
import java.util.Arrays;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    33
import java.util.function.BinaryOperator;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    34
import java.util.function.DoubleBinaryOperator;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    35
import java.util.function.Function;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    36
import java.util.function.IntBinaryOperator;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    37
import java.util.function.LongBinaryOperator;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    38
import java.util.stream.IntStream;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    39
import java.util.stream.LongStream;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    40
import static org.testng.Assert.*;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    41
import org.testng.annotations.DataProvider;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    42
import org.testng.annotations.Test;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    43
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    44
public class ParallelPrefix {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    45
    //Array size less than MIN_PARTITION
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31140
diff changeset
    46
    private static final int SMALL_ARRAY_SIZE = 1 << 3;
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    47
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    48
    //Array size equals MIN_PARTITION
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31140
diff changeset
    49
    private static final int THRESHOLD_ARRAY_SIZE = 1 << 4;
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    50
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    51
    //Array size greater than MIN_PARTITION
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31140
diff changeset
    52
    private static final int MEDIUM_ARRAY_SIZE = 1 << 8;
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    53
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    54
    //Array size much greater than MIN_PARTITION
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31140
diff changeset
    55
    private static final int LARGE_ARRAY_SIZE = 1 << 14;
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    56
32649
2ee9017c7597 8136583: Core libraries should use blessed modifier order
martin
parents: 31140
diff changeset
    57
    private static final int[] ARRAY_SIZE_COLLECTION  = new int[]{
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    58
        SMALL_ARRAY_SIZE,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    59
        THRESHOLD_ARRAY_SIZE,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    60
        MEDIUM_ARRAY_SIZE,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    61
        LARGE_ARRAY_SIZE
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    62
    };
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    63
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
    64
    @DataProvider(name = "intSet")
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    65
    public static Object[][] intSet(){
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    66
        return genericData(size -> IntStream.range(0, size).toArray(),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    67
                new IntBinaryOperator[]{
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    68
                    Integer::sum,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    69
                    Integer::min});
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    70
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    71
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
    72
    @DataProvider(name = "longSet")
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    73
    public static Object[][] longSet(){
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    74
        return genericData(size -> LongStream.range(0, size).toArray(),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    75
                new LongBinaryOperator[]{
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    76
                    Long::sum,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    77
                    Long::min});
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    78
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    79
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
    80
    @DataProvider(name = "doubleSet")
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    81
    public static Object[][] doubleSet(){
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    82
        return genericData(size -> IntStream.range(0, size).mapToDouble(i -> (double)i).toArray(),
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    83
                new DoubleBinaryOperator[]{
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    84
                    Double::sum,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    85
                    Double::min});
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    86
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    87
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
    88
    @DataProvider(name = "stringSet")
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    89
    public static Object[][] stringSet(){
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    90
        Function<Integer, String[]> stringsFunc = size ->
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    91
                IntStream.range(0, size).mapToObj(Integer::toString).toArray(String[]::new);
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    92
        BinaryOperator<String> concat = String::concat;
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    93
        return genericData(stringsFunc,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    94
                (BinaryOperator<String>[]) new BinaryOperator[]{
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
    95
                    concat });
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    96
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    97
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    98
    private static <T, OPS> Object[][] genericData(Function<Integer, T> generateFunc, OPS[] ops) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
    99
        //test arrays which size is equals n-1, n, n+1, test random data
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   100
        Object[][] data = new Object[ARRAY_SIZE_COLLECTION.length * 3 * ops.length][4];
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   101
        for(int n = 0; n < ARRAY_SIZE_COLLECTION.length; n++ ) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   102
            for(int testValue = -1 ; testValue <= 1; testValue++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   103
                int array_size = ARRAY_SIZE_COLLECTION[n] + testValue;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   104
                for(int opsN = 0; opsN < ops.length; opsN++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   105
                    int index = n * 3 * ops.length + (testValue + 1) * ops.length + opsN;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   106
                    data[index][0] = generateFunc.apply(array_size);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   107
                    data[index][1] = array_size / 3;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   108
                    data[index][2] = 2 * array_size / 3;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   109
                    data[index][3] = ops[opsN];
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   110
                }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   111
            }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   112
        }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   113
        return data;
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   114
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   115
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   116
    @Test(dataProvider="intSet")
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   117
    public void testParallelPrefixForInt(int[] data, int fromIndex, int toIndex, IntBinaryOperator op) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   118
        int[] sequentialResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   119
        for (int index = fromIndex + 1; index < toIndex; index++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   120
            sequentialResult[index ] = op.applyAsInt(sequentialResult[index  - 1], sequentialResult[index]);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   121
        }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   122
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   123
        int[] parallelResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   124
        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   125
        assertArraysEqual(parallelResult, sequentialResult);
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   126
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   127
        int[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   128
        Arrays.parallelPrefix(parallelRangeResult, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   129
        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   130
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   131
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   132
    @Test(dataProvider="longSet")
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   133
    public void testParallelPrefixForLong(long[] data, int fromIndex, int toIndex, LongBinaryOperator op) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   134
        long[] sequentialResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   135
        for (int index = fromIndex + 1; index < toIndex; index++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   136
            sequentialResult[index ] = op.applyAsLong(sequentialResult[index  - 1], sequentialResult[index]);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   137
        }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   138
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   139
        long[] parallelResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   140
        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   141
        assertArraysEqual(parallelResult, sequentialResult);
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   142
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   143
        long[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   144
        Arrays.parallelPrefix(parallelRangeResult, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   145
        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   146
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   147
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   148
    @Test(dataProvider="doubleSet")
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   149
    public void testParallelPrefixForDouble(double[] data, int fromIndex, int toIndex, DoubleBinaryOperator op) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   150
        double[] sequentialResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   151
        for (int index = fromIndex + 1; index < toIndex; index++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   152
            sequentialResult[index ] = op.applyAsDouble(sequentialResult[index  - 1], sequentialResult[index]);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   153
        }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   154
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   155
        double[] parallelResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   156
        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   157
        assertArraysEqual(parallelResult, sequentialResult);
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   158
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   159
        double[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   160
        Arrays.parallelPrefix(parallelRangeResult, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   161
        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   162
    }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   163
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   164
    @Test(dataProvider="stringSet")
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   165
    public void testParallelPrefixForStringr(String[] data , int fromIndex, int toIndex, BinaryOperator<String> op) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   166
        String[] sequentialResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   167
        for (int index = fromIndex + 1; index < toIndex; index++) {
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   168
            sequentialResult[index ] = op.apply(sequentialResult[index  - 1], sequentialResult[index]);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   169
        }
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   170
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   171
        String[] parallelResult = data.clone();
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   172
        Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   173
        assertArraysEqual(parallelResult, sequentialResult);
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   174
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   175
        String[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, toIndex);
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   176
        Arrays.parallelPrefix(parallelRangeResult, op);
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   177
        assertArraysEqual(parallelRangeResult, Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   178
    }
20492
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   179
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   180
    @Test
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   181
    public void testNPEs() {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   182
        // null array
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   183
        assertThrows( () -> Arrays.parallelPrefix((int[]) null, Integer::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   184
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   185
        assertThrows( () -> Arrays.parallelPrefix((long []) null, Long::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   186
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   187
        assertThrows( () -> Arrays.parallelPrefix((double []) null, Double::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   188
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   189
        assertThrows( () -> Arrays.parallelPrefix((String []) null, String::concat),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   190
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   191
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   192
        // null array w/ range
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   193
        assertThrows( () -> Arrays.parallelPrefix((int[]) null, 0, 0, Integer::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   194
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   195
        assertThrows( () -> Arrays.parallelPrefix((long []) null, 0, 0, Long::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   196
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   197
        assertThrows( () -> Arrays.parallelPrefix((double []) null, 0, 0, Double::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   198
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   199
        assertThrows( () -> Arrays.parallelPrefix((String []) null, 0, 0, String::concat),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   200
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   201
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   202
        // null op
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   203
        assertThrows( () -> Arrays.parallelPrefix(new int[] {}, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   204
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   205
        assertThrows( () -> Arrays.parallelPrefix(new long[] {}, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   206
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   207
        assertThrows( () -> Arrays.parallelPrefix(new double[] {}, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   208
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   209
        assertThrows( () -> Arrays.parallelPrefix(new String[] {}, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   210
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   211
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   212
        // null op w/ range
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   213
        assertThrows( () -> Arrays.parallelPrefix(new int[] {}, 0, 0, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   214
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   215
        assertThrows( () -> Arrays.parallelPrefix(new long[] {}, 0, 0, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   216
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   217
        assertThrows( () -> Arrays.parallelPrefix(new double[] {}, 0, 0, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   218
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   219
        assertThrows( () -> Arrays.parallelPrefix(new String[] {}, 0, 0, null),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   220
                NullPointerException.class, "should throw NPE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   221
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   222
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   223
    @Test
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   224
    public void testIAEs() {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   225
        assertThrows( () -> Arrays.parallelPrefix(new int[] {}, 1, 0, Integer::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   226
                IllegalArgumentException.class, "should throw IAE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   227
        assertThrows( () -> Arrays.parallelPrefix(new long[] {}, 1, 0, Long::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   228
                IllegalArgumentException.class, "should throw IAE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   229
        assertThrows( () -> Arrays.parallelPrefix(new double[] {}, 1, 0, Double::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   230
                IllegalArgumentException.class, "should throw IAE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   231
        assertThrows( () -> Arrays.parallelPrefix(new String[] {}, 1, 0, String::concat),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   232
                IllegalArgumentException.class, "should throw IAE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   233
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   234
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   235
    @Test
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   236
    public void testAIOBEs() {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   237
        // bad "fromIndex"
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   238
        assertThrows( () -> Arrays.parallelPrefix(new int[] {}, -1, 0, Integer::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   239
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   240
        assertThrows( () -> Arrays.parallelPrefix(new long[] {}, -1, 0, Long::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   241
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   242
        assertThrows( () -> Arrays.parallelPrefix(new double[] {}, -1, 0, Double::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   243
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   244
        assertThrows( () -> Arrays.parallelPrefix(new String[] {}, -1, 0, String::concat),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   245
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   246
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   247
        // bad "toIndex"
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   248
        assertThrows( () -> Arrays.parallelPrefix(new int[] {}, 0, 1, Integer::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   249
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   250
        assertThrows( () -> Arrays.parallelPrefix(new long[] {}, 0, 1, Long::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   251
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   252
        assertThrows( () -> Arrays.parallelPrefix(new double[] {}, 0, 1, Double::max),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   253
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   254
        assertThrows( () -> Arrays.parallelPrefix(new String[] {}, 0, 1, String::concat),
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   255
                ArrayIndexOutOfBoundsException.class, "should throw AIOBE");
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   256
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   257
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   258
    // "library" code
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   259
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   260
    public interface Thrower<T extends Throwable> {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   261
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   262
        public void run() throws T;
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   263
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   264
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   265
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   266
    public static <T extends Throwable> void assertThrows(Thrower<T> thrower, Class<T> throwable) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   267
        assertThrows(thrower, throwable, null);
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   268
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   269
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   270
    public static <T extends Throwable> void assertThrows(Thrower<T> thrower, Class<T> throwable, String message) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   271
        Throwable thrown;
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   272
        try {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   273
            thrower.run();
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   274
            thrown = null;
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   275
        } catch (Throwable caught) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   276
            thrown = caught;
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   277
        }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   278
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   279
        assertInstance(thrown, throwable,
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   280
            ((null != message) ? message : "") +
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   281
            " Failed to throw " + throwable.getCanonicalName());
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   282
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   283
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   284
    public static <T extends Throwable> void assertThrows(Class<T> throwable, String message, Thrower<T>... throwers) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   285
        for(Thrower<T> thrower : throwers) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   286
            assertThrows(thrower, throwable, message);
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   287
        }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   288
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   289
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   290
    public static void assertInstance(Object actual, Class<?> expected) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   291
        assertInstance(expected.isInstance(actual), null);
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   292
    }
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   293
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   294
    public static void assertInstance(Object actual, Class<?> expected, String message) {
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   295
        assertTrue(expected.isInstance(actual), message);
11418b1f61ff 8025067: Unconditionally throw NPE if null op provided to Arrays.parallelPrefix
mduigou
parents: 18555
diff changeset
   296
    }
30966
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   297
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   298
    static void assertArraysEqual(int[] actual, int[] expected) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   299
        try {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   300
            assertEquals(actual, expected, "");
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   301
        } catch (AssertionError x) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   302
            throw new AssertionError(String.format("Expected:%s, actual:%s",
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   303
                    Arrays.toString(expected), Arrays.toString(actual)), x);
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   304
        }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   305
    }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   306
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   307
    static void assertArraysEqual(long[] actual, long[] expected) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   308
        try {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   309
            assertEquals(actual, expected, "");
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   310
        } catch (AssertionError x) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   311
            throw new AssertionError(String.format("Expected:%s, actual:%s",
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   312
                    Arrays.toString(expected), Arrays.toString(actual)), x);
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   313
        }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   314
    }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   315
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   316
    static void assertArraysEqual(double[] actual, double[] expected) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   317
        try {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   318
            assertEquals(actual, expected, "");
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   319
        } catch (AssertionError x) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   320
            throw new AssertionError(String.format("Expected:%s, actual:%s",
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   321
                    Arrays.toString(expected), Arrays.toString(actual)), x);
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   322
        }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   323
    }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   324
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   325
    static void assertArraysEqual(String[] actual, String[] expected) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   326
        try {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   327
            assertEquals(actual, expected, "");
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   328
        } catch (AssertionError x) {
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   329
            throw new AssertionError(String.format("Expected:%s, actual:%s",
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   330
                    Arrays.toString(expected), Arrays.toString(actual)), x);
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   331
        }
a832d39b95a0 8085858: Better failure output for test/java/util/Arrays/ParallelPrefix.java
chegar
parents: 20492
diff changeset
   332
    }
18555
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   333
}
d69e2a644e38 8012647: Add Arrays.parallelPrefix (prefix sum, scan, cumulative sum)
chegar
parents:
diff changeset
   334