package com.johnChnia.coding2017.basic;
import org.junit.Before;
import org.junit.Test;
import com.johnChnia.coding2017.basic.linklist.LinkedList;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
/**
* Created by john on 2017/3/9.
*/
public class LinkedListTest {
private LinkedList<Integer> linkList1;
private LinkedList<Integer> linkList2;
private LinkedList<Integer> linkList3;
private LinkedList<Integer> linkList4;
private LinkedList<Integer> linkList5;
private LinkedList<Integer> linkList6;
private LinkedList<Integer> linkList7;
private LinkedList<Integer> linkList8;
private LinkedList<Integer> linkList9;
private LinkedList<Integer> linkList10;
private LinkedList<Integer> linkList11;
private LinkedList<Integer> linkList12;
private LinkedList<Integer> linkList13;
private LinkedList<Integer> linkList14;
private LinkedList<Integer> linkList15;
private LinkedList<Integer> linkList16;
private LinkedList<Integer> linkList17;
private LinkedList<Integer> linkList18;
@Before
public void setUp() throws Exception {
linkList1 = new LinkedList<>();
linkList2 = new LinkedList<>();
linkList3 = new LinkedList<>();
linkList4 = new LinkedList<>();
linkList5 = new LinkedList<>();
linkList6 = new LinkedList<>();
linkList7 = new LinkedList<>();
linkList8 = new LinkedList<>();
linkList9 = new LinkedList<>();
linkList10 = new LinkedList<>();
linkList11 = new LinkedList<>();
linkList12 = new LinkedList<>();
linkList13 = new LinkedList<>();
linkList14 = new LinkedList<>();
linkList15 = new LinkedList<>();
linkList16 = new LinkedList<>();
linkList17 = new LinkedList<>();
linkList18 = new LinkedList<>();
}
@Test
public void testAddAndGet() {
for (int i = 0; i < 4; i++) {
linkList1.add(i);
}
assertThat(linkList1.get(0), equalTo(0));
assertThat(linkList1.get(1), equalTo(1));
assertThat(linkList1.get(2), equalTo(2));
}
@Test
public void testSize() {
for (int i = 0; i < 4; i++) {
linkList3.add(i);
}
assertThat(linkList3.size(), equalTo(4));
}
@Test
public void testAddFirst() {
for (int i = 0; i < 4; i++) {
linkList2.addFirst(i);
}
assertThat(linkList2.get(0), equalTo(3));
assertThat(linkList2.get(1), equalTo(2));
}
@Test
public void testRemoveLast() {
for (int i = 0; i < 2; i++) {
linkList4.addFirst(i);
}
linkList4.removeLast();
linkList4.removeLast();
assertThat(linkList4.size(), equalTo(0));
}
@Test
public void testAddByIndex() {
for (int i = 0; i < 2; i++) {
linkList5.add(i);
}
linkList5.add(0, 100);
linkList5.add(1, 1000);
System.out.println(linkList5);
assertThat(linkList5.get(1), equalTo(1000));
}
@Test
public void testRemoveFirst() {
for (int i = 0; i < 4; i++) {
linkList6.addFirst(i);
}
linkList6.removeFirst();
linkList6.removeFirst();
linkList6.removeFirst();
assertThat(linkList6.get(0), equalTo(0));
}
@Test
public void testReverse() {
linkList7.add(3);
linkList7.add(7);
linkList7.add(10);
linkList7.reverse();
assertThat(linkList7.toString(), containsString("10→7→3"));
}
@Test
public void testRemoveFirstHalf() {
linkList8.add(2);
linkList8.add(5);
linkList8.add(7);
linkList8.add(8);
linkList8.add(10);
linkList8.removeFirstHalf();
assertThat(linkList8.toString(), containsString("7→8→10"));
}
@Test
public void testRemove() {
for (int i = 1; i < 6; i++) {
linkList9.add(i);
}
linkList9.remove(0, 4);
assertThat(linkList9.toString(), containsString("5"));
}
@Test
public void testRemoveDuplicateValues() {
linkList11.add(1);
linkList11.add(1);
linkList11.add(1);
linkList11.add(2);
linkList11.add(3);
linkList11.add(3);
linkList11.removeDuplicateValues();
assertThat(linkList11.toString(), containsString("1→2→3"));
}
@Test
public void testRemoveRange() {
linkList10.add(1);
linkList10.add(1);
linkList10.add(2);
linkList10.add(3);
linkList10.add(4);
linkList10.add(5);
linkList10.add(6);
linkList10.removeRange(1, 4);
assertThat(linkList10.toString(), containsString("4→5→6"));
}
@Test
public void testIntersection() {
for (int i = 1; i < 6; i++) {
linkList12.add(i);
}
for (int i = 3; i < 9; i++) {
linkList13.add(i);
}
assertThat(linkList12.intersection(linkList13).toString()
, containsString("3→4→5"));
}
@Test
public void testGetElements() {
linkList15.add(1);
linkList15.add(3);
linkList15.add(4);
linkList15.add(6);
linkList14.add(11);
linkList14.add(101);
linkList14.add(201);
linkList14.add(301);
linkList14.add(401);
linkList14.add(501);
linkList14.add(601);
linkList14.add(701);
linkList14.getElements(linkList15);
assertThat(Arrays.toString(linkList14.getElements(linkList15))
, containsString("[101, 301, 401, 601]"));
}
@Test
public void testSubtract() {
for (int i = 1; i < 5; i++) {
linkList17.add(i);
}
for (int i = 1; i < 4; i++) {
linkList18.add(i);
}
linkList17.subtract(linkList18);
assertThat(linkList17.toString()
, containsString("4"));
}
}