### Question:
BinaryFunctionBinaryPredicate implements BinaryPredicate<L, R> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof BinaryFunctionBinaryPredicate<?, ?>)) { return false; } BinaryFunctionBinaryPredicate<?, ?> that = (BinaryFunctionBinaryPredicate<?, ?>) obj; return this.function.equals(that.function); } BinaryFunctionBinaryPredicate(final BinaryFunction<? super L, ? super R, Boolean> function); boolean test(final L left, final R right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static BinaryFunctionBinaryPredicate<L, R> adapt(
            final BinaryFunction<? super L, ? super R, Boolean> function);  }### Answer:
@Test public void testEquals() throws Exception { BinaryPredicate<Object, Object> p = new BinaryFunctionBinaryPredicate<Object, Object>(Constant.TRUE); assertEquals(p,p); assertObjectsAreEqual(p,new BinaryFunctionBinaryPredicate<Object, Object>(Constant.TRUE)); assertObjectsAreNotEqual(p,Constant.truePredicate()); assertObjectsAreNotEqual(p,new BinaryFunctionBinaryPredicate<Object, Object>(Constant.FALSE)); assertTrue(!p.equals(null)); }