package org.coding.two.array;
import static org.junit.Assert.fail;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ArrayUtilTest {
private ArrayUtil arrayUtil;
@Before
public void setUp() throws Exception {
arrayUtil = new ArrayUtil();
}
@After
public void tearDown() throws Exception {
arrayUtil = null;
}
@Test
public void testReverseArray() {
int[] origin = null;
arrayUtil.reverseArray(origin);
Assert.assertNull(origin);
origin = new int[]{};
arrayUtil.reverseArray(origin);
Assert.assertArrayEquals(origin, origin);
origin = new int[]{1};
arrayUtil.reverseArray(origin);
Assert.assertArrayEquals(origin, origin);
origin = new int[]{1, 2};
arrayUtil.reverseArray(origin);
int[] dest = new int[]{2, 1};
Assert.assertArrayEquals(dest, origin);
origin = new int[]{1, 2, 3};
arrayUtil.reverseArray(origin);
dest = new int[]{3, 2, 1};
Assert.assertArrayEquals(dest, origin);
origin = new int[]{1, 2, 3, 4};
arrayUtil.reverseArray(origin);
dest = new int[]{4, 3, 2, 1};
Assert.assertArrayEquals(dest, origin);
origin = new int[]{7, 9 , 30, 3};
arrayUtil.reverseArray(origin);
dest = new int[]{3, 30, 9,7};
Assert.assertArrayEquals(dest, origin);
origin = new int[]{7, 9, 30, 3, 4};
arrayUtil.reverseArray(origin);
dest = new int[]{4,3, 30 , 9,7};
Assert.assertArrayEquals(dest, origin);
}
@Test
public void testRemoveZero() {
int[] origin = new int[]{1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
int[] dest = new int[]{1,3,4,5,6,6,5,4,7,6,7,5};
origin = arrayUtil.removeZero(origin);
Assert.assertArrayEquals(dest, origin);
origin = null;
dest = new int[]{};
origin = arrayUtil.removeZero(origin);
Assert.assertArrayEquals(dest, origin);
origin = new int[]{};
dest = new int[]{};
origin = arrayUtil.removeZero(origin);
Assert.assertArrayEquals(dest, origin);
origin = new int[]{1};
dest = new int[]{1};
origin = arrayUtil.removeZero(origin);
Assert.assertArrayEquals(dest, origin);
}
@Test
public void testMerge() {
int[] array1 = new int[]{3, 5, 7,8};
int[] array2 = new int[]{4, 5, 6,7};
int[] expecteds = new int[]{3,4,5,6,7,8};
int[] actuals = arrayUtil.merge(array1, array2);
Assert.assertArrayEquals(expecteds, actuals);
array1 = new int[]{};
array2 = new int[]{4, 5, 6,7};
expecteds = new int[]{4, 5, 6,7};
actuals = arrayUtil.merge(array1, array2);
Assert.assertArrayEquals(expecteds, actuals);
array1 = new int[]{3, 5, 7,8};
array2 = new int[]{};
expecteds = new int[]{3, 5, 7,8};
actuals = arrayUtil.merge(array1, array2);
Assert.assertArrayEquals(expecteds, actuals);
array1 = new int[]{};
array2 = new int[]{};
expecteds = new int[]{};
actuals = arrayUtil.merge(array1, array2);
Assert.assertArrayEquals(expecteds, actuals);
array1 = new int[]{1, 2, 8,9};
array2 = new int[]{4, 5, 6,7};
expecteds = new int[]{1, 2, 4, 5, 6, 7, 8, 9};
actuals = arrayUtil.merge(array1, array2);
Assert.assertArrayEquals(expecteds, actuals);
}
@Test
public void testGrow() {
int[] oldArray = new int[]{2,3,6};
int size = 3;
int[] expecteds = new int[]{2,3,6,0,0,0};
int[] actuals = arrayUtil.grow(oldArray, size);
Assert.assertArrayEquals(expecteds, actuals);
oldArray = new int[]{};
size = 3;
expecteds = new int[]{};
actuals = arrayUtil.grow(oldArray, size);
Assert.assertArrayEquals(expecteds, actuals);
oldArray = new int[]{};
size = 0;
expecteds = new int[]{};
actuals = arrayUtil.grow(oldArray, size);
Assert.assertArrayEquals(expecteds, actuals);
oldArray = new int[]{2,3,6};
size = 0;
expecteds = new int[]{2,3,6};
actuals = arrayUtil.grow(oldArray, size);
Assert.assertArrayEquals(expecteds, actuals);
}
@Test
public void testFibonacci() {
int max = 15;
int[] expecteds = new int[]{1,1,2,3,5,8,13};
int[] actuals = arrayUtil.fibonacci(max);
Assert.assertArrayEquals(expecteds, actuals);
max = 1;
expecteds = new int[]{};
actuals = arrayUtil.fibonacci(max);
Assert.assertArrayEquals(expecteds, actuals);
max = 2;
expecteds = new int[]{1,1};
actuals = arrayUtil.fibonacci(max);
Assert.assertArrayEquals(expecteds, actuals);
}
@Test
public void testGetPrimes() {
int max = 23;
int[] expecteds = new int[]{2,3,5,7,11,13,17,19};
int[] actuals = arrayUtil.getPrimes(max);
Assert.assertArrayEquals(expecteds, actuals);
max = 2;
expecteds = new int[]{};
actuals = arrayUtil.getPrimes(max);
Assert.assertArrayEquals(expecteds, actuals);
max = 3;
expecteds = new int[]{2};
actuals = arrayUtil.getPrimes(max);
Assert.assertArrayEquals(expecteds, actuals);
}
@Test
public void testGetPerfectNumbers() {
fail("Not yet implemented");
}
@Test
public void testJoin() {
int[] array = new int[]{3,8,9};
String seperator = "-";
String expected = "3-8-9";
String actual = arrayUtil.join(array, seperator);
Assert.assertEquals(expected, actual);
array = null;
seperator = "-";
expected = null;
actual = arrayUtil.join(array, seperator);
Assert.assertNull(actual);
array = new int[]{};
seperator = "-";
expected = "";
actual = arrayUtil.join(array, seperator);
Assert.assertEquals(expected, actual);
array = new int[]{1,2,3};
seperator = "@-@";
expected = "1@-@2@-@3";
actual = arrayUtil.join(array, seperator);
Assert.assertEquals(expected, actual);
}
}