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