package com.coding.test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.coding.basic.Iterator;
import com.coding.basic.LinkedList;
public class LinkedListTest {
private static LinkedList link;
@Before
public void setUp() throws Exception {
link = new LinkedList();
link.add("111");
link.add("222");
link.add("333");
}
@After
public void tearDown() throws Exception {
link = null;
}
@Test
public void testAddObject() {
link.add("444");
assertEquals(4, link.size());
assertEquals("444", link.get(3));
link = new LinkedList();
link.add("000");
assertEquals(1, link.size());
assertEquals("000", link.get(0));
}
@Test
public void testAddIntObject() {
link.add(2,"444");
assertEquals(4, link.size());
assertEquals("444", link.get(2));
assertEquals("333", link.get(3));
assertEquals("222", link.get(1));
link = new LinkedList();
link.add(0,"000");
assertEquals(1, link.size());
assertEquals("000", link.get(0));
}
@Test
public void testGet() {
assertEquals("222", link.get(1));
}
@Test
public void testRemove() {
Object obj = link.remove(1);
assertEquals("222", obj);
assertEquals("333", link.get(1));
assertEquals(2, link.size());
}
@Test
public void testSize() {
assertEquals(3, link.size());
}
@Test
public void testAddFirst() {
link.addFirst("000");
assertEquals(4, link.size());
assertEquals("000", link.get(0));
link = new LinkedList();
link.addFirst("000");
assertEquals(1, link.size());
assertEquals("000", link.get(0));
}
@Test
public void testAddLast() {
link.addLast("444");
assertEquals(4, link.size());
assertEquals("444", link.get(3));
link = new LinkedList();
link.addLast("444");
assertEquals(1, link.size());
assertEquals("444", link.get(0));
}
@Test
public void testRemoveFirst() {
Object obj = link.removeFirst();
assertEquals("111", obj);
assertEquals(2, link.size());
assertEquals("222", link.get(0));
}
@Test
public void testRemoveLast() {
Object obj = link.removeLast();
assertEquals(2, link.size());
assertEquals("333", obj);
}
@Test
public void testIterator() {
Iterator it = link.iterator();
assertEquals(true, it.hasNext());
assertEquals("111", it.next());
assertEquals("222", it.next());
assertEquals("333", it.next());
assertEquals(false, it.hasNext());
}
@Test
public void testReverse(){
link.reverse();
assertEquals(3, link.size());
assertEquals("333", link.get(0));
assertEquals("222", link.get(1));
assertEquals("111", link.get(2));
}
@Test
public void testRemoveFirstHalf(){
link.add("444");
link.add("555");
link.removeFirstHalf();
assertEquals(3, link.size());
assertEquals("333", link.get(0));
link.add("666");
link.removeFirstHalf();
assertEquals(2, link.size());
assertEquals("555", link.get(0));
}
@Test
public void testRemoveForIndex(){
link.add("444");
link.add("555");
link.remove(1, 2);
assertEquals(3, link.size());
assertEquals("444", link.get(1));
link.remove(2, 5);
assertEquals(2, link.size());
link.remove(0,1);
assertEquals(1, link.size());
assertEquals("444", link.get(0));
}
@Test
//11->101->201->301->401->501->601->701 listB = 1->3->4->6 [101,301,401,601]
public void testGetElements(){
link = new LinkedList();
link.add(11);
link.add(101);
link.add(201);
link.add(301);
link.add(401);
link.add(501);
link.add(601);
link.add(701);
LinkedList linkB = new LinkedList();
linkB.add(1);
linkB.add(3);
linkB.add(4);
linkB.add(6);
int[] eles = link.getElements(linkB);
assertEquals(4, eles.length);
assertEquals(101, eles[0]);
assertEquals(301, eles[1]);
assertEquals(401, eles[2]);
assertEquals(601, eles[3]);
}
@Test
public void testSubtract(){
link = new LinkedList();
link.add(11);
link.add(101);
link.add(201);
link.add(301);
link.add(401);
link.add(501);
link.add(601);
link.add(701);
LinkedList linkB = new LinkedList();
linkB.add(401);
linkB.add(201);
linkB.add(601);
link.subtract(linkB);
assertEquals(5, link.size());
assertEquals(11, link.get(0));
assertEquals(101, link.get(1));
assertEquals(301, link.get(2));
assertEquals(501, link.get(3));
assertEquals(701, link.get(4));
}
@Test
public void testRemoveDuplicateValues(){
link = new LinkedList();
link.add(11);
link.add(101);
link.add(101);
link.add(301);
link.add(401);
link.add(401);
link.removeDuplicateValues();
assertEquals(4, link.size());
assertEquals(11, link.get(0));
assertEquals(101, link.get(1));
assertEquals(301, link.get(2));
assertEquals(401, link.get(3));
}
@Test
public void testRemoveRange(){
link = new LinkedList();
link.add(11);
link.add(101);
link.add(201);
link.add(301);
link.add(401);
link.add(501);
link.add(601);
link.add(701);
link.removeRange(200, 600);
assertEquals(4, link.size());
assertEquals(11, link.get(0));
assertEquals(101, link.get(1));
assertEquals(601, link.get(2));
assertEquals(701, link.get(3));
}
@Test
public void testIntersection(){
link = new LinkedList();
link.add(11);
link.add(101);
link.add(201);
link.add(301);
link.add(401);
link.add(501);
link.add(601);
link.add(701);
LinkedList linkB = new LinkedList();
linkB.add(201);
linkB.add(305);
linkB.add(401);
linkB.add(504);
linkB.add(601);
LinkedList linkC = link.intersection(linkB);
assertEquals(3, linkC.size());
assertEquals(201, linkC.get(0));
assertEquals(401, linkC.get(1));
assertEquals(601, linkC.get(2));
}
}