package test.collection; import java.util.EmptyStackException; import static util.TestUtil.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import collection.concrete.Stack; import junit.framework.TestCase; public class StackTest extends TestCase { Stack<Integer> myStack; @Override @Before public void setUp() throws Exception { myStack = new Stack<Integer>(); } @Override @After public void tearDown() throws Exception { myStack = null; } @Test public void testIsEmpty() { assertEquals(true, myStack.isEmpty()); myStack.push(getRandomNumber()); assertEquals(false, myStack.isEmpty()); } @Test public void testPush() { for (int i = 0; i < 10; i++) { assertEquals(i, myStack.size()); myStack.push(i); } } @Test public void testPop() { testPush(); int size = myStack.size(); for (int i = size; i > 0; i--) { assertEquals(i, myStack.size()); int expect = i - 1; assertEquals(i, myStack.size()); int actual = myStack.pop(); assertEquals(expect, actual); } try { myStack.pop(); fail("no exception throw"); } catch (Exception e) { assertEquals(EmptyStackException.class, e.getClass()); } } @Test public void testPeek() { int expected = 0; int peek1 = 0; int repeated = 0; for (int i = 0; i < 10; i++) { myStack.push(i); expected = i; peek1 = myStack.peek(); assertEquals(expected, peek1); for (int j = 0; j < i; j++) { repeated = myStack.peek(); assertEquals(expected, repeated); } } } public void testGet() { try { myStack.get(getRandomNumber()); fail("no exception throw"); } catch (Exception e) { assertEquals(EmptyStackException.class, e.getClass()); } } @Test public void testSize() { for (int i = 0; i < 10000; i++) { assertEquals(i, myStack.size()); myStack.push(i); } } @Test public void testAdd() { int size = getRandomNumber(); int[] expected = new int[size]; int actual; for (int i = 0; i < size; i++) { actual = getRandomNumber(); expected[i] = actual; myStack.add(actual); } int expectedInt; for (int i = 0; i < size; i++) { expectedInt = expected[size - i - 1]; actual = myStack.pop(); assertEquals(expectedInt, actual); } } @Test public void testPopPushAndPeek() { for (int i = 0; i < 10; i++) { int expected = i; myStack.push(i); int a = 0; myStack.push(a); myStack.pop(); int actual = myStack.peek(); assertEquals(expected, actual); } } }