### Question:
TransposedPredicate implements BinaryPredicate<L, R> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof TransposedPredicate<?, ?>)) { return false; } TransposedPredicate<?, ?> that = (TransposedPredicate<?, ?>) obj; return this.predicate.equals(that.predicate); } TransposedPredicate(BinaryPredicate<? super R, ? super L> predicate); final boolean test(L left, R right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static TransposedPredicate<R, L> transpose(BinaryPredicate<? super L, ? super R> p);  }### Answer:
@Test public void testEquals() throws Exception { BinaryPredicate<Object, Object> p = new TransposedPredicate<Object, Object>(Constant.TRUE); assertEquals(p,p); assertObjectsAreEqual(p,new TransposedPredicate<Object, Object>(Constant.TRUE)); assertObjectsAreEqual(p,TransposedPredicate.transpose(Constant.TRUE)); assertObjectsAreNotEqual(p,new TransposedPredicate<Object, Object>(Constant.FALSE)); assertObjectsAreNotEqual(p,Constant.TRUE); assertTrue(!p.equals((TransposedPredicate<?, ?>)null)); }