### Question:
BinaryFunctionBinaryProcedure implements BinaryProcedure<L, R> { public void run(L left, R right) { function.evaluate(left, right); } 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 testRun() throws Exception { class EvaluateCounter implements BinaryFunction<Object, Object, Integer> { int count = 0; public Integer evaluate(Object a, Object b) { return Integer.valueOf(count++); } } EvaluateCounter counter = new EvaluateCounter(); BinaryProcedure<Object, Object> p = new BinaryFunctionBinaryProcedure<Object, Object>(counter); assertEquals(0,counter.count); p.run(null,null); assertEquals(1,counter.count); p.run("x","y"); assertEquals(2,counter.count); }