View Javadoc
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 }