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