// $Id: BadStackTest.java,v 1.1 2002/08/30 04:49:28 leavens Exp $
// Com S 362 homework

import junit.framework.*;

/** A class to test expressions */
public class BadStackTest extends TestCase {

    /** Run the tests */
    public static void main(String args[]) {
        String[] testCaseName = {BadStackTest.class.getName()};
        junit.swingui.TestRunner.main(testCaseName);
    }

    /** Return the test suite */
    public static Test suite() {
        return new TestSuite(BadStackTest.class);
    }

    /** Initialize the name of this test case. */
    public BadStackTest(String name) {
        super(name);
    }

    /** Test fixture; a BadStack instance. */
    private BadStack stk;
    private BadStack[] receivers;
    private Object [] objs;

    /** Initialize the test fixture. */
    protected void setUp() {
        stk = new BadStack();
        int size = 6;
        receivers = new BadStack[size];
        objs = new Object[size];
        for (int i = 0; i < objs.length; i++) {
            objs[i] = new Integer(i);
            receivers[i] = new BadStack();
            for (int j = i; 0 <= j; j--) {
                receivers[i].push(objs[j]);
            }
        }

    }

    /** Test push, pop, top, and size expressions. */
    public void testPushPopTopSize() {
        assertTrue(stk.size() == 0);
        int i;
        for (i = 0; i < objs.length; i++) {
            assertEquals(i, stk.size());
            stk.push(objs[i]);
            assertEquals(i+1, stk.size());
            assertSame(objs[i], stk.top());
        }

        assertTrue(stk.size() == objs.length);

        while (stk.size() != 0) {
            assertEquals(i, stk.size());
            assertSame(objs[i-1], stk.top());
            stk.pop();
            assertEquals(i-1, stk.size());
            i -= 1;
        }
    }

    /** Test isEmpty. */
    public void testIsEmpty() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(receivers[i].size() == 0, receivers[i].isEmpty());
        }
    }

    /** Test isNotEmpty. */
    public void testIsNotEmpty() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(receivers[i].size() != 0, receivers[i].isNotEmpty());
        }
    }

    /** Test spaceRemaining. */
    public void testSpaceRemaining() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(BadStack.MAX_SIZE - receivers[i].size(),
                         receivers[i].spaceRemaining());
        }
    }

    /** Test maximumSize. */
    public void testMaximumSize() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(BadStack.MAX_SIZE,
                         receivers[i].maximumSize());
        }
    }

    /** Test isFull. */
    public void testIsFull() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(BadStack.MAX_SIZE == receivers[i].size(),
                         receivers[i].isFull());
        }
    }


    /** Test isNotFull. */
    public void testIsNotFull() {
        for (int i = 0; i < receivers.length; i++) {
            assertEquals(BadStack.MAX_SIZE != receivers[i].size(),
                         receivers[i].isNotFull());
        }
    }

}
