src/jdk.internal.vm.compiler/share/classes/org.graalvm.util.test/src/org/graalvm/util/test/CollectionUtilTest.java
changeset 48861 47f19ff9903c
child 50858 2d3e99a72541
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.util.test/src/org/graalvm/util/test/CollectionUtilTest.java	Fri Feb 02 17:28:17 2018 -0800
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2017, 2017, 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.graalvm.util.test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.graalvm.util.CollectionsUtil;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CollectionUtilTest {
+
+    private static int sum(Iterable<Integer> iterable) {
+        int sum = 0;
+        for (int i : iterable) {
+            sum += i;
+        }
+        return sum;
+    }
+
+    private static int indexOf(Iterable<Integer> iterable, int element) {
+        int index = 0;
+        for (int i : iterable) {
+            if (i == element) {
+                return index;
+            }
+            index++;
+        }
+        return -1;
+    }
+
+    @Test
+    public void testConcat() {
+        List<Integer> a = Arrays.asList(1, 2);
+        List<Integer> b = Arrays.asList(3, 4, 5);
+        Assert.assertEquals(sum(CollectionsUtil.concat(a, b)), 15);
+        Assert.assertEquals(sum(CollectionsUtil.concat(b, a)), 15);
+        Assert.assertEquals(indexOf(CollectionsUtil.concat(a, b), 5), 4);
+        Assert.assertEquals(indexOf(CollectionsUtil.concat(b, a), 5), 2);
+    }
+
+    @Test
+    public void testMatch() {
+        String[] array = {"a", "b", "c", "d", "e"};
+        Assert.assertTrue(CollectionsUtil.allMatch(array, s -> !s.isEmpty()));
+        Assert.assertFalse(CollectionsUtil.allMatch(array, s -> !s.startsWith("c")));
+        Assert.assertFalse(CollectionsUtil.anyMatch(array, String::isEmpty));
+        Assert.assertTrue(CollectionsUtil.anyMatch(array, s -> s.startsWith("c")));
+    }
+
+    @Test
+    public void testFilterToList() {
+        String[] array = {"a", "b", "", "d", "e"};
+        Assert.assertEquals(CollectionsUtil.filterToList(Arrays.asList(array), String::isEmpty).size(), 1);
+    }
+
+    @Test
+    public void testFilterAndMapToArray() {
+        String[] array = {"a", "b", "", "d", "e"};
+        String[] newArray = CollectionsUtil.filterAndMapToArray(array, s -> !s.isEmpty(), String::toUpperCase, String[]::new);
+        Assert.assertArrayEquals(newArray, new String[]{"A", "B", "D", "E"});
+    }
+
+    @Test
+    public void testMapToArray() {
+        String[] array = {"a", "b", "c", "d", "e"};
+        String[] newArray = CollectionsUtil.mapToArray(array, String::toUpperCase, String[]::new);
+        Assert.assertArrayEquals(newArray, new String[]{"A", "B", "C", "D", "E"});
+    }
+
+    @Test
+    public void testMapAndJoin() {
+        String[] array = {"a", "b", "c", "d", "e"};
+        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", "), "A, B, C, D, E");
+        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", ", "'"), "'A, 'B, 'C, 'D, 'E");
+        Assert.assertEquals(CollectionsUtil.mapAndJoin(array, String::toUpperCase, ", ", "'", "'"), "'A', 'B', 'C', 'D', 'E'");
+
+        Assert.assertEquals(CollectionsUtil.mapAndJoin(Arrays.asList(array), String::toUpperCase, ", "), "A, B, C, D, E");
+        Assert.assertEquals(CollectionsUtil.mapAndJoin(Arrays.asList(array), String::toUpperCase, ", ", "'"), "'A, 'B, 'C, 'D, 'E");
+    }
+
+    @Test
+    public void testIterableConcat() {
+        List<String> i1 = Arrays.asList("1", "2", "3");
+        List<String> i2 = Arrays.asList();
+        List<String> i3 = Arrays.asList("4", "5");
+        List<String> i4 = Arrays.asList();
+        List<String> i5 = Arrays.asList("6");
+        List<String> iNull = null;
+
+        List<String> actual = new ArrayList<>();
+        List<String> expected = new ArrayList<>();
+        expected.addAll(i1);
+        expected.addAll(i2);
+        expected.addAll(i3);
+        expected.addAll(i4);
+        expected.addAll(i5);
+        Iterable<String> iterable = CollectionsUtil.concat(Arrays.asList(i1, i2, i3, i4, i5));
+        for (String s : iterable) {
+            actual.add(s);
+        }
+        Assert.assertEquals(expected, actual);
+
+        Iterator<String> iter = iterable.iterator();
+        while (iter.hasNext()) {
+            iter.next();
+        }
+        try {
+            iter.next();
+            Assert.fail("Expected NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Expected
+        }
+        try {
+            CollectionsUtil.concat(i1, iNull);
+            Assert.fail("Expected NullPointerException");
+        } catch (NullPointerException e) {
+            // Expected
+        }
+
+        Iterable<Object> emptyIterable = CollectionsUtil.concat(Collections.emptyList());
+        Assert.assertFalse(emptyIterable.iterator().hasNext());
+    }
+
+}