1 package org.wikimedia.search.extra.util; 2 3 import static org.junit.Assert.assertEquals; 4 import static org.junit.Assert.assertFalse; 5 import static org.junit.Assert.assertNotEquals; 6 import static org.junit.Assert.assertTrue; 7 import static org.wikimedia.search.extra.util.ConcreteIntPredicate.eq; 8 import static org.wikimedia.search.extra.util.ConcreteIntPredicate.gt; 9 import static org.wikimedia.search.extra.util.ConcreteIntPredicate.gte; 10 import static org.wikimedia.search.extra.util.ConcreteIntPredicate.lt; 11 import static org.wikimedia.search.extra.util.ConcreteIntPredicate.lte; 12 13 import org.junit.Test; 14 import org.junit.runner.RunWith; 15 16 @RunWith(com.carrotsearch.randomizedtesting.RandomizedRunner.class) 17 public class ConcreteIntPredicateTest { 18 19 @Test 20 public void testLt() { 21 int v = 100; 22 ConcreteIntPredicate ltP = lt(100); 23 assertFalse(ltP.test(v)); 24 assertFalse(ltP.test(v + 1)); 25 assertTrue(ltP.test(v - 1)); 26 assertEquals(lt(v), ltP); 27 assertEquals(lt(v).hashCode(), ltP.hashCode()); 28 assertNotEquals(lte(v), ltP); 29 assertNotEquals(lt(v + 1), ltP); 30 assertEquals(ltP.toString(), "< 100"); 31 } 32 33 @Test 34 public void testLte() { 35 int v = 100; 36 ConcreteIntPredicate lteP = lte(100); 37 assertTrue(lteP.test(v)); 38 assertFalse(lteP.test(v + 1)); 39 assertTrue(lteP.test(v - 1)); 40 assertEquals(lte(v), lteP); 41 assertEquals(lte(v).hashCode(), lteP.hashCode()); 42 assertNotEquals(lt(v), lteP); 43 assertNotEquals(lte(v + 1), lteP); 44 assertEquals(lteP.toString(), "<= 100"); 45 } 46 47 @Test 48 public void testGte() { 49 int v = 100; 50 ConcreteIntPredicate gteP = gte(100); 51 assertTrue(gteP.test(v)); 52 assertFalse(gteP.test(v - 1)); 53 assertTrue(gteP.test(v + 1)); 54 assertEquals(gte(v), gteP); 55 assertEquals(gte(v).hashCode(), gteP.hashCode()); 56 assertNotEquals(lt(v), gteP); 57 assertNotEquals(gte(v + 1), gteP); 58 assertEquals(gteP.toString(), ">= 100"); 59 } 60 61 @Test 62 public void testGt() { 63 int v = 100; 64 ConcreteIntPredicate gtP = gt(100); 65 assertFalse(gtP.test(v)); 66 assertFalse(gtP.test(v - 1)); 67 assertTrue(gtP.test(v + 1)); 68 assertEquals(gt(v), gtP); 69 assertEquals(gt(v).hashCode(), gtP.hashCode()); 70 assertNotEquals(lt(v), gtP); 71 assertNotEquals(gt(v + 1), gtP); 72 assertEquals(gtP.toString(), "> 100"); 73 } 74 75 @Test 76 public void testEq() { 77 int v = 100; 78 ConcreteIntPredicate eqP = eq(100); 79 assertTrue(eqP.test(v)); 80 assertFalse(eqP.test(v - 1)); 81 assertFalse(eqP.test(v + 1)); 82 assertEquals(eq(v), eqP); 83 assertEquals(eq(v).hashCode(), eqP.hashCode()); 84 assertNotEquals(lt(v), eqP); 85 assertNotEquals(eq(v + 1), eqP); 86 assertEquals(eqP.toString(), "= 100"); 87 } 88 89 @Test 90 public void testDisjuction() { 91 int v = 100; 92 ConcreteIntPredicate dis = gt(v).or(lt(v)); 93 assertFalse(dis.test(v)); 94 assertTrue(dis.test(Integer.MAX_VALUE)); 95 assertTrue(dis.test(Integer.MIN_VALUE)); 96 assertEquals(gt(v).or(lt(v)), dis); 97 assertEquals(gt(v).or(lt(v)).hashCode(), dis.hashCode()); 98 assertNotEquals(gt(v).or(lt(v + 1)), dis); 99 assertEquals(dis.toString(), "> " + v + " or " + "< " + v); 100 } 101 102 @Test 103 public void testConjunction() { 104 int v = 100; 105 int v2 = v + 2 + 100; 106 ConcreteIntPredicate conjunction = gt(v).and(lt(v2)); 107 assertTrue(conjunction.test(150)); 108 assertFalse(conjunction.test(Integer.MAX_VALUE)); 109 assertFalse(conjunction.test(Integer.MIN_VALUE)); 110 assertEquals(gt(v).and(lt(v2)), conjunction); 111 assertEquals(gt(v).and(lt(v2)).hashCode(), conjunction.hashCode()); 112 assertNotEquals(gt(v).and(lt(v2 + 1)), conjunction); 113 assertEquals(conjunction.toString(), "> " + v + " and " + "< " + v2); 114 } 115 116 @Test 117 public void testNegation() { 118 int v = 100; 119 int v2 = v + 2 + 100; 120 ConcreteIntPredicate negation = gt(v).negate(); 121 assertNotEquals(negation.test(v), negation.negate().test(v)); 122 assertNotEquals(negation.test(v + 1), negation.negate().test(v + 1)); 123 assertEquals(gt(v).negate(), negation); 124 assertNotEquals(negation.negate(), gt(v)); 125 assertNotEquals(negation.negate().hashCode(), gt(v).hashCode()); 126 assertEquals(negation.toString(), "not " + gt(v)); 127 } 128 129 @Test(expected = IllegalArgumentException.class) 130 public void testBadParamsOnDisjunction() { 131 gt(1).or((i) -> true); 132 } 133 134 @Test(expected = IllegalArgumentException.class) 135 public void testBadParamsOnConjunction() { 136 gt(1).and((i) -> true); 137 } 138 }