package com.donaldy.test;
import com.donaldy.basic.LinkedList;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
/**
* Created by donal on 2017/3/9.
*/
public class LinkedListTest {
private LinkedList linkedList;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void before() throws Exception {
linkedList = new LinkedList();
for (String s : "GEGE lala haha momo dada!".split(" "))
linkedList.add(s);
}
@Test
public void testAddWithArg() {
assertEquals("GEGE", linkedList.get(0));
assertEquals("dada!", linkedList.get(4));
}
@Test
public void testAddWithArgs() {
String str = "kunkun";
linkedList.add(3, str);
assertEquals(str, linkedList.get(3));
linkedList.add(0, str);
assertEquals(str, linkedList.get(0));
}
@Test
public void testRuntimeException() {
thrown.expect(RuntimeException.class);
linkedList.get(10);
}
@Test
public void testRuntimeException2() {
thrown.expect(IndexOutOfBoundsException.class);
linkedList.get(-1);
}
@Test
public void testRemove() {
assertEquals("GEGE", linkedList.remove(0));
assertEquals("dada!", linkedList.remove(3));
assertEquals("haha", linkedList.remove(1));
}
@Test
public void testRuntimeExceptionByremove() {
thrown.expect(IndexOutOfBoundsException.class);
LinkedList linkedList2 = new LinkedList();
linkedList2.remove(0);
}
@Test
public void testSize() {
assertEquals(5, linkedList.size());
}
@Test
public void testReverse() {
linkedList.reverse();
assertEquals("GEGE", linkedList.get(4));
assertEquals("lala", linkedList.get(3));
assertEquals("haha", linkedList.get(2));
assertEquals("momo", linkedList.get(1));
assertEquals("dada!", linkedList.get(0));
}
@Test
public void testRemoveFirstHalf() {
linkedList.removeFirstHalf();
assertEquals("haha", linkedList.get(0));
assertEquals("momo", linkedList.get(1));
assertEquals("dada!", linkedList.get(2));
}
@Test
public void testRemoveWithArgs() {
linkedList.remove(1, 2);
assertEquals("GEGE", linkedList.get(0));
assertEquals("momo", linkedList.get(1));
assertEquals("dada!", linkedList.get(2));
}
@Test
public void testRemoveWithArgs2() {
linkedList.remove(0, 2);
assertEquals("haha", linkedList.get(0));
assertEquals("momo", linkedList.get(1));
assertEquals("dada!", linkedList.get(2));
}
@Test
public void testRemoveWithArgs3() {
linkedList.remove(4, 1);
int size = linkedList.size();
System.out.println();
assertEquals("momo", linkedList.get(size - 1));
}
@Test
public void testGetElements() {
LinkedList link = new LinkedList();
LinkedList linkB = new LinkedList();
int test[] = {101, 301, 401, 601};
link.add(11);
link.add(101);
link.add(201);
link.add(301);
link.add(401);
link.add(501);
link.add(601);
link.add(701);
linkB.add(1);
linkB.add(3);
linkB.add(4);
linkB.add(6);
assertArrayEquals(test, link.getElements(linkB));
}
@Test
public void testSubtract() {
LinkedList link = new LinkedList();
LinkedList linkB = new LinkedList();
for (int i = 0; i < 5; ++i)
linkB.add(i);
for (int i = 0; i < 10; ++i)
link.add(i);
link.subtract(linkB);
assertEquals(5, link.size());
assertEquals(5, link.get(0));
assertEquals(6, link.get(1));
assertEquals(7, link.get(2));
assertEquals(8, link.get(3));
assertEquals(9, link.get(4));
}
@Test
public void testRemoveDuplicateValues() {
linkedList.add("GEGE");
linkedList.add("haha");
linkedList.add("dada!");
linkedList.removeDuplicateValues();
assertEquals(5, linkedList.size());
assertEquals("GEGE", linkedList.get(0));
assertEquals("haha", linkedList.get(2));
assertEquals("dada!", linkedList.get(4));
}
@Test
public void testRemoveRange() {
LinkedList link = new LinkedList();
for (int i = 10; i < 30; ++i) {
link.add(i);
}
link.removeRange(15, 19);
assertEquals(17, link.size());
link.removeRange(9, 13);
assertEquals(14, link.size());
assertEquals(13, (int)link.get(0));
link.removeRange(26, 30);
assertEquals(11, link.size());
assertEquals(26, (int)link.get(10));
}
@Test
public void testIntersection() {
LinkedList link = new LinkedList();
LinkedList linkB = new LinkedList();
for (int i = 10; i < 30; ++i)
link.add(i);
for (int j = 5; j < 20; ++j)
linkB.add(j);
LinkedList newLink = link.intersection(linkB);
assertEquals(35, newLink.size());
}
}