package net.varkhan.base.containers;
import junit.framework.TestCase;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 11/2/13
* @time 4:52 PM
*/
public class IndexableTest extends TestCase {
public void testEmpty() throws Exception {
Indexable ix = Indexable.EMPTY;
assertTrue("isEmpty()",ix.isEmpty());
assertEquals("size()", 0, ix.size());
assertFalse("has(0)", ix.has(0));
Index ii = ix.indexes();
assertFalse("indexes().hasPrevious()",ii.hasPrevious());
assertFalse("indexes().hasNext()", ii.hasNext());
try {
ii.current();
fail("indexes().current()");
}
catch(Index.InvalidIndexException e) {
// success
}
try {
ii.previous();
fail("indexes().previous()");
}
catch(Index.InvalidIndexException e) {
// success
}
try {
ii.next();
fail("indexes().next()");
}
catch(Index.InvalidIndexException e) {
// success
}
}
public void testSingleton() throws Exception {
int index=333;
Indexable ix = new Indexable.Singleton(index);
assertFalse("isEmpty()",ix.isEmpty());
assertEquals("size()", 1, ix.size());
assertFalse("has(0)", ix.has(0));
assertTrue("has(index)", ix.has(index));
Index ii = ix.indexes();
assertFalse("indexes().hasPrevious()",ii.hasPrevious());
assertTrue("indexes().hasNext()", ii.hasNext());
assertEquals("indexes().next()==index",index,ii.next());
assertEquals("indexes().current()==index",index,ii.current());
assertFalse("indexes().hasPrevious()",ii.hasPrevious());
assertFalse("indexes().hasNext()", ii.hasNext());
}
public void testRange() throws Exception {
int min0=4, max0=4;
Indexable ix0 = new Indexable.Range(min0, max0);
assertFalse("isEmpty()", ix0.isEmpty());
assertEquals("size()", max0-min0+1, ix0.size());
assertFalse("has(0)", ix0.has(0));
assertTrue("has(min)", ix0.has(min0));
assertTrue("has(max)", ix0.has(max0));
Index ii0 = ix0.indexes();
assertFalse("indexes().hasPrevious()", ii0.hasPrevious());
assertTrue("indexes().hasNext()", ii0.hasNext());
assertEquals("indexes().next()==min",min0,ii0.next());
assertEquals("indexes().current()==min", min0, ii0.current());
assertFalse("indexes().hasPrevious()",ii0.hasPrevious());
assertFalse("indexes().hasNext()", ii0.hasNext());
int min1=4, max1=5;
Indexable ix1 = new Indexable.Range(min1, max1);
assertFalse("isEmpty()", ix1.isEmpty());
assertEquals("size()", max1-min1+1, ix1.size());
assertFalse("has(0)", ix1.has(0));
assertTrue("has(min)", ix1.has(min1));
assertTrue("has(max)", ix1.has(max1));
Index ii1 = ix1.indexes();
assertFalse("indexes().hasPrevious()", ii1.hasPrevious());
assertTrue("indexes().hasNext()", ii1.hasNext());
assertEquals("indexes().next()==min",min1,ii1.next());
assertEquals("indexes().current()==min", min1, ii1.current());
assertEquals("indexes().next()==..",min1+1,ii1.next());
assertEquals("indexes().current()==..", min1+1, ii1.current());
assertTrue("indexes().hasPrevious()",ii1.hasPrevious());
assertFalse("indexes().hasNext()", ii1.hasNext());
assertEquals("indexes().previous()",min1, ii1.previous());
int min2=4, max2=6;
Indexable ix2 = new Indexable.Range(min2, max2);
assertFalse("isEmpty()", ix2.isEmpty());
assertEquals("size()", max2-min2+1, ix2.size());
assertFalse("has(0)", ix2.has(0));
assertTrue("has(min)", ix2.has(min2));
assertTrue("has(max)", ix2.has(max2));
Index ii2 = ix2.indexes();
assertFalse("indexes().hasPrevious()", ii2.hasPrevious());
assertTrue("indexes().hasNext()", ii2.hasNext());
assertEquals("indexes().next()==min",min2,ii2.next());
assertEquals("indexes().current()==min", min2, ii2.current());
assertEquals("indexes().next()==..",min2+1,ii2.next());
assertEquals("indexes().current()==..", min2+1, ii2.current());
assertEquals("indexes().next()==..",min2+2,ii2.next());
assertEquals("indexes().current()==..", min2+2, ii2.current());
assertTrue("indexes().hasPrevious()",ii2.hasPrevious());
assertFalse("indexes().hasNext()", ii2.hasNext());
assertEquals("indexes().previous()",min2+1, ii2.previous());
}
public void testEnumerate() throws Exception {
long[] idx0 = new long[] {};
Indexable ix0 = new Indexable.Enumerate(idx0);
assertTrue("isEmpty()", ix0.isEmpty());
assertEquals("size()", idx0.length, ix0.size());
assertFalse("has(0)", ix0.has(0));
Index ii0 = ix0.indexes();
assertFalse("indexes().hasPrevious()", ii0.hasPrevious());
assertFalse("indexes().hasNext()", ii0.hasNext());
long[] idx1 = new long[] {4};
Indexable ix1 = new Indexable.Enumerate(idx1);
assertFalse("isEmpty()", ix1.isEmpty());
assertEquals("size()", idx1.length, ix1.size());
assertFalse("has(0)", ix1.has(0));
assertTrue("has(min)", ix1.has(idx1[0]));
assertTrue("has(max)", ix1.has(idx1[idx1.length-1]));
Index ii1 = ix1.indexes();
assertFalse("indexes().hasPrevious()", ii1.hasPrevious());
assertTrue("indexes().hasNext()", ii1.hasNext());
assertEquals("indexes().next()==min",idx1[0],ii1.next());
assertEquals("indexes().current()==min", idx1[0], ii1.current());
assertFalse("indexes().hasPrevious()", ii1.hasPrevious());
assertFalse("indexes().hasNext()", ii1.hasNext());
long[] idx2 = new long[] {4, 5, 6};
Indexable ix2 = new Indexable.Enumerate(idx2);
assertFalse("isEmpty()", ix2.isEmpty());
assertEquals("size()", idx2.length, ix2.size());
assertFalse("has(0)", ix2.has(0));
assertTrue("has(min)", ix2.has(idx2[0]));
assertTrue("has(max)", ix2.has(idx2[idx2.length-1]));
Index ii2 = ix2.indexes();
assertFalse("indexes().hasPrevious()", ii2.hasPrevious());
assertTrue("indexes().hasNext()", ii2.hasNext());
assertEquals("indexes().next()==min",idx2[0],ii2.next());
assertEquals("indexes().current()==min", idx2[0], ii2.current());
assertEquals("indexes().next()==..",idx2[1],ii2.next());
assertEquals("indexes().current()==..", idx2[1], ii2.current());
assertEquals("indexes().next()==..",idx2[2],ii2.next());
assertEquals("indexes().current()==..", idx2[2], ii2.current());
assertTrue("indexes().hasPrevious()",ii2.hasPrevious());
assertFalse("indexes().hasNext()", ii2.hasNext());
assertEquals("indexes().previous()",idx2[1], ii2.previous());
}
public void testSequence() throws Exception {
long[] idx1 = new long[] {4, 5, 6 };
Indexable ix1 = new Indexable.Enumerate(idx1);
long[] idx2 = new long[] {17, 18};
Indexable ix2 = new Indexable.Enumerate(idx2);
Indexable ix = new Indexable.Sequence(ix1, ix2);
assertFalse("isEmpty()", ix2.isEmpty());
assertEquals("size()", idx1.length+idx2.length, ix.size());
assertFalse("has(0)", ix.has(0));
assertTrue("has(min1)", ix.has(idx1[0]));
assertTrue("has(max1)", ix.has(idx1[idx1.length-1]));
assertTrue("has(min2)", ix.has(idx2[0]));
assertTrue("has(max2)", ix.has(idx2[idx2.length-1]));
Index ii = ix.indexes();
assertFalse("indexes().hasPrevious()", ii.hasPrevious());
assertTrue("indexes().hasNext()", ii.hasNext());
assertEquals("indexes().next()==min",idx1[0],ii.next());
assertEquals("indexes().current()==min", idx1[0], ii.current());
assertEquals("indexes().next()==...",idx1[1],ii.next());
assertEquals("indexes().next()==...",idx1[2],ii.next());
assertEquals("indexes().next()==...",idx2[0],ii.next());
assertEquals("indexes().next()==...",idx2[1],ii.next());
assertTrue("indexes().hasPrevious()",ii.hasPrevious());
assertFalse("indexes().hasNext()", ii.hasNext());
}
}