### Question:
LeftBoundPredicate implements Predicate<A> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof LeftBoundPredicate<?>)) { return false; } LeftBoundPredicate<?> that = (LeftBoundPredicate<?>) obj; return predicate.equals(that.predicate) && (null == param ? null == that.param : param.equals(that.param)); } @SuppressWarnings("unchecked") <L> LeftBoundPredicate(BinaryPredicate<? super L, ? super A> predicate, L arg); boolean test(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static LeftBoundPredicate<R> bind(BinaryPredicate<? super L, ? super R> predicate, L arg);  }### Answer:
@Test public void testEquals() throws Exception { Predicate<Boolean> p = new LeftBoundPredicate<Boolean>(Constant.TRUE,"xyzzy"); assertEquals(p,p); assertObjectsAreEqual(p,new LeftBoundPredicate<Boolean>(Constant.TRUE,"xyzzy")); assertObjectsAreNotEqual(p,Constant.TRUE); assertObjectsAreNotEqual(p,new LeftBoundPredicate<Boolean>(Constant.FALSE,"xyzzy")); assertObjectsAreNotEqual(p,new LeftBoundPredicate<Boolean>(Constant.TRUE,"foo")); assertObjectsAreNotEqual(p,new LeftBoundPredicate<Boolean>(Constant.TRUE,null)); assertObjectsAreEqual(new LeftBoundPredicate<Boolean>(Constant.TRUE,null),new LeftBoundPredicate<Boolean>(Constant.TRUE,null)); assertTrue(!p.equals(null)); }