package me.lzb.basic.list;
import me.lzb.basic.list.Iterator;
import me.lzb.basic.list.LinkedList;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* linkedliksTest
* Created by LZB on 2017/3/11.
*/
public class LinkedListTest {
private LinkedList linkedList;
private LinkedList intList;
private String[] strArray;
@Rule
public ExpectedException thrown = ExpectedException.none();
@Before
public void instantiate() throws Exception {
linkedList = new LinkedList();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
linkedList.add("d");
strArray = new String[]{"a", "b", "c", "d"};
intList = new LinkedList();
intList.add(0);
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);
intList.add(6);
intList.add(7);
intList.add(8);
}
@Test
public void iteratoreTest() {
Iterator iterator = linkedList.iterator();
int a = 0;
while (iterator.hasNext()) {
Assert.assertEquals(strArray[a], iterator.next().toString());
a = a + 1;
}
}
@Test
public void sizeTest() {
Assert.assertEquals(4, linkedList.size(), 0);
}
@Test
public void getTest() throws IndexOutOfBoundsException {
Assert.assertEquals("a", linkedList.get(0).toString());
Assert.assertEquals("b", linkedList.get(1).toString());
Assert.assertEquals("d", linkedList.get(3).toString());
thrown.expect(IndexOutOfBoundsException.class);
thrown.expectMessage("index boom");
linkedList.get(100);
linkedList.get(-1);
}
@Test
public void addTest() {
linkedList.add("f");
Assert.assertEquals("f", linkedList.get(4).toString());
}
@Test
public void removeTest() throws IndexOutOfBoundsException {
String r1 = linkedList.remove(1).toString();
Assert.assertEquals("b", r1);
Assert.assertEquals(3, linkedList.size());
String r0 = linkedList.remove(0).toString();
Assert.assertEquals("a", r0);
Assert.assertEquals(2, linkedList.size());
String rs = linkedList.remove(linkedList.size() - 1).toString();
Assert.assertEquals("d", rs);
Assert.assertEquals(1, linkedList.size());
thrown.expect(IndexOutOfBoundsException.class);
thrown.expectMessage("index boom");
linkedList.remove(100);
linkedList.remove(-1);
}
@Test
public void addIndexTest() throws IndexOutOfBoundsException {
linkedList.add(0, "0");
Assert.assertEquals("0", linkedList.get(0).toString());
linkedList.add(linkedList.size(), "s");
Assert.assertEquals("s", linkedList.get(linkedList.size() - 1).toString());
linkedList.add(2, "2a");
Assert.assertEquals("2a", linkedList.get(2).toString());
thrown.expect(IndexOutOfBoundsException.class);
thrown.expectMessage("index boom");
linkedList.add(100, "10a");
}
@Test
public void reverseTest() {
linkedList.reverse();
Assert.assertEquals("[d,c,b,a]", linkedList.toString());
}
@Test
public void removeFirstHalfTest() {
intList.removeFirstHalf();
Assert.assertEquals("[4,5,6,7,8]", intList.toString());
Assert.assertEquals(5, intList.size());
linkedList.removeFirstHalf();
Assert.assertEquals("[c,d]", linkedList.toString());
Assert.assertEquals(2, linkedList.size());
}
@Test
public void removeITest() {
intList.remove(0, 10);
Assert.assertEquals("[]", intList.toString());
Assert.assertEquals(0, intList.size());
linkedList.remove(1, 2);
Assert.assertEquals("[a,d]", linkedList.toString());
Assert.assertEquals(2, linkedList.size());
LinkedList l = new LinkedList();
l.add("a");
l.add("b");
l.add("c");
l.add("d");
l.remove(0, 2);
Assert.assertEquals("[c,d]", l.toString());
Assert.assertEquals(2, l.size());
}
@Test
public void getElementsTest() {
int[] a = {1, 3, 4, 6};
LinkedList l = new LinkedList();
l.add(1);
l.add(3);
l.add(4);
l.add(6);
int[] re = intList.getElements(l);
Assert.assertEquals(a.length, re.length);
for (int i = 0; i < a.length; i++) {
Assert.assertEquals(a[i], re[i]);
}
}
@Test
public void subtractTest() {
LinkedList l = new LinkedList();
l.add(1);
l.add(3);
l.add(4);
l.add(6);
intList.subtract(l);
Assert.assertEquals(5, intList.size());
Assert.assertEquals("[0,2,5,7,8]", intList.toString());
}
@Test
public void removeDuplicateValuesTest() {
LinkedList list = new LinkedList();
list.add(1);
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(5);
list.add(5);
list.add(6);
list.removeDuplicateValues();
Assert.assertEquals("[1,2,3,5,6]", list.toString());
}
@Test
public void removeRangeTest() {
{
LinkedList linkedList = new LinkedList();
linkedList.add(11);
linkedList.add(12);
linkedList.add(13);
linkedList.add(14);
linkedList.add(16);
linkedList.add(16);
linkedList.add(19);
linkedList.removeRange(10, 19);
Assert.assertEquals("[19]", linkedList.toString());
}
{
LinkedList linkedList = new LinkedList();
linkedList.add(11);
linkedList.add(12);
linkedList.add(13);
linkedList.add(14);
linkedList.add(16);
linkedList.add(16);
linkedList.add(19);
linkedList.removeRange(10, 14);
Assert.assertEquals("[14,16,16,19]", linkedList.toString());
}
}
@Test
public void intersectionTest() {
LinkedList list1 = new LinkedList();
list1.add(1);
list1.add(6);
list1.add(7);
LinkedList list2 = new LinkedList();
list2.add(2);
list2.add(5);
list2.add(6);
LinkedList newList = list1.intersection(list2);
Assert.assertEquals("[6]", newList.toString());
}
}