package org.osgl.util; import org.junit.Test; import org.osgl.$; import java.util.Iterator; /** * Created with IntelliJ IDEA. * User: luog * Date: 8/11/13 * Time: 9:17 AM * To change this template use File | Settings | File Templates. */ public abstract class ReversibleSeqTestBase extends SequenceTestBase { @Override protected C.ReversibleSequence<Integer> prepareData() { return (C.ReversibleSequence<Integer>) super.prepareData(); } @Override protected abstract C.ReversibleSequence<Integer> prepareData(int... ia); @Override protected abstract C.ReversibleSequence<Integer> prepareEmptyData(); protected abstract <T> C.ReversibleSequence<T> prepareTypedData(T... ta); protected C.ReversibleSequence<Integer> data() { return (C.ReversibleSequence<Integer>)data; } @Test public void testLast() { eq(5, data().last()); } @Test public void testTailN() { eq(data, data().tail(5)); eq(data, data().tail(6)); eq(seqOf(3, 4, 5), data().tail(3)); eq(seqOf(1, 2), data().tail(-2)); } @Test public void testReverse() { eq(seqOf(5, 4, 3, 2, 1), data().reverse()); } @Test public void testReverseIterator() { Iterator<Integer> itr = data().reverseIterator(); StringBuilder sb = new StringBuilder(); for (;itr.hasNext();) { sb.append(itr.next()); } eq("54321", sb.toString()); } @Test public void testReduceRight() { int poor = data().reduceRight(N.F.subtract(Integer.class)).get(); eq(5 - 4 - 3 - 2 - 1, poor); poor = data().reduceRight(100, N.F.subtract(Integer.class)); eq(100 - 5 - 4 - 3 - 2 - 1, poor); } @Test public void testAcceptRight() { data = prepareData(1, 2, 3, 4, 5); final $.Var<Integer> bag = $.var(0); data().acceptRight(bag.f.updater(N.F.addTwo(Integer.class))); // data().acceptRight(new _.Visitor<Integer>() { // @Override // public void visit(Integer integer) throws _.Break { // bag.set(bag.get() + integer); // } // }); eq(5 * 6 / 2, bag.get()); } @Test public void testFindLast() { C.ReversibleSequence<$.T2<Integer, Integer>> data = prepareTypedData($.T2(1, 5), $.T2(2, 6), $.T2(2, 8), $.T2(3, 4)); $.Option<$.T2<Integer, Integer>> found = data.findLast(new $.Predicate<$.T2<Integer, Integer>>() { @Override public boolean test($.T2<Integer, Integer> x) { return x._1 == 2; } }); yes(found.get()._2 == 8); } }