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