package test.collection;
import static util.TestUtil.*;
import java.util.Date;
import java.util.NoSuchElementException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import collection.Iterator;
import collection.List;
import collection.concrete.LinkedList;
import junit.framework.TestCase;
public class LinkedListTest extends TestCase {
LinkedList<String> myLL;
@Override
@Before
public void setUp() throws Exception {
myLL = new LinkedList<String>();
assertEquals(0, myLL.size());
}
@Override
@After
public void tearDown() throws Exception {
myLL = null;
}
@Test
public void testLinkedList() {
List rawList = new LinkedList();
assertEquals(rawList.size(), 0);
rawList.add(new Date());
assertEquals(1, rawList.size());
}
@Test
public void testReverse() {
addString(myLL, 5);
myLL.reverse();
}
@Test
public void testRemoveFirstHalf() {
addString(myLL, 5);
myLL.removeFirstHalf();
assertEquals(3, myLL.size());
assertEquals("2", myLL.get(0));
assertEquals("3", myLL.get(1));
assertEquals("4", myLL.get(2));
}
@Test
public void testAddE() {
myLL.add("s");
assertEquals(1, myLL.size());
assertEquals(false, myLL.isEmpty());
}
@Test
public void testAddStringE() {
String a;
addString(myLL, 30);
// for (int i = 0 ; i < 29; i++) {
// a = "" + i;
// assertEquals(myLL.get(i),a);
// }
}
@Test
public void testAddIndex() {
String a;
for (int i = 0; i < 30; i++) {
a = "" + i;
myLL.add(a);
}
String ss = "ss";
myLL.add(3, ss);
assertEquals(myLL.get(3), ss);
assertEquals(myLL.get(2), "2");
assertEquals(myLL.get(4), "3");
}
public void testAddFirst() {
String a;
for (int i = 0; i < 20; i++) {
a = "" + i;
myLL.add(a);
}
String ss = "bba";
myLL.addFirst(ss);
assertEquals(ss, myLL.get(0));
assertEquals(21, myLL.size());
;
for (int i = 1; i < myLL.size(); i++) {
a = (i - 1) + "";
assertEquals(a, myLL.get(i));
}
}
public void testAddLast() {
String a;
for (int i = 0; i < 25; i++) {
a = "" + i;
myLL.add(a);
}
String ss = "25";
myLL.addLast(ss);
int size = myLL.size();
assertEquals(26, size);
for (int i = 0; i < size; i++) {
a = i + "";
assertEquals(a, myLL.get(i));
}
}
@Test
public void testRemoveFirst() {
String a = "";
String result = "";
for (int i = 0; i < 10; i++) {
myLL.add(i + "");
}
myLL.removeFirst();
assertEquals(9, myLL.size());
for (int i = 0; i < myLL.size(); i++) {
a = i + 1 + "";
assertEquals(a, myLL.get(i));
}
int size = myLL.size();
for (int i = 0; i < size; i++) {
a = i + 1 + "";
result = myLL.removeFirst();
assertEquals(a, result);
}
assertEquals(0, myLL.size());
}
@Test
public void testRemoveLast() {
String a = "";
String result = "";
for (int i = 0; i < 10; i++) {
myLL.add(i + "");
}
myLL.removeLast();
assertEquals(9, myLL.size());
for (int i = 0; i < myLL.size(); i++) {
a = i + "";
assertEquals(a, myLL.get(i));
}
int size = myLL.size();
for (int i = 0; i < size; i++) {
a = myLL.size() - 1 + "";
result = myLL.removeLast();
assertEquals(a, result);
}
assertEquals(0, myLL.size());
}
@Test
public void testRemove() {
String res = "";
String a = "";
for (int i = 0; i < 10; i++) {
myLL.add(i + "");
}
for (int i = myLL.size() - 1; i >= 0; i--) {
a = myLL.get(i);
res = myLL.remove(i);
assertEquals(i, myLL.size());
assertEquals(a, res);
}
}
@Test
public void testSize() {
assertEquals(0, myLL.size());
}
@Test
public void testIterator() {
for (int i = 0; i < 10; i++) {
myLL.add(i + "");
}
Iterator<String> it = myLL.iterator();
for (int i = 0; it.hasNext(); i++) {
String res = it.next();
assertEquals(i + "", res);
}
try {
it.next();
} catch (NoSuchElementException ex) {
assertEquals(ex.getClass(), NoSuchElementException.class);
}
}
}