### Question:
TransposedFunction implements BinaryFunction<L, R, T> { @Override public final boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof TransposedFunction<?, ?, ?>)) { return false; } TransposedFunction<?, ?, ?> that = (TransposedFunction<?, ?, ?>) obj; return this.function.equals(that.function); } TransposedFunction(BinaryFunction<? super R, ? super L, ? extends T> function); final T evaluate(L left, R right); @Override final boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static TransposedFunction<R, L, T> transpose(BinaryFunction<? super L, ? super R, ? extends T> f);  }### Answer:
@Test public void testEquals() throws Exception { BinaryFunction<Object, Object, Object> f = new TransposedFunction<Object, Object, Object>(LeftIdentity.FUNCTION); assertEquals(f,f); assertObjectsAreEqual(f,new TransposedFunction<Object, Object, Object>(LeftIdentity.FUNCTION)); assertObjectsAreNotEqual(f,new TransposedFunction<Object, Object, Object>(RightIdentity.FUNCTION)); assertObjectsAreNotEqual(f,Constant.of("y")); assertTrue(!f.equals((TransposedFunction<?, ?, ?>)null)); }