### Question:
ConditionalProcedure implements Procedure<A> { public void run(A obj) { if (ifPred.test(obj)) { thenProc.run(obj); } else { elseProc.run(obj); } } ConditionalProcedure(Predicate<? super A> ifPred, Procedure<? super A> thenProc);  ConditionalProcedure(Predicate<? super A> ifPred,
            Procedure<? super A> thenProc,
            Procedure<? super A> elseProc); void run(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testRun() throws Exception { RunCounter left = new RunCounter(); RunCounter right = new RunCounter(); ConditionalProcedure<Object> p = new ConditionalProcedure<Object>( Identity.INSTANCE, left, right); assertEquals(0,left.count); assertEquals(0,right.count); p.run(Boolean.TRUE); assertEquals(1,left.count); assertEquals(0,right.count); p.run(Boolean.FALSE); assertEquals(1,left.count); assertEquals(1,right.count); p.run(Boolean.TRUE); assertEquals(2,left.count); assertEquals(1,right.count); }