package com.coding.basic;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class LinkedListTest {
@Test
public void testAddObject() {
LinkedList list = new LinkedList();
list.add(5);
assertEquals(1, list.size());
assertEquals(5, list.get(0));
list.add(4);
list.add(3);
list.add(2);
assertEquals(4, list.size());
assertEquals(4, list.get(1));
assertEquals(3, list.get(2));
assertEquals(2, list.get(3));
}
@Test
public void testAddIntObject() {
LinkedList list = new LinkedList();
list.add(0, 5);
assertEquals(1, list.size());
assertEquals(5, list.get(0));
list.add(4);
list.add(3);
list.add(2);
list.add(1, 1);
assertEquals(1, list.get(1));
}
@Test
public void testRemove() {
LinkedList list = new LinkedList();
assertEquals(null, list.remove(0));
list.add(4);
assertEquals(4, list.remove(0));
list.add(5);
list.add(-1);
list.add(16);
list.add(2);
list.add(7);
assertEquals(16, list.remove(2));
assertEquals(4, list.size());
assertEquals(2, list.get(2));
}
@Test
public void testAddFirst() {
LinkedList list = new LinkedList();
list.addFirst(5);
assertEquals(1, list.size());
assertEquals(5, list.get(0));
list.addFirst(4);
list.addFirst(3);
list.addFirst(2);
assertEquals(4, list.size());
assertEquals(2, list.get(1));
assertEquals(3, list.get(2));
assertEquals(4, list.get(3));
}
@Test
public void testAddLast() {
LinkedList list = new LinkedList();
list.addLast(5);
assertEquals(1, list.size());
assertEquals(5, list.get(0));
list.addLast(4);
list.addLast(3);
list.addLast(2);
assertEquals(4, list.size());
assertEquals(4, list.get(1));
assertEquals(3, list.get(2));
assertEquals(2, list.get(3));
}
@Test
public void testRemoveFirst() {
LinkedList list = new LinkedList();
assertEquals(null, list.removeFirst());
list.add(4);
list.add(3);
list.add(2);
assertEquals(4, list.removeFirst());
assertEquals(3, list.removeFirst());
assertEquals(2, list.removeFirst());
}
@Test
public void testRemoveLast() {
LinkedList list = new LinkedList();
assertEquals(null, list.removeLast());
list.add(4);
list.add(3);
list.add(2);
assertEquals(2, list.removeLast());
assertEquals(3, list.removeLast());
}
@Test
public void testIterator() {
LinkedList list = new LinkedList();
list.add(4);
list.add(3);
list.add(2);
Iterator it = list.iterator();
assertEquals(4, it.next());
assertEquals(3, it.next());
assertEquals(2, it.next());
}
@Test
public void testReverse() {
LinkedList list = new LinkedList();
list.add(3);
list.add(7);
list.add(10);
list.add(15);
list.reverse();
assertEquals(15, list.get(0));
LinkedList list2 = new LinkedList();
list2.reverse();
}
@Test
public void testRemoveFirstHalf() {
LinkedList list = new LinkedList();
list.add(2);
list.add(5);
list.add(7);
list.add(8);
list.add(10);
list.removeFirstHalf();
}
@Test
public void testRemoveDuplicateValues() {
LinkedList list = new LinkedList();
list.add(1);
// with single element
assertEquals(1, list.get(0));
// add another one with 1->1
list.add(1);
list.removeDuplicateValues();
assertEquals(1, list.get(0));
assertEquals(1, list.size());
// test the duplicate value is the last one
for(int i=2; i<6; i++) {
list.add(i);
}
list.add(5);
list.removeDuplicateValues();
assertEquals(5, list.get(4));
assertEquals(5, list.size());
// regular
for(int i=0; i<6; i++) {
list.add(5);
}
list.add(6);
list.removeDuplicateValues();
assertEquals(6, list.get(5));
assertEquals(6, list.size());
}
@Test
public void testRemoveRange() {
LinkedList list = new LinkedList();
// regular
for(int i=1; i<7; i++) {
list.add(i);
}
list.removeRange(2, 4);
assertEquals(5, list.size());
// head case
list.add(1, 1);
list.removeRange(0, 3);
assertEquals(3, list.size());
// tail case
list.add(6);
list.add(7);
list.removeRange(5, 20);
assertEquals(2, list.size());
}
@Test
public void testRemoveLength() {
LinkedList list = new LinkedList();
// regular
for(int i=0; i<9; i++) {
list.add(i);
}
// regular
list.remove(4, 2);
// head
LinkedList list2 = new LinkedList();
for(int i=0; i<9; i++) {
list2.add(i);
}
list2.remove(0, 3);
// tail
LinkedList list3 = new LinkedList();
for(int i=0; i<10; i++) {
list3.add(i);
}
list3.remove(9, 3);
assertEquals(9, list3.size());
}
@Test
public void testGetElements() {
LinkedList list1 = new LinkedList();
// 11->101->201->301->401->501->601->701
list1.add(11);
list1.add(101);
list1.add(201);
list1.add(301);
list1.add(401);
list1.add(501);
list1.add(601);
list1.add(701);
LinkedList list2 = new LinkedList();
// 1->3->4->6
list2.add(1);
list2.add(3);
list2.add(4);
list2.add(6);
int[] newArr = list1.getElements(list2);
assertArrayEquals(new int[]{101,301,401,601}, newArr);
}
@Test
public void testSubtract() {
LinkedList list1 = new LinkedList();
// 11->101->201->301->401->501->601->701
list1.add(11);
list1.add(101);
list1.add(201);
list1.add(301);
list1.add(401);
list1.add(501);
list1.add(601);
list1.add(701);
LinkedList list2 = new LinkedList();
// 1->3->4->6
list2.add(1);
list2.add(3);
list2.add(4);
list2.add(6);
list1.subtract(list2);
// 11->201->501->701
assertEquals(4, list1.size());
}
@Test
public void testIntersection() {
LinkedList list1 = new LinkedList();
list1.add(1);
list1.add(2);
list1.add(4);
list1.add(5);
LinkedList list2 = new LinkedList();
list2.add(2);
list2.add(3);
list2.add(4);
list2.add(7);
LinkedList l3 = list1.intersection(list2);
assertEquals(2, l3.size());
}
}