### Question:
BinaryFunctionBinaryProcedure implements BinaryProcedure<L, R> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof BinaryFunctionBinaryProcedure<?, ?>)) { return false; } BinaryFunctionBinaryProcedure<?, ?> that = (BinaryFunctionBinaryProcedure<?, ?>) obj; return this.function.equals(that.function); } BinaryFunctionBinaryProcedure(BinaryFunction<? super L, ? super R, ?> function); void run(L left, R right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static BinaryFunctionBinaryProcedure<L, R> adapt(BinaryFunction<? super L, ? super R, ?> function);  }### Answer:
@Test public void testEquals() throws Exception { BinaryProcedure<Object, Object> p = new BinaryFunctionBinaryProcedure<Object, Object>(Constant.of("K")); assertEquals(p,p); assertObjectsAreEqual(p,new BinaryFunctionBinaryProcedure<Object, Object>(Constant.of("K"))); assertObjectsAreNotEqual(p,new NoOp()); assertObjectsAreNotEqual(p,new BinaryFunctionBinaryProcedure<Object, Object>(Constant.of("J"))); assertTrue(!p.equals(null)); }