### Question:
BinaryPredicatePredicate implements Predicate<A> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof BinaryPredicatePredicate<?>)) { return false; } BinaryPredicatePredicate<?> that = (BinaryPredicatePredicate<?>) obj; return this.predicate.equals(that.predicate); } BinaryPredicatePredicate(BinaryPredicate<? super A, ? super A> predicate); boolean test(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static Predicate<A> adapt(BinaryPredicate<? super A, ? super A> predicate);  }### Answer:
@Test public void testEquals() throws Exception { Predicate<Object> p = new BinaryPredicatePredicate<Object>(IsSame.INSTANCE); assertEquals(p, p); assertObjectsAreEqual(p, new BinaryPredicatePredicate<Object>(IsSame.INSTANCE)); assertObjectsAreNotEqual(p, Constant.truePredicate()); assertObjectsAreNotEqual(p, new BinaryPredicatePredicate<Object>(IsNotSame.INSTANCE)); }