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