src/jdk.internal.vm.compiler/share/classes/org.graalvm.util.test/src/org/graalvm/util/test/CollectionUtilTest.java
author dholmes
Thu, 14 Nov 2019 22:36:40 -0500
changeset 59105 76ae9aa0e794
parent 52910 583fd71c47d6
permissions -rw-r--r--
8233549: Thread interrupted state must only be accessed when not in a safepoint-safe state Reviewed-by: dcubed, sspitsyn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48861
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     1
/*
52910
583fd71c47d6 8214023: Update Graal
dlong
parents: 50858
diff changeset
     2
 * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
48861
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     4
 *
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     7
 * published by the Free Software Foundation.
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     8
 *
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    13
 * accompanied this code).
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    14
 *
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    18
 *
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    21
 * questions.
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    22
 */
50858
2d3e99a72541 8205824: Update Graal
never
parents: 48861
diff changeset
    23
2d3e99a72541 8205824: Update Graal
never
parents: 48861
diff changeset
    24
48861
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    25
package org.graalvm.util.test;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    26
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    27
import java.util.ArrayList;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    28
import java.util.Arrays;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    29
import java.util.Collections;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    30
import java.util.Iterator;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    31
import java.util.List;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    32
import java.util.NoSuchElementException;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    33
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    34
import org.graalvm.util.CollectionsUtil;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    35
import org.junit.Assert;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    36
import org.junit.Test;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    37
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    38
public class CollectionUtilTest {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    39
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    40
    private static int sum(Iterable<Integer> iterable) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    41
        int sum = 0;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    42
        for (int i : iterable) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    43
            sum += i;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    44
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    45
        return sum;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    46
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    47
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    48
    private static int indexOf(Iterable<Integer> iterable, int element) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    49
        int index = 0;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    50
        for (int i : iterable) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    51
            if (i == element) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    52
                return index;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    53
            }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    54
            index++;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    55
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    56
        return -1;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    57
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    58
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    59
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    60
    public void testConcat() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    61
        List<Integer> a = Arrays.asList(1, 2);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    62
        List<Integer> b = Arrays.asList(3, 4, 5);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    63
        Assert.assertEquals(sum(CollectionsUtil.concat(a, b)), 15);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    64
        Assert.assertEquals(sum(CollectionsUtil.concat(b, a)), 15);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    65
        Assert.assertEquals(indexOf(CollectionsUtil.concat(a, b), 5), 4);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    66
        Assert.assertEquals(indexOf(CollectionsUtil.concat(b, a), 5), 2);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    67
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    68
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    69
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    70
    public void testMatch() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    71
        String[] array = {"a", "b", "c", "d", "e"};
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    72
        Assert.assertTrue(CollectionsUtil.allMatch(array, s -> !s.isEmpty()));
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    73
        Assert.assertFalse(CollectionsUtil.allMatch(array, s -> !s.startsWith("c")));
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    74
        Assert.assertFalse(CollectionsUtil.anyMatch(array, String::isEmpty));
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    75
        Assert.assertTrue(CollectionsUtil.anyMatch(array, s -> s.startsWith("c")));
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    76
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    77
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    78
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    79
    public void testFilterToList() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    80
        String[] array = {"a", "b", "", "d", "e"};
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    81
        Assert.assertEquals(CollectionsUtil.filterToList(Arrays.asList(array), String::isEmpty).size(), 1);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    82
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    83
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    84
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    85
    public void testFilterAndMapToArray() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    86
        String[] array = {"a", "b", "", "d", "e"};
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    87
        String[] newArray = CollectionsUtil.filterAndMapToArray(array, s -> !s.isEmpty(), String::toUpperCase, String[]::new);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    88
        Assert.assertArrayEquals(newArray, new String[]{"A", "B", "D", "E"});
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    89
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    90
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    91
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    92
    public void testMapToArray() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    93
        String[] array = {"a", "b", "c", "d", "e"};
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    94
        String[] newArray = CollectionsUtil.mapToArray(array, String::toUpperCase, String[]::new);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    95
        Assert.assertArrayEquals(newArray, new String[]{"A", "B", "C", "D", "E"});
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    96
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    97
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    98
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
    99
    public void testMapAndJoin() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   100
        String[] array = {"a", "b", "c", "d", "e"};
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   101
        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", "), "A, B, C, D, E");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   102
        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", ", "'"), "'A, 'B, 'C, 'D, 'E");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   103
        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", ", "'", "'"), "'A', 'B', 'C', 'D', 'E'");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   104
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   105
        Assert.assertEquals(CollectionsUtil.mapAndJoin(Arrays.asList(array), String::toUpperCase, ", "), "A, B, C, D, E");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   106
        Assert.assertEquals(CollectionsUtil.mapAndJoin(Arrays.asList(array), String::toUpperCase, ", ", "'"), "'A, 'B, 'C, 'D, 'E");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   107
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   108
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   109
    @Test
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   110
    public void testIterableConcat() {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   111
        List<String> i1 = Arrays.asList("1", "2", "3");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   112
        List<String> i2 = Arrays.asList();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   113
        List<String> i3 = Arrays.asList("4", "5");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   114
        List<String> i4 = Arrays.asList();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   115
        List<String> i5 = Arrays.asList("6");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   116
        List<String> iNull = null;
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   117
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   118
        List<String> actual = new ArrayList<>();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   119
        List<String> expected = new ArrayList<>();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   120
        expected.addAll(i1);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   121
        expected.addAll(i2);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   122
        expected.addAll(i3);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   123
        expected.addAll(i4);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   124
        expected.addAll(i5);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   125
        Iterable<String> iterable = CollectionsUtil.concat(Arrays.asList(i1, i2, i3, i4, i5));
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   126
        for (String s : iterable) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   127
            actual.add(s);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   128
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   129
        Assert.assertEquals(expected, actual);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   130
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   131
        Iterator<String> iter = iterable.iterator();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   132
        while (iter.hasNext()) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   133
            iter.next();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   134
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   135
        try {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   136
            iter.next();
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   137
            Assert.fail("Expected NoSuchElementException");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   138
        } catch (NoSuchElementException e) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   139
            // Expected
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   140
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   141
        try {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   142
            CollectionsUtil.concat(i1, iNull);
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   143
            Assert.fail("Expected NullPointerException");
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   144
        } catch (NullPointerException e) {
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   145
            // Expected
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   146
        }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   147
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   148
        Iterable<Object> emptyIterable = CollectionsUtil.concat(Collections.emptyList());
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   149
        Assert.assertFalse(emptyIterable.iterator().hasNext());
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   150
    }
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   151
47f19ff9903c 8194819: Update Graal
iveresov
parents:
diff changeset
   152
}