package net.varkhan.base.functor.mapper;
import junit.framework.TestCase;
import net.varkhan.base.functor.Mapper;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 11/24/13
* @time 6:09 PM
*/
public class ComposedMapperTest extends TestCase {
public void testInvoke() throws Exception {
ComposedMapper<Integer,Long,Object> m = new ComposedMapper<Integer,Long,Object>(
new Mapper<Integer,CharSequence,Object>() {
@Override
public Integer invoke(CharSequence arg, Object ctx) {
return arg.length();
}
},
new Mapper<String,Long,Object>() {
@Override
public String invoke(Long arg, Object ctx) {
return Long.toBinaryString(arg);
}
}
);
assertEquals(1,(int)m.invoke(0L,null));
assertEquals(1,(int)m.invoke(1L,null));
assertEquals(2,(int)m.invoke(2L,null));
assertEquals(2,(int)m.invoke(3L,null));
assertEquals(3,(int)m.invoke(4L,null));
assertEquals(3,(int)m.invoke(5L,null));
assertEquals("1010",((Mapper<String,Long,Object>)m.right()).invoke(10L,null));
assertEquals(3,(int)((Mapper<Integer,CharSequence,Object>)m.left()).invoke("123",null));
}
public void testString() throws Exception {
ComposedMapper<Integer,Long,Object> m = new ComposedMapper<Integer,Long,Object>(
new Mapper<Integer,CharSequence,Object>() {
@Override
public Integer invoke(CharSequence arg, Object ctx) {
return arg.length();
}
@Override
public String toString() {
return "length($)";
}
},
new Mapper<String,Long,Object>() {
@Override
public String invoke(Long arg, Object ctx) {
return Long.toBinaryString(arg);
}
@Override
public String toString() {
return "string($)";
}
}
);
assertEquals("length(string($))",m.toString());
}
}