001 package listFW.test; 002 003 import junit.framework.TestCase; 004 005 import fp.*; 006 import listFW.*; 007 import listFW.visitor.*; 008 import listFW.factory.*; 009 010 /** 011 * Testing reversing a list. 012 * @author DXN 013 */ 014 public class TestReverse extends TestCase { 015 final IListFactory<String> fac = new CompositeListFactory<String>(); 016 IList<String> mt = fac.makeEmptyList(); 017 018 // same f as in TestAppend! 019 ILambda2<IList<String>,String,IList<String>> f = 020 new ILambda2<IList<String>,String,IList<String>>() { 021 public IList<String> apply(String arg1, IList<String> arg2) { 022 return fac.makeNEList(arg1, arg2); 023 } 024 }; 025 026 // but we fold in a different direction, and use a different initial value 027 FoldL<String,IList<String>> algo = new FoldL<String,IList<String>>(f); 028 029 @SuppressWarnings("unchecked") 030 public void testFoldEmpty() { 031 assertEquals("Reverse Empty list", "()", mt.execute(algo, mt).toString()); 032 } 033 034 @SuppressWarnings("unchecked") 035 public void testFoldNonEmpty() { 036 IList<String> L = fac.makeNEList("a", mt); 037 assertEquals("Reverse (a)", "(a)", L.execute(algo, mt).toString()); 038 L = fac.makeNEList("b", L); 039 assertEquals("Reverse ( b, a)", "(a, b)", L.execute(algo, mt).toString()); 040 L = fac.makeNEList("c", L); 041 assertEquals("Reverse ( c, b, a)", "(a, b, c)", L.execute(algo, mt).toString()); 042 } 043 044 @SuppressWarnings("unchecked") 045 public void testEmpty() { 046 assertEquals("Reverse Empty list", "()", mt.execute(new Reverse<String>(), fac).toString()); 047 } 048 049 @SuppressWarnings("unchecked") 050 public void testNonEmpty() { 051 IList<String> L = fac.makeNEList("a", mt); 052 assertEquals("Reverse (a)", "(a)", L.execute(new Reverse<String>(), fac).toString()); 053 L = fac.makeNEList("b", L); 054 assertEquals("Reverse ( b, a)", "(a, b)", L.execute(new Reverse<String>(), fac).toString()); 055 L = fac.makeNEList("c", L); 056 assertEquals("Reverse ( c, b, a)", "(a, b, c)", L.execute(new Reverse<String>(), fac).toString()); 057 } 058 059 }