ConcreteIntPredicate implements IntPredicate { public static ConcreteIntPredicate gt(int i) { return new GTIntPredicate(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 testGt() { int v = 100; ConcreteIntPredicate gtP = gt(100); assertFalse(gtP.test(v)); assertFalse(gtP.test(v - 1)); assertTrue(gtP.test(v + 1)); assertEquals(gt(v), gtP); assertEquals(gt(v).hashCode(), gtP.hashCode()); assertNotEquals(lt(v), gtP); assertNotEquals(gt(v + 1), gtP); assertEquals(gtP.toString(), "> 100"); }