package net.varkhan.base.functor.predicate; import junit.framework.TestCase; import net.varkhan.base.functor.Predicate; /** * <b></b>. * <p/> * * @author varkhan * @date 11/9/13 * @time 5:19 PM */ public class AggregatePredicateTest extends TestCase { public void testAggregate() throws Exception { final String ref = "@REF"; Predicate<String,Object> x = new Predicate<String,Object>() { @Override public boolean invoke(String arg, Object ctx) { return arg==ctx; } }; AggregatePredicate<String,Object> p = new AggregatePredicate<String,Object>(x) { @Override public boolean invoke(String arg, Object ctx) { return preds.length>0 && preds[0].invoke(arg, ctx); } }; assertEquals("components()",1,p.components().length); assertSame("components()[0]",x,p.components()[0]); assertTrue("invoke(null,null)",p.invoke(null,null)); assertFalse("invoke(@REF,null)",p.invoke(ref,null)); assertTrue("invoke(@REF,@REF)",p.invoke(ref,ref)); } public void testAnd() throws Exception { assertEquals("and()",true,AggregatePredicate.and().invoke("foo",null)); assertEquals("and(false)",false,AggregatePredicate.and(ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("and(true)",true,AggregatePredicate.and(ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("and(false,false)",false,AggregatePredicate.and(ConstPredicate.FALSE(),ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("and(false,true)",false,AggregatePredicate.and(ConstPredicate.FALSE(),ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("and(true,false)",false,AggregatePredicate.and(ConstPredicate.TRUE(),ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("and(true,true)",true,AggregatePredicate.and(ConstPredicate.TRUE(),ConstPredicate.TRUE()).invoke("foo",null)); } public void testNand() throws Exception { assertEquals("nand()",false,AggregatePredicate.nand().invoke("foo",null)); assertEquals("nand(false)",true,AggregatePredicate.nand(ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nand(true)",false,AggregatePredicate.nand(ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("nand(false,false)",true,AggregatePredicate.nand(ConstPredicate.FALSE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nand(false,true)",true,AggregatePredicate.nand(ConstPredicate.FALSE(), ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("nand(true,false)",true,AggregatePredicate.nand(ConstPredicate.TRUE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nand(true,true)",false,AggregatePredicate.nand(ConstPredicate.TRUE(), ConstPredicate.TRUE()).invoke("foo",null)); } public void testOr() throws Exception { assertEquals("or()",false,AggregatePredicate.or().invoke("foo",null)); assertEquals("or(false)",false,AggregatePredicate.or(ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("or(true)",true,AggregatePredicate.or(ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("or(false,false)",false,AggregatePredicate.or(ConstPredicate.FALSE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("or(false,true)",true,AggregatePredicate.or(ConstPredicate.FALSE(), ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("or(true,false)",true,AggregatePredicate.or(ConstPredicate.TRUE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("or(true,true)",true,AggregatePredicate.or(ConstPredicate.TRUE(), ConstPredicate.TRUE()).invoke("foo",null)); } public void testNor() throws Exception { assertEquals("nor()",true,AggregatePredicate.nor().invoke("foo",null)); assertEquals("nor(false)",true,AggregatePredicate.nor(ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nor(true)",false,AggregatePredicate.nor(ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("nor(false,false)",true,AggregatePredicate.nor(ConstPredicate.FALSE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nor(false,true)",false,AggregatePredicate.nor(ConstPredicate.FALSE(), ConstPredicate.TRUE()).invoke("foo",null)); assertEquals("nor(true,false)",false,AggregatePredicate.nor(ConstPredicate.TRUE(), ConstPredicate.FALSE()).invoke("foo",null)); assertEquals("nor(true,true)",false,AggregatePredicate.nor(ConstPredicate.TRUE(), ConstPredicate.TRUE()).invoke("foo",null)); } }