// Crude test program for an immutable Stack ADT. public class TestStack { // Runs the tests. public static void main(String args[]) { TestStack test = new TestStack(); test.creation(); test.accessors(); test.summarize(); } private void summarize () { System.out.println(); System.out.println (totalErrors + " errors found in " + totalTests + " tests."); } public TestStack () { } private Stack s0; private Stack s1; private Stack s2; private Stack s3; private Stack s4; private Stack s5; private Stack s6; // Creates some Stack objects and stores them in this object. private void creation () { try { s0 = Stacks.empty(); s1 = s0.push (1); s2 = s1.push (2); s3 = s2.push (3); s4 = s0.push (4); s5 = s2.push (5); s6 = s5.push (6); } catch (Exception e) { assertTrue ("creation", false); } } private void accessors () { try { assertTrue ("isEmpty:s0", s0.isEmpty()); assertFalse ("isEmpty:s1", s1.isEmpty()); assertTrue ("top:s1", s1.top() == 1); assertTrue ("pop:s1", s1.pop().isEmpty()); assertTrue ("size:s0", s0.size() == 0); assertTrue ("size:s1", s1.size() == 1); assertTrue ("size:s4", s4.size() == 1); assertTrue ("size:s6", s6.size() == 4); assertTrue ("size:s5", s6.pop().size() == 3); assertTrue ("size:s6", s6.size() == 4); assertTrue ("top:null", s6.push(null).top() == null); assertTrue ("pop:null", s6.push(null).pop().equals(s6)); // This isn't really a test, just an example. Stack s = s6; while (! s.isEmpty()) { System.out.println (s.top()); s = s.pop(); } System.out.println(); s = s6; while (! s.isEmpty()) { System.out.println (s.top()); s = s.pop(); } } catch (Exception e) { assertTrue ("accessors", false); } } private int totalTests = 0; // tests run so far private int totalErrors = 0; // errors so far // For anonymous tests. Deprecated. private void assertTrue (boolean result) { assertTrue ("anonymous", result); } // Prints failure report if the result is not true. private void assertTrue (String name, boolean result) { if (! result) { System.out.println (); System.out.println ("***** Test failed ***** " + name + ": " +totalTests); totalErrors = totalErrors + 1; } totalTests = totalTests + 1; } // For anonymous tests. Deprecated. private void assertFalse (boolean result) { assertTrue (! result); } // Prints failure report if the result is not false. private void assertFalse (String name, boolean result) { assertTrue (name, ! result); } }