package fr.moresmau.jp.collections; import fr.moresmau.jp.collections.VList; import fr.moresmau.jp.func.Function1; import fr.moresmau.jp.func.Mapper; import junit.framework.TestCase; public class VListTest extends TestCase { public void testBuild(){ VList vl=new VList(); assertEquals(0,vl.size()); vl.addFirst("A"); assertEquals(1,vl.size()); vl.addFirst("B"); assertEquals(2,vl.size()); vl.addFirst("C"); assertEquals(3,vl.size()); vl.addFirst("D"); assertEquals(4,vl.size()); String s=vl.last(); assertEquals("A",s); vl.dump(); s=vl.removeFirst(); assertEquals("D",s); assertEquals(3,vl.size()); s=vl.first(); assertEquals("C",s); s=vl.last(); assertEquals("A",s); } public void testEmpty(){ VList vl=new VList(); assertEquals(0,vl.size()); vl.addFirst("A"); assertEquals(1,vl.size()); String s=vl.removeFirst(); assertEquals("A",s); vl.addFirst("A"); assertEquals(1,vl.size()); s=vl.removeFirst(); assertEquals("A",s); } public void testFirst(){ VList vl=new VList(); vl.addFirst("A"); String s=vl.first(); assertNotNull(s); assertEquals("A",s); vl.addFirst("B"); s=vl.first(); assertNotNull(s); assertEquals("B",s); vl.addFirst("C"); s=vl.first(); assertNotNull(s); assertEquals("C",s); vl.addFirst("D"); s=vl.first(); assertNotNull(s); assertEquals("D",s); } public void testGet(){ VList vl=new VList(); vl.addFirst("A"); vl.addFirst("B"); vl.addFirst("C"); vl.addFirst("D"); String s=vl.get(0); assertNotNull(s); assertEquals("D",s); s=vl.get(1); assertNotNull(s); assertEquals("C",s); s=vl.get(2); assertNotNull(s); assertEquals("B",s); s=vl.get(3); assertNotNull(s); assertEquals("A",s); try { vl.get(5); fail("no ArrayIndexOutOfBoundsException thrown"); } catch (ArrayIndexOutOfBoundsException ai){ // OK } } public void testRest(){ VList vl=new VList(); vl.addFirst("A"); vl.addFirst("B"); vl.addFirst("C"); vl.addFirst("D"); VList vl2=vl.rest(); assertEquals(4,vl.size()); assertEquals(3,vl2.size()); String s=vl2.first(); assertNotNull(s); assertEquals("C",s); s=vl2.get(0); assertNotNull(s); assertEquals("C",s); s=vl2.get(1); assertNotNull(s); assertEquals("B",s); s=vl2.get(2); assertNotNull(s); assertEquals("A",s); } public void testRestAdd(){ VList vl=new VList(); vl.addFirst("A"); vl.addFirst("B"); vl.addFirst("C"); vl.addFirst("D"); vl.addFirst("E"); VList vl2=vl.rest(); assertEquals(4,vl2.size()); vl2.addFirst("F"); assertEquals(5,vl2.size()); assertEquals(5,vl.size()); String s=vl2.first(); assertNotNull(s); assertEquals("F",s); s=vl2.get(0); assertNotNull(s); assertEquals("F",s); s=vl2.get(1); assertNotNull(s); assertEquals("D",s); s=vl2.get(2); assertNotNull(s); assertEquals("C",s); s=vl2.get(3); assertNotNull(s); assertEquals("B",s); s=vl2.get(4); assertNotNull(s); assertEquals("A",s); s=vl.first(); assertNotNull(s); assertEquals("E",s); s=vl.get(0); assertNotNull(s); assertEquals("E",s); s=vl.get(1); assertNotNull(s); assertEquals("D",s); s=vl.get(2); assertNotNull(s); assertEquals("C",s); s=vl.get(3); assertNotNull(s); assertEquals("B",s); s=vl.get(4); assertNotNull(s); assertEquals("A",s); } public void testIterator(){ VList vl=new VList(); vl.addFirst("D"); vl.addFirst("C"); vl.addFirst("B"); vl.addFirst("A"); int count=0; for (String s:vl){ assertEquals(s.charAt(0),'A'+count); count++; } } public void testMap(){ VList vl=new VList(); vl.addFirst(3); vl.addFirst(2); vl.addFirst(1); vl.addFirst(0); Mapper m=new Mapper(){ public Long map(Integer initial) { return new Long(initial.longValue()*2); } }; VList ret=vl.map(m); assertEquals(4,ret.size()); long count=0; for (Long l : ret){ assertEquals(count*2,l.longValue()); count++; } } public void testFilter(){ VList vl=new VList(); vl.addFirst(3); vl.addFirst(2); vl.addFirst(1); vl.addFirst(0); VList vlf=vl.filter(new Function1(){ @Override public Boolean run(Integer p) { return p.intValue()%2==0; } }); assertNotNull(vlf); assertEquals(2,vlf.size()); assertEquals(0,vlf.get(0).intValue()); assertEquals(2,vlf.get(1).intValue()); } }