package array; import static junit.framework.TestCase.assertEquals; import static org.junit.Assert.assertArrayEquals; import static util.TestUtil.getRandomIntArray; import static util.TestUtil.getRandomNumber; import java.util.Arrays; import java.util.Iterator; import java.util.TreeSet; import org.junit.After; import org.junit.Before; import org.junit.Test; public class ArrayUtilTest { private int[] actual; ArrayUtil au = new ArrayUtil(); @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { actual = null; } @Test public void testFibonacci() { int[] expected = new int[] { 1, 1, 2, 3, 5, 8, 13 }; int[] acutal = new int[expected.length]; actual = au.fibonacci(15); assertArrayEquals(expected, actual); } @Test public void testGetPerfectNumbers() { int[] expected = new int[] { 6, 28, 496, 8128 }; int[] acutal = new int[expected.length]; actual = au.getPerfectNumbers(10000); assertArrayEquals(expected, actual); } @Test public void testGetPrimes() { int[] expected = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 }; int[] acutal = new int[expected.length]; actual = au.getPrimes(23); assertArrayEquals(expected, actual); } @Test public void testGrow() { int[] expected = getRandomIntArray(getRandomNumber()); int growSize = getRandomNumber(); int[] actual = au.grow(expected, growSize); assertEquals(expected.length + growSize, actual.length); for (int i = 0; i < actual.length; i++) { if (i < expected.length) { assertEquals(expected[i], actual[i]); } else { assertEquals(0, actual[i]); } } } @Test public void testJoin() { int[] expected = getRandomIntArray(getRandomNumber()); String seperator = "-"; String joinedString = au.join(expected, seperator); String[] actual = joinedString.split(seperator); assertEquals(expected.length, actual.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], Integer.parseInt(actual[i])); } } @Test public void testMerge() { int[] arr1 = getRandomIntArray(getRandomNumber()); int[] arr2 = getRandomIntArray(getRandomNumber()); Arrays.sort(arr1); Arrays.sort(arr2); TreeSet t = new TreeSet(); for (int i = 0; i < arr1.length; i++) { t.add(arr1[i]); } for (int i = 0; i < arr2.length; i++) { t.add(arr2[i]); } int[] actual = new int[arr1.length + arr2.length]; actual = au.merge(arr1, arr2); assertEquals(t.size(), actual.length); Iterator it = t.iterator(); for (int i = 0; it.hasNext(); i++) { assertEquals((int) it.next(), actual[i]); } } @Test public void testRemoveZero() { int size = getRandomNumber(10000); int[] expected = getRandomIntArray(size); int zeros = getRandomNumber(size - 1); TreeSet<Integer> t = new TreeSet<Integer>(); while (t.size() != zeros) { t.add(getRandomNumber(size)); } for (Integer i : t) { expected[i] = 0; } int expectedSize = size - zeros; actual = au.removeZero(expected); assertEquals(expectedSize, actual.length); for (int i = 0, j = 0; i < size; i++) { if (expected[i] != 0) assertEquals(expected[i], actual[j++]); } } @Test public void testReverseArray() { int size = getRandomNumber(); int[] expected = getRandomIntArray(size); actual = Arrays.copyOf(expected, size); au.reverseArray(actual); for (int i = 0; i < size; i++) { assertEquals(expected[i], actual[size - 1 - i]); } } }