### Question:
ConditionalFunction implements Function<A, T> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof ConditionalFunction<?, ?>)) { return false; } ConditionalFunction<?, ?> that = (ConditionalFunction<?, ?>) obj; return this.ifPred.equals(that.ifPred) && this.thenFunc.equals(that.thenFunc) && this.elseFunc.equals(that.elseFunc); } ConditionalFunction(Predicate<? super A> ifPred, Function<? super A, ? extends T> thenFunc,
        Function<? super A, ? extends T> elseFunc); T evaluate(A obj); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testEquals() throws Exception { ConditionalFunction<Object, Object> f = new ConditionalFunction<Object, Object>( Identity.INSTANCE, Constant.of("left"), Constant.of("right")); assertEquals(f,f); assertObjectsAreEqual(f,new ConditionalFunction<Object, Object>( Identity.INSTANCE, Constant.of("left"), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalFunction<Object, Object>( Identity.INSTANCE, Constant.of(null), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalFunction<Object, Object>( Constant.TRUE, Constant.of("left"), Constant.of("right"))); assertObjectsAreNotEqual(f,new ConditionalFunction<Object, Object>( Identity.INSTANCE, Constant.of("left"), Constant.of(null))); assertTrue(!f.equals(null)); }