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 appending a list. 012 * @author DXN 013 */ 014 public class TestAppend extends TestCase { 015 final IListFactory<Object> fac = new CompositeListFactory<Object>(); 016 IList<Object> mt = fac.makeEmptyList(); 017 IList<Object> ne1 = fac.makeNEList("1", fac.makeNEList("2", fac.makeNEList("3", mt))); 018 IList<Object> ne2 = fac.makeNEList("a", fac.makeNEList("b", mt)); 019 020 // same f as in TestReverse! 021 ILambda2<IList<Object>,Object,IList<Object>> f = new ILambda2<IList<Object>,Object,IList<Object>>() { 022 public IList<Object> apply(Object arg1, IList<Object> arg2) { 023 return fac.makeNEList(arg1, arg2); 024 } 025 }; 026 027 // but we fold in a different direction, and use a different initial value 028 FoldR<Object,IList<Object>> algo = new FoldR<Object,IList<Object>>(f); 029 030 @SuppressWarnings("unchecked") 031 public void testFoldEmpty() { 032 assertEquals("Append Empty/Empty list", "()", mt.execute(algo, mt).toString()); 033 } 034 035 @SuppressWarnings("unchecked") 036 public void testFoldEmptyNE() { 037 assertEquals("Append Empty/NE list", "(1, 2, 3)", mt.execute(algo, ne1).toString()); 038 } 039 040 @SuppressWarnings("unchecked") 041 public void testFoldNEEmpty() { 042 assertEquals("Append NE/Empty list", "(a, b)", ne2.execute(algo, mt).toString()); 043 } 044 045 @SuppressWarnings("unchecked") 046 public void testFoldNENE() { 047 assertEquals("Append NE/NE list", "(a, b, 1, 2, 3)", ne2.execute(algo, ne1).toString()); 048 assertEquals("Append NE/NE list", "(1, 2, 3, a, b)", ne1.execute(algo, ne2).toString()); 049 } 050 051 @SuppressWarnings("unchecked") 052 public void testEmpty() { 053 assertEquals("Append Empty/Empty list", "()", mt.execute(new Append<Object>(fac), mt).toString()); 054 } 055 056 @SuppressWarnings("unchecked") 057 public void testEmptyNE() { 058 assertEquals("Append Empty/NE list", "(1, 2, 3)", mt.execute(new Append<Object>(fac), ne1).toString()); 059 } 060 061 @SuppressWarnings("unchecked") 062 public void testNEEmpty() { 063 assertEquals("Append NE/Empty list", "(a, b)", ne2.execute(new Append<Object>(fac), mt).toString()); 064 } 065 066 @SuppressWarnings("unchecked") 067 public void testNENE() { 068 assertEquals("Append NE/NE list", "(a, b, 1, 2, 3)", ne2.execute(new Append<Object>(fac), ne1).toString()); 069 assertEquals("Append NE/NE list", "(1, 2, 3, a, b)", ne1.execute(new Append<Object>(fac), ne2).toString()); 070 } 071 }