### Question:
FunctionProcedure implements Procedure<A> { public void run(A obj) { function.evaluate(obj); } FunctionProcedure(Function<? super A, ?> function); void run(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static FunctionProcedure<A> adapt(Function<? super A, ?> function);  }### Answer:
@Test public void testRun() throws Exception { class EvaluateCounter implements Function<Object, Integer> { int count = 0; public Integer evaluate(Object a) { return Integer.valueOf(count++); } } EvaluateCounter counter = new EvaluateCounter(); Procedure<Object> p = new FunctionProcedure<Object>(counter); assertEquals(0,counter.count); p.run(null); assertEquals(1,counter.count); p.run("x"); assertEquals(2,counter.count); }