package net.varkhan.base.functor.predicate;
import junit.framework.TestCase;
import net.varkhan.base.functor.Predicate;
import java.util.Arrays;
import java.util.HashSet;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 11/10/13
* @time 12:57 PM
*/
public class SetPredicateTest extends TestCase {
public void testArray() throws Exception {
class O {
int i;
O(int i) { this.i=i; }
public boolean equals(Object o) {
if(this==o) return true;
if(o==null||getClass()!=o.getClass()) return false;
return !(i==0&&((O) o).i==0)&&i==((O) o).i;
}
public int hashCode() {
return i;
}
}
O o01=new O(0);
O o02=new O(0);
O o11=new O(1);
Predicate<O,Object> p00 = new SetPredicate<O, Object>();
Predicate<O,Object> p101 = new SetPredicate<O, Object>(o01);
Predicate<O,Object> p102 = new SetPredicate<O, Object>(o02);
Predicate<O,Object> p111 = new SetPredicate<O, Object>(o11);
Predicate<O,Object> p20102 = new SetPredicate<O, Object>(o01,o02);
assertFalse("[] 01",p00.invoke(o01,null));
assertFalse("[] 02",p00.invoke(o02,null));
assertFalse("[] 11",p00.invoke(o11,null));
assertTrue("[01] 01", p101.invoke(o01, null));
assertFalse("[01] 02", p101.invoke(o02, null));
assertFalse("[01] 11",p101.invoke(o11,null));
assertFalse("[02] 01",p102.invoke(o01,null));
assertTrue("[02] 02", p102.invoke(o02, null));
assertFalse("[02] 11", p102.invoke(o11, null));
assertFalse("[11] 01",p111.invoke(o01,null));
assertFalse("[11] 02", p111.invoke(o02, null));
assertTrue("[11] 11", p111.invoke(o11, null));
assertTrue("[11] 12", p111.invoke(new O(1), null));
assertTrue("[01] 01", p20102.invoke(o01, null));
assertTrue("[01] 02", p20102.invoke(o02, null));
assertFalse("[01] 11",p20102.invoke(o11,null));
}
public void testSet() throws Exception {
class O {
int i;
O(int i) { this.i=i; }
public boolean equals(Object o) {
if(this==o) return true;
if(o==null||getClass()!=o.getClass()) return false;
return !(i==0&&((O) o).i==0)&&i==((O) o).i;
}
public int hashCode() {
return i;
}
}
O o01=new O(0);
O o02=new O(0);
O o11=new O(1);
Predicate<O,Object> p00 = new SetPredicate<O, Object>(new HashSet<O>(Arrays.asList(new O[0])));
Predicate<O,Object> p101 = new SetPredicate<O, Object>(new HashSet<O>(Arrays.asList(o01)));
Predicate<O,Object> p102 = new SetPredicate<O, Object>(new HashSet<O>(Arrays.asList(o02)));
Predicate<O,Object> p111 = new SetPredicate<O, Object>(new HashSet<O>(Arrays.asList(o11)));
Predicate<O,Object> p20102 = new SetPredicate<O, Object>(new HashSet<O>(Arrays.asList(o01,o02)));
assertFalse("[] 01",p00.invoke(o01,null));
assertFalse("[] 02",p00.invoke(o02,null));
assertFalse("[] 11",p00.invoke(o11,null));
assertTrue("[01] 01", p101.invoke(o01, null));
assertFalse("[01] 02", p101.invoke(o02, null));
assertFalse("[01] 11",p101.invoke(o11,null));
assertFalse("[02] 01",p102.invoke(o01,null));
assertTrue("[02] 02", p102.invoke(o02, null));
assertFalse("[02] 11", p102.invoke(o11, null));
assertFalse("[11] 01",p111.invoke(o01,null));
assertFalse("[11] 02", p111.invoke(o02, null));
assertTrue("[11] 11", p111.invoke(o11, null));
assertTrue("[11] 12", p111.invoke(new O(1), null));
assertTrue("[01] 01", p20102.invoke(o01, null));
assertTrue("[01] 02", p20102.invoke(o02, null));
assertFalse("[01] 11",p20102.invoke(o11,null));
}
public void testIterator() throws Exception {
class O {
int i;
O(int i) { this.i=i; }
public boolean equals(Object o) {
if(this==o) return true;
if(o==null||getClass()!=o.getClass()) return false;
return !(i==0&&((O) o).i==0)&&i==((O) o).i;
}
public int hashCode() {
return i;
}
}
O o01=new O(0);
O o02=new O(0);
O o11=new O(1);
Predicate<O,Object> p00 = new SetPredicate<O, Object>(Arrays.asList(new O[0]));
Predicate<O,Object> p101 = new SetPredicate<O, Object>(Arrays.asList(o01));
Predicate<O,Object> p102 = new SetPredicate<O, Object>(Arrays.asList(o02));
Predicate<O,Object> p111 = new SetPredicate<O, Object>(Arrays.asList(o11));
Predicate<O,Object> p20102 = new SetPredicate<O, Object>(Arrays.asList(o01,o02));
assertFalse("[] 01",p00.invoke(o01,null));
assertFalse("[] 02",p00.invoke(o02,null));
assertFalse("[] 11",p00.invoke(o11,null));
assertTrue("[01] 01", p101.invoke(o01, null));
assertFalse("[01] 02", p101.invoke(o02, null));
assertFalse("[01] 11",p101.invoke(o11,null));
assertFalse("[02] 01",p102.invoke(o01,null));
assertTrue("[02] 02", p102.invoke(o02, null));
assertFalse("[02] 11", p102.invoke(o11, null));
assertFalse("[11] 01",p111.invoke(o01,null));
assertFalse("[11] 02", p111.invoke(o02, null));
assertTrue("[11] 11", p111.invoke(o11, null));
assertTrue("[11] 12", p111.invoke(new O(1), null));
assertTrue("[01] 01", p20102.invoke(o01, null));
assertTrue("[01] 02", p20102.invoke(o02, null));
assertFalse("[01] 11",p20102.invoke(o11,null));
}
public void testIterable() throws Exception {
class O {
int i;
O(int i) { this.i=i; }
public boolean equals(Object o) {
if(this==o) return true;
if(o==null||getClass()!=o.getClass()) return false;
return !(i==0&&((O) o).i==0)&&i==((O) o).i;
}
public int hashCode() {
return i;
}
}
O o01=new O(0);
O o02=new O(0);
O o11=new O(1);
Predicate<O,Object> p00 = new SetPredicate<O, Object>(Arrays.asList(new O[0]).iterator());
Predicate<O,Object> p101 = new SetPredicate<O, Object>(Arrays.asList(o01).iterator());
Predicate<O,Object> p102 = new SetPredicate<O, Object>(Arrays.asList(o02).iterator());
Predicate<O,Object> p111 = new SetPredicate<O, Object>(Arrays.asList(o11).iterator());
Predicate<O,Object> p20102 = new SetPredicate<O, Object>(Arrays.asList(o01,o02).iterator());
assertFalse("[] 01",p00.invoke(o01,null));
assertFalse("[] 02",p00.invoke(o02,null));
assertFalse("[] 11",p00.invoke(o11,null));
assertTrue("[01] 01", p101.invoke(o01, null));
assertFalse("[01] 02", p101.invoke(o02, null));
assertFalse("[01] 11",p101.invoke(o11,null));
assertFalse("[02] 01",p102.invoke(o01,null));
assertTrue("[02] 02", p102.invoke(o02, null));
assertFalse("[02] 11", p102.invoke(o11, null));
assertFalse("[11] 01",p111.invoke(o01,null));
assertFalse("[11] 02", p111.invoke(o02, null));
assertTrue("[11] 11", p111.invoke(o11, null));
assertTrue("[11] 12", p111.invoke(new O(1), null));
assertTrue("[01] 01", p20102.invoke(o01, null));
assertTrue("[01] 02", p20102.invoke(o02, null));
assertFalse("[01] 11",p20102.invoke(o11,null));
}
}