package org.coding.three.list.impl; import static org.junit.Assert.fail; import java.util.Iterator; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class LinkedListTest { private LinkedList linkedList; @Before public void setUp() throws Exception { linkedList = new LinkedList(); } @After public void tearDown() throws Exception { linkedList = null; } @Test public void testAddObject() { int expected = 0; int actual = linkedList.size(); Assert.assertEquals(expected, actual); linkedList.add(1); expected = 1; actual = linkedList.size(); Assert.assertEquals(expected, actual); linkedList.add(2); expected = 2; actual = linkedList.size(); Assert.assertEquals(expected, actual); } @Test public void testAddIntObject() { linkedList.add(1); linkedList.add(2); linkedList.add(3); linkedList.add(0, 4); int expected = 4; int actual = (int) linkedList.get(0); Assert.assertEquals(expected, actual); Assert.assertEquals(4, linkedList.size()); linkedList.add(2, 5); Assert.assertEquals(5, linkedList.size()); expected = 5; actual = (int) linkedList.get(2); Assert.assertEquals(expected, actual); } @Test public void testGet() { linkedList.add(1); linkedList.add(2); linkedList.add(3); int expected = 1; int actual = (int) linkedList.get(0); Assert.assertEquals(expected, actual); expected = 2; actual = (int) linkedList.get(1); Assert.assertEquals(expected, actual); expected = 3; actual = (int) linkedList.get(2); Assert.assertEquals(expected, actual); } @Test public void testRemoveInt() { linkedList.add(1); int v = (int) linkedList.remove(0); Assert.assertEquals(1, v); Assert.assertEquals(0, linkedList.size()); linkedList.add(1); linkedList.add(2); linkedList.add(3); v = (int) linkedList.remove(1); Assert.assertEquals(2, v); Assert.assertEquals(2, linkedList.size()); linkedList.add(4); linkedList.add(5); linkedList.add(6); v = (int) linkedList.remove(linkedList.size() - 1); Assert.assertEquals(6, v); Assert.assertEquals(4, linkedList.size()); } @Test public void testSize() { Assert.assertEquals(0, linkedList.size()); linkedList.add(1); Assert.assertEquals(1, linkedList.size()); linkedList.remove(0); Assert.assertEquals(0, linkedList.size()); } @Test public void testAddFirst() { linkedList.add(4); linkedList.add(5); linkedList.add(6); linkedList.addFirst(1); Assert.assertEquals(4, linkedList.size()); Assert.assertEquals(1, linkedList.get(0)); } @Test public void testAddLast() { linkedList.addLast(1); Assert.assertEquals(1, linkedList.size()); Assert.assertEquals(1, linkedList.get(0)); linkedList.addLast(2); Assert.assertEquals(2, linkedList.size()); Assert.assertEquals(2, linkedList.get(1)); } @Test public void testRemoveFirst() { linkedList.add(4); linkedList.add(5); linkedList.add(6); int v = (int) linkedList.removeFirst(); Assert.assertEquals(2, linkedList.size()); Assert.assertEquals(4, v); } @Test(expected = IndexOutOfBoundsException.class) public void testRemoveFirstException() { linkedList.removeFirst(); } @Test public void testRemoveLast() { linkedList.add(4); int v = (int) linkedList.removeLast(); Assert.assertEquals(0, linkedList.size()); Assert.assertEquals(4, v); linkedList.add(5); linkedList.add(6); v = (int) linkedList.removeLast(); Assert.assertEquals(1, linkedList.size()); Assert.assertEquals(6, v); } @Test(expected = IndexOutOfBoundsException.class) public void testRemoveLastException() { linkedList.removeLast(); } @Test public void testIterator() { linkedList.add(1); linkedList.add(2); linkedList.add(3); Iterator<?> it = linkedList.iterator(); int expected = 1; while(it.hasNext()) { Object v = it.next(); Assert.assertEquals(expected++, v); } } @Test public void testIteratorRemove() { linkedList.add(1); linkedList.add(2); linkedList.add(3); Iterator<?> it = linkedList.iterator(); while(it.hasNext()) { it.next(); it.remove(); } Assert.assertEquals(0, linkedList.size()); } @Test public void testReverse() { linkedList.add(3); linkedList.add(7); linkedList.add(10); linkedList.reverse(); Assert.assertEquals(10, linkedList.get(0)); Assert.assertEquals(7, linkedList.get(1)); Assert.assertEquals(3, linkedList.get(2)); } @Test public void testReverse2() { linkedList.add(3); linkedList.reverse(); Assert.assertEquals(3, linkedList.get(0)); } @Test public void testReverse3() { linkedList.add(3); linkedList.add(7); linkedList.reverse(); Assert.assertEquals(7, linkedList.get(0)); Assert.assertEquals(3, linkedList.get(1)); } @Test public void testRemoveFirstHalf() { linkedList.add(2); linkedList.add(5); linkedList.add(7); linkedList.add(8); linkedList.removeFirstHalf(); Assert.assertEquals(7, linkedList.get(0)); Assert.assertEquals(8, linkedList.get(1)); } @Test public void testRemoveFirstHalf2() { linkedList.add(2); linkedList.add(5); linkedList.add(7); linkedList.add(8); linkedList.add(10); linkedList.removeFirstHalf(); Assert.assertEquals(7, linkedList.get(0)); Assert.assertEquals(8, linkedList.get(1)); Assert.assertEquals(10, linkedList.get(2)); } @Test public void testRemoveIntInt() { linkedList.add(2); linkedList.add(5); linkedList.add(7); linkedList.add(8); linkedList.add(10); linkedList.remove(1, 2); Assert.assertEquals(3, linkedList.size()); Assert.assertEquals(2, linkedList.get(0)); Assert.assertEquals(8, linkedList.get(1)); Assert.assertEquals(10, linkedList.get(2)); } @Test public void testRemoveIntIntFull() { linkedList.add(2); linkedList.add(5); linkedList.add(7); linkedList.add(8); linkedList.add(10); linkedList.remove(0, 10); Assert.assertEquals(0, linkedList.size()); } @Test public void testRemoveIntIntHead() { linkedList.add(2); linkedList.add(5); linkedList.add(7); linkedList.add(8); linkedList.add(10); linkedList.remove(0, 2); Assert.assertEquals(3, linkedList.size()); Assert.assertEquals(7, linkedList.get(0)); Assert.assertEquals(8, linkedList.get(1)); Assert.assertEquals(10, linkedList.get(2)); } @Test public void testGetElements() { // 11->101->201->301->401->501->601->701 linkedList.add(11); linkedList.add(101); linkedList.add(201); linkedList.add(301); linkedList.add(401); linkedList.add(501); linkedList.add(601); linkedList.add(701); // 1->3->4->6 LinkedList list = new LinkedList(); list.add(1); list.add(3); list.add(4); list.add(6); int[] actuals = linkedList.getElements(list ); int[] expecteds = {101,301,401,601}; Assert.assertArrayEquals(expecteds, actuals); } @Test public void testGetElements2() { // 11->101->201->301->401->501->601->701 linkedList.add(11); linkedList.add(101); linkedList.add(201); linkedList.add(301); linkedList.add(401); linkedList.add(501); linkedList.add(601); linkedList.add(701); // 1->3->4->20 LinkedList list = new LinkedList(); list.add(1); list.add(3); list.add(4); list.add(20); int[] actuals = linkedList.getElements(list ); int[] expecteds = {101,301,401}; Assert.assertArrayEquals(expecteds, actuals); } @Test public void testSubtract() { linkedList.add(11); linkedList.add(101); linkedList.add(201); linkedList.add(301); linkedList.add(401); linkedList.add(501); linkedList.add(601); linkedList.add(701); LinkedList list = new LinkedList(); list.add(11); list.add(201); list.add(501); linkedList.subtract(list ); Assert.assertEquals(5, linkedList.size()); } @Test public void testSubtract2() { linkedList.add(11); linkedList.add(101); LinkedList list = new LinkedList(); list.add(11); list.add(201); list.add(501); linkedList.subtract(list ); Assert.assertEquals(1, linkedList.size()); } @Test public void testRemoveDuplicateValues() { linkedList.add(11); linkedList.add(101); linkedList.add(201); linkedList.add(201); linkedList.add(201); linkedList.add(301); linkedList.add(301); linkedList.add(401); Assert.assertEquals(8, linkedList.size()); linkedList.removeDuplicateValues(); Assert.assertEquals(5, linkedList.size()); Assert.assertEquals(301, linkedList.get(linkedList.size() - 2)); Assert.assertEquals(201, linkedList.get(linkedList.size() - 3)); } @Test public void testRemoveRange() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.removeRange(4, 6); Assert.assertEquals(2, linkedList.size()); } @Test public void testRemoveRange2() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.removeRange(0, 6); Assert.assertEquals(0, linkedList.size()); } @Test public void testRemoveRange3() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.removeRange(3, 5); Assert.assertEquals(3, linkedList.size()); } @Test public void testRemoveRange4() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.removeRange(1, 3); Assert.assertEquals(3, linkedList.size()); } @Test public void testRemoveRange5() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.add(6); linkedList.removeRange(3, 5); Assert.assertEquals(4, linkedList.size()); } @Test public void testIntersection() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.add(6); LinkedList list = new LinkedList(); list.add(1); list.add(3); LinkedList newList = linkedList.intersection(list ); Assert.assertEquals(2, newList.size()); Assert.assertEquals(1, newList.get(0)); Assert.assertEquals(3, newList.get(1)); } @Test public void testIntersection2() { linkedList.add(1); linkedList.add(3); linkedList.add(5); linkedList.add(6); LinkedList list = new LinkedList(); list.add(10); list.add(13); LinkedList newList = linkedList.intersection(list ); Assert.assertEquals(0, newList.size()); } @Test public void testIntersection3() { linkedList.add(3); linkedList.add(5); linkedList.add(6); LinkedList list = new LinkedList(); list.add(1); list.add(2); LinkedList newList = linkedList.intersection(list ); Assert.assertEquals(0, newList.size()); } }