package fr.moresmau.jp.collections; import java.math.BigInteger; import java.util.Iterator; import java.util.List; import fr.moresmau.jp.collections.InfiniteList; import fr.moresmau.jp.func.Mapper; import junit.framework.TestCase; public class InfiniteListTest extends TestCase { public InfiniteListTest() { super(); } public InfiniteListTest(String arg0) { super(arg0); } public void testIntegersGet(){ InfiniteList il=new InfiniteList(){ @Override protected Integer getNext() { return this.getData().size()+1; } }; assertEquals(1,(int)il.get(0)); assertEquals(2,(int)il.get(1)); assertEquals(1001,(int)il.get(1000)); } public void testIntegersIterator(){ InfiniteList il=new InfiniteList(){ @Override protected Integer getNext() { return this.getData().size()+1; } }; Iterator it=il.iterator(); for (int a=0;a<100;a++){ assertEquals(a+1,(int)it.next()); } } public void testIntegersTake(){ InfiniteList il=new InfiniteList(){ @Override protected Integer getNext() { return this.getData().size()+1; } }; List five=il.take(5); assertNotNull(five); assertEquals(5,five.size()); assertEquals(5,(int)five.get(4)); List ten=il.take(5,10); assertNotNull(ten); assertEquals(5,ten.size()); assertEquals(10,(int)ten.get(4)); } public void testIntegersPrecalculate(){ InfiniteList il=new InfiniteList(10){ @Override protected Integer getNext() { return this.getData().size()+1; } }; assertEquals(10,il.getCalculatedLength()); assertEquals(10,(int)il.get(9)); } public void testFibonacci(){ InfiniteList il=new InfiniteList(10){ @Override protected BigInteger getNext() { switch (this.getData().size()){ case 0:return new BigInteger("1"); case 1:return new BigInteger("1"); default: return this.getData().get(this.getData().size()-1).add(this.getData().get(this.getData().size()-2)); } } }; long[] fib={1,1,2,3,5,8,13,21,34,55}; for (int a=0;a il=new InfiniteList(){ @Override protected Integer getNext() { return this.getData().size()+1; } }; InfiniteList il2=il.map(new Mapper(){ public Integer map(Integer initial) { return initial*2; } }); assertEquals(1*2,(int)il2.get(0)); assertEquals(2*2,(int)il2.get(1)); assertEquals(1001*2,(int)il2.get(1000)); } public void testFibonacciFilter(){ InfiniteList il=new InfiniteList(10){ @Override protected Integer getNext() { switch (this.getData().size()){ case 0:return 1; case 1:return 1; default: return this.getData().get(this.getData().size()-1)+this.getData().get(this.getData().size()-2); } } }; InfiniteList ilFiltered=il.filter(new Mapper(){ public Boolean map(Integer initial) { return initial%2==0; } }); int[] fib={2,8,34,144}; for (int a=0;a