### Question:
BinaryFunctionFunction implements Function<A, T> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof BinaryFunctionFunction<?, ?>)) { return false; } BinaryFunctionFunction<?, ?> that = (BinaryFunctionFunction<?, ?>) obj; return this.function.equals(that.function); } BinaryFunctionFunction(BinaryFunction<? super A, ? super A, ? extends T> function); T evaluate(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static Function<A, T> adapt(BinaryFunction<? super A, ? super A, ? extends T> function);  }### Answer:
@Test public void testEquals() throws Exception { Function<Object, Boolean> f = new BinaryFunctionFunction<Object, Boolean>(BinaryPredicateBinaryFunction.adapt(IsSame.INSTANCE)); assertEquals(f, f); assertObjectsAreEqual(f, new BinaryFunctionFunction<Object, Boolean>(BinaryPredicateBinaryFunction.adapt(IsSame.INSTANCE))); assertObjectsAreNotEqual(f, Constant.truePredicate()); assertObjectsAreNotEqual(f, new BinaryFunctionFunction<Object, Boolean>(BinaryPredicateBinaryFunction.adapt(IsNotSame.INSTANCE))); }