import list.*; import list.visitor.*; /** * A simple test program for AList and its subclasses. * * @author Dung X. Nguyen */ public class ListClient { public static void main (String[] args) { AList pc0 = ListFactory.Singleton.makeEmptyList(); AList pc1 = ListFactory.Singleton.makeNEList (new Integer(-1), pc0); AList p1 = ListFactory.Singleton.makeNEList ("-5", pc0); // NOTE: "-5" is a String, not an Integer! AList p2 = ListFactory.Singleton.makeNEList (new Integer(2), p1); AList p3 = ListFactory.Singleton.makeNEList (new Integer(-4), p2); AList p4 = ListFactory.Singleton.makeNEList (new Integer(3), pc1); ListClient client = new ListClient (); // uses default constructor! System.out.println ("\nTesting toString(): \n"); System.out.println ("EmptyList = " + pc0); System.out.println ("(-1) = " + pc1); System.out.println ("(3 -1) = " + p4); System.out.println ("(-5) = " + p1); System.out.println ("(2 -5) = " + p2); System.out.println ("(-4 2 -5) = " + p3); System.out.println ("\nTesting reverse(): \n"); client.testVisitor (pc0, Reverse.Singleton, null); client.testVisitor (pc1, Reverse.Singleton, null); client.testVisitor (p1, Reverse.Singleton, null); client.testVisitor (p2, Reverse.Singleton, null); client.testVisitor (p3, Reverse.Singleton, null); client.testVisitor (p4, Reverse.Singleton, null); System.out.println ("\nTesting makeClone(): \n"); client.testVisitor (pc0, MakeClone.Singleton, null); client.testVisitor (pc1, MakeClone.Singleton, null); client.testVisitor (p1, MakeClone.Singleton, null); client.testVisitor (p2, MakeClone.Singleton, null); client.testVisitor (p3, MakeClone.Singleton, null); client.testVisitor (p4, MakeClone.Singleton, null); System.out.println ("\nTesting NthElement(): \n"); client.testVisitor (pc0, NthElement.Singleton, new Integer(2)); client.testVisitor (pc1, NthElement.Singleton, new Integer(0)); client.testVisitor (p4, NthElement.Singleton, new Integer(1)); client.testVisitor (p3, NthElement.Singleton, new Integer(0)); client.testVisitor (p3, NthElement.Singleton, new Integer(1)); client.testVisitor (p3, NthElement.Singleton, new Integer(2)); client.testVisitor (p3, NthElement.Singleton, new Integer(3)); System.out.println ("\nTesting lastElement(): \n"); client.testVisitor (pc0, LastElement.Singleton, null); client.testVisitor (pc1, LastElement.Singleton, null); client.testVisitor (p1, LastElement.Singleton, null); client.testVisitor (p2, LastElement.Singleton, null); client.testVisitor (p3, LastElement.Singleton, null); client.testVisitor (p4, LastElement.Singleton, null); System.out.println ("\nTesting firstNElements(): \n"); client.testVisitor (pc0, FirstElements.Singleton, new Integer(2)); client.testVisitor (pc1, FirstElements.Singleton, new Integer(0)); client.testVisitor (p4, FirstElements.Singleton, new Integer(1)); client.testVisitor (p3, FirstElements.Singleton, new Integer(0)); client.testVisitor (p3, FirstElements.Singleton, new Integer(1)); client.testVisitor (p3, FirstElements.Singleton, new Integer(2)); client.testVisitor (p3, FirstElements.Singleton, new Integer(3)); client.testVisitor (p3, FirstElements.Singleton, new Integer(4)); System.out.println ("\nTesting Append(): \n"); client.testVisitor (pc0, Append.Singleton, p4); client.testVisitor (pc1, Append.Singleton, pc0); client.testVisitor (p4, Append.Singleton, p3); client.testVisitor (p3, Append.Singleton, p2); } private void testVisitor(AList p, IListAlgo algo, Object input) { // NOTE the use of Object.getClass ()!!! // Also watch what happens when input == null!!! try { System.out.println (p + " execute " + algo.getClass () + ", " + input + "..."); System.out.println (" ---> " + p.execute (algo, input)); } catch (Exception e) { System.out.println (e); } } }