package org.nutz.lang.util;
import static org.junit.Assert.*;
import java.util.Iterator;
import org.junit.Before;
import org.junit.Test;
public class LinkedArrayTest {
private LinkedArray<String> la;
@Before
public void setUp() throws Exception {
la = new LinkedArray<String>(2);
la.pushAll("A", "B", "C", "D", "E", "F", "G");
}
@Test
public void test_iterator() {
la = new LinkedArray<String>(2);
la.pushAll("A", "B", "C", "D", "E", "F", "G");
la.popFirst();
la.popFirst();
la.popFirst();
Iterator<String> it = la.iterator();
assertEquals("D", it.next());
assertEquals("E", it.next());
assertEquals("F", it.next());
assertEquals("G", it.next());
assertFalse(it.hasNext());
assertNull(it.next());
assertNull(it.next());
}
@Test
public void test_re_push() {
la = new LinkedArray<String>();
la.push("A").popLast();
la.push("F");
assertEquals("F", la.last());
assertEquals(1, la.size());
}
@Test
public void testNormal() {
assertEquals(7, la.size());
assertEquals("A", la.first());
assertEquals("G", la.last());
}
@Test
public void testPopfirst() {
assertEquals("A", la.popFirst());
assertEquals("B", la.popFirst());
assertEquals("C", la.popFirst());
assertEquals("D", la.popFirst());
assertEquals("E", la.popFirst());
assertEquals("F", la.popFirst());
assertEquals("G", la.popFirst());
assertEquals(0, la.size());
}
@Test
public void testPoplast() {
assertEquals("G", la.popLast());
assertEquals("F", la.popLast());
assertEquals("E", la.popLast());
assertEquals("D", la.popLast());
assertEquals("C", la.popLast());
assertEquals("B", la.popLast());
assertEquals("A", la.popLast());
assertEquals(0, la.size());
}
@Test
public void testPop() {
la.popFirst();
assertEquals("B", la.first());
la.popFirst();
assertEquals("C", la.first());
la.popLast();
assertEquals("F", la.last());
la.popLast();
assertEquals("E", la.last());
}
@Test
public void testToString() {
assertEquals("[\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\"]", la.toString());
}
@Test
public void testGetSet() {
assertEquals("C", la.get(2));
la.set(2, "$");
assertEquals("$", la.get(2));
}
@Test
public void testGetSetOutOfBound() {
try {
la.get(-1);
fail();
}
catch (Exception e) {}
try {
la.get(la.size());
fail();
}
catch (Exception e) {}
try {
la.set(-1, "#");
fail();
}
catch (Exception e) {}
try {
la.set(la.size(), "#");
fail();
}
catch (Exception e) {}
}
@Test
public void testClear() {
assertFalse(la.isEmpty());
la.clear();
assertTrue(la.isEmpty());
assertEquals(0, la.size());
}
}