ConcreteIntPredicate implements IntPredicate { public static ConcreteIntPredicate lt(int i) { return new LTIntPredicate(i); } private  ConcreteIntPredicate(); @Override final ConcreteIntPredicate and(IntPredicate intPredicate); @Override final ConcreteIntPredicate negate(); @Override final ConcreteIntPredicate or(IntPredicate intPredicate); @Override @SuppressFBWarnings(value = "AOM_ABSTRACT_OVERRIDDEN_METHOD", justification = "We want subclasses to implement this") abstract int hashCode(); @Override @SuppressFBWarnings(value = "AOM_ABSTRACT_OVERRIDDEN_METHOD", justification = "We want subclasses to implement this") abstract boolean equals(Object o); @Override @SuppressFBWarnings(value = "AOM_ABSTRACT_OVERRIDDEN_METHOD", justification = "We want subclasses to implement this") abstract String toString(); static ConcreteIntPredicate gt(int i); static ConcreteIntPredicate gte(int i); static ConcreteIntPredicate lte(int i); static ConcreteIntPredicate lt(int i); static ConcreteIntPredicate eq(int i);  }
@Test public void testLt() { int v = 100; ConcreteIntPredicate ltP = lt(100); assertFalse(ltP.test(v)); assertFalse(ltP.test(v + 1)); assertTrue(ltP.test(v - 1)); assertEquals(lt(v), ltP); assertEquals(lt(v).hashCode(), ltP.hashCode()); assertNotEquals(lte(v), ltP); assertNotEquals(lt(v + 1), ltP); assertEquals(ltP.toString(), "< 100"); }