]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestArrayUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / testcases / org / simantics / databoard / tests / TestArrayUtils.java
diff --git a/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestArrayUtils.java b/bundles/org.simantics.databoard/testcases/org/simantics/databoard/tests/TestArrayUtils.java
new file mode 100644 (file)
index 0000000..8af7164
--- /dev/null
@@ -0,0 +1,503 @@
+/*******************************************************************************\r
+ *  Copyright (c) 2010 Association for Decentralized Information Management in\r
+ *  Industry THTH ry.\r
+ *  All rights reserved. This program and the accompanying materials\r
+ *  are made available under the terms of the Eclipse Public License v1.0\r
+ *  which accompanies this distribution, and is available at\r
+ *  http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ *  Contributors:\r
+ *      VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.tests;
+
+import static org.junit.Assert.assertArrayEquals;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotSame;\r
+import static org.junit.Assert.assertNull;\r
+import static org.junit.Assert.assertSame;\r
+\r
+import java.io.Serializable;\r
+import java.util.AbstractCollection;\r
+import java.util.AbstractList;\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.simantics.databoard.util.ArrayUtils;\r
+
+public class TestArrayUtils {
+
+       @Before
+       public void setUp() {
+       }\r
+       \r
+       @Test\r
+       public void testConcatenate1() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b);\r
+               assertEquals(5, c.length);\r
+               for (int i = 0; i < c.length; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[3]);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b);\r
+               assertArrayEquals(b, c);\r
+               assertNotSame(b, c);\r
+               assertSame(b[0], c[0]);\r
+               assertSame(b[1], c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testConcatenateEmptyB() {\r
+               Integer[] a = new Integer[] { 1, 2 };\r
+               Integer[] b = new Integer[] { };\r
+               Integer[] c = ArrayUtils.concatenate(a, b);\r
+               assertArrayEquals(a, c);\r
+               assertNotSame(a, c);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(a[1], c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testConcatenateEmptyBoth() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { };\r
+               Integer[] c = ArrayUtils.concatenate(a, b);\r
+               assertEquals(0,  c.length);\r
+               assertNotSame(a, c);\r
+               assertNotSame(b, c);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateMixedTypes() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               Number[] c = ArrayUtils.concatenate(a, b);\r
+               assertSame(Number[].class, c.getClass());\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testConcatenateMixedTypes2() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               Object[] c = ArrayUtils.concatenate(a, b);\r
+               assertSame(c.getClass(), Number[].class);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }       \r
+       \r
+       @Test\r
+       public void testConcatenateMixedTypes3() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               Object[] c = ArrayUtils.concatenate(a, b, Object.class);\r
+               assertSame(c.getClass(), Object[].class);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }       \r
+       \r
+       @Test(expected = ClassCastException.class)\r
+       public void testConcatenateMixedTypes4() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               @SuppressWarnings("unused")\r
+               Number[] c = (Number[])ArrayUtils.concatenate(a, b, Object.class);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateMixedTypes5() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               String[] b = new String[] { "foo" };\r
+               Object[] c = ArrayUtils.concatenate(a, b);\r
+               assertSame(Object[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateMixedTypes6() {\r
+               Object[] a = new CharSequence[] { "bar" };\r
+               Object[] b = new String[] { "foo" };\r
+               Object[] c = ArrayUtils.concatenate(a, b);\r
+               assertSame(CharSequence[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateMixedTypes7() {\r
+               Object[] a = new String[] { "bar" };\r
+               Object[] b = new CharSequence[] { "foo" };\r
+               Object[] c = ArrayUtils.concatenate(a, b);\r
+               assertSame(CharSequence[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateLengthGt() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 8);\r
+               assertEquals(8, c.length);\r
+               for (int i = 0; i < 5; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               for (int i = 5; i < 8; i++)\r
+                       assertNull(c[i]);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[3]);\r
+       }\r
+\r
+       @Test\r
+       public void testConcatenateLengthLtB() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 4);\r
+               assertEquals(4, c.length);\r
+               for (int i = 0; i < 4; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[3]);\r
+       }\r
+\r
+       @Test\r
+       public void testConcatenateLengthLtA() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 2);\r
+               assertEquals(2, c.length);\r
+               for (int i = 0; i < 2; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateLengthZero() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 0);\r
+               assertEquals(0, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateLengthZeroEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 0);\r
+               assertEquals(0, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateLengthEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 2);\r
+               assertEquals(2, c.length);\r
+               assertArrayEquals(b,  c);\r
+               assertNotSame(b, c);\r
+       }\r
+       \r
+       @Test\r
+       public void testConcatenateLengthEmptyB() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] {  };\r
+               Integer[] c = ArrayUtils.concatenate(a, b, 3);\r
+               assertEquals(3, c.length);\r
+               assertArrayEquals(a,  c);\r
+               assertNotSame(a, c);\r
+       }\r
+\r
+       @Test\r
+       public void testAppend1() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] c = ArrayUtils.append(a, 4, 5);\r
+               assertEquals(5, c.length);\r
+               for (int i = 0; i < c.length; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer b = 4;\r
+               Integer[] c = ArrayUtils.append(a, b, 5);\r
+               assertEquals(2, c.length);\r
+               assertSame(b, c[0]);\r
+               assertEquals(5, (int)c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendEmptyB() {\r
+               Integer[] a = new Integer[] { 1, 2 };\r
+               Integer[] c = ArrayUtils.append(a);\r
+               assertArrayEquals(a, c);\r
+               assertNotSame(a, c);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(a[1], c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendEmptyBoth() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] c = ArrayUtils.append(a);\r
+               assertEquals(0,  c.length);\r
+               assertNotSame(a, c);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Number[] c = ArrayUtils.append(a, 2.0);\r
+               assertEquals(2, c.length);\r
+               assertSame(Number[].class, c.getClass());\r
+               assertSame(a[0], c[0]);\r
+               assertEquals(2.0, c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendMixedTypes2() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               assertEquals(2, c.length);\r
+               assertSame(Number[].class, c.getClass());\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }       \r
+       \r
+       @Test\r
+       public void testAppendMixedTypes3() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               Object[] c = ArrayUtils.append(Comparable.class, a, b[0]);\r
+               assertEquals(2, c.length);\r
+               assertSame(c.getClass(), Comparable[].class);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }       \r
+       \r
+       @Test(expected = ClassCastException.class)\r
+       public void testAppendMixedTypes4() {\r
+               Integer[] a = new Integer[] { 1 };\r
+               Double[] b = new Double[] { 2.0 };\r
+               @SuppressWarnings("unused")\r
+               Number[] c = (Number[])ArrayUtils.append(Object.class, a, b[0]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes5() {\r
+               // Java generic type inference does some fairly unpredictable stuff here\r
+               Integer[] a = new Integer[] { 1 };\r
+               String[] b = new String[] { "foo" };\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               // c is in fact not an Object array!\r
+               // Java has determined that both Integer and String are instances of Comparable\r
+               // Could be a Comparable array just as well...\r
+               assert(Serializable[].class == c.getClass() || Comparable[].class == c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendMixedTypes5b() {\r
+               Object[] a = new Integer[] { 1 };\r
+               Object[] b = new String[] { "foo" };\r
+               // b[0] is passed as a VarArg of type Object\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               assertSame(Object[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes6() {\r
+               CharSequence[] a = new CharSequence[] { "bar" };\r
+               String[] b = new String[] { "foo" };\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               assertSame(CharSequence[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes6b() {\r
+               Object[] a = new CharSequence[] { "bar" };\r
+               Object[] b = new String[] { "foo" };\r
+               // b[0] is passed as a VarArg of type Object\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               assertSame(Object[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes7() {\r
+               String[] a = new String[] { "bar" };\r
+               CharSequence[] b = new CharSequence[] { "foo" };\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               assertSame(CharSequence[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendMixedTypes7b() {\r
+               Object[] a = new String[] { "bar" };\r
+               Object[] b = new CharSequence[] { "foo" };\r
+               Object[] c = ArrayUtils.append(a, b[0]);\r
+               // Type inference presents b[0] as a VarArg of type Object\r
+               assertSame(Object[].class, c.getClass());\r
+               assertEquals(2, c.length);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[1]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendLengthGt() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(8, a, b[0], b[1]);\r
+               assertEquals(8, c.length);\r
+               for (int i = 0; i < 5; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               for (int i = 5; i < 8; i++)\r
+                       assertNull(c[i]);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[3]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendLengthLtB() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(4, a, b[0], b[1]);\r
+               assertEquals(4, c.length);\r
+               for (int i = 0; i < 4; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+               assertSame(b[0], c[3]);\r
+       }\r
+\r
+       @Test\r
+       public void testAppendLengthLtA() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(2, a, b[0], b[1]);\r
+               assertEquals(2, c.length);\r
+               for (int i = 0; i < 2; i++)\r
+                       assertEquals(i+1, (int)c[i]);\r
+               assertSame(a[0], c[0]);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendLengthZero() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(0, a, b[0], b[1]);\r
+               assertEquals(0, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendLengthZeroEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(0, a, b[0], b[1]);\r
+               assertEquals(0, c.length);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendLengthEmptyA() {\r
+               Integer[] a = new Integer[] { };\r
+               Integer[] b = new Integer[] { 4, 5 };\r
+               Integer[] c = ArrayUtils.append(2, a, b[0], b[1]);\r
+               assertEquals(2, c.length);\r
+               assertArrayEquals(b,  c);\r
+               assertNotSame(b, c);\r
+       }\r
+       \r
+       @Test\r
+       public void testAppendLengthEmptyB() {\r
+               Integer[] a = new Integer[] { 1, 2, 3 };\r
+               Integer[] c = ArrayUtils.append(3, a);\r
+               assertEquals(3, c.length);\r
+               assertArrayEquals(a,  c);\r
+               assertNotSame(a, c);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase1() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(Integer.class, Double.class);\r
+               assertSame(Number.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase2() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(Integer[].class, Double[].class);\r
+               assertSame(Number[].class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase3() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(Integer.class, Double[].class);\r
+               assertSame(Object.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase4() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(List.class, ArrayList.class);\r
+               assertSame(List.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase5() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(ArrayList.class, List.class);\r
+               assertSame(List.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase6() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(ArrayList.class, LinkedList.class);\r
+               assertSame(AbstractList.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase7() {\r
+               Class<?> cl = ArrayUtils.getCommonBase(ArrayList.class, HashSet.class);\r
+               assertSame(AbstractCollection.class, cl);\r
+       }\r
+       \r
+       @Test\r
+       public void testGetCommonBase8() {\r
+               Iterable<Object> foo = new Iterable<Object>() {\r
+                       @Override\r
+                       public Iterator<Object> iterator() {\r
+                               return null;\r
+                       }\r
+               };\r
+               \r
+               Class<?> cl2 = ArrayUtils.getCommonBase(Iterable.class, foo.getClass());\r
+               Class<?> cl3 = ArrayUtils.getCommonBase(Iterable.class, ArrayList.class);\r
+               Class<?> cl = ArrayUtils.getCommonBase(ArrayList.class, foo.getClass());\r
+               \r
+               assertSame(Iterable.class, cl2);\r
+               assertSame(Iterable.class, cl3);\r
+               assertSame(Object.class, cl);\r
+       }\r
+}