### Question:
Min implements BinaryFunction<T, T, T> { @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Min<?>)) { return false; } Min<?> that = (Min<?>) obj; return this.comparator.equals(that.comparator); } @SuppressWarnings("unchecked")  Min();  Min(Comparator<T> comparator); T evaluate(T left, T right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); static Min<T> instance(); static Function<T, T> instance(T right); static final Min<Comparable<?>> INSTANCE; }### Answer:
@Test public void testEquals() { Min<Comparable<?>> f = Min.instance(); assertObjectsAreEqual(f, f); assertObjectsAreEqual(f, Min.instance()); assertObjectsAreEqual(f, new Min<Integer>(ComparableComparator.<Integer> instance())); assertObjectsAreNotEqual(f, new Min<Comparable<?>>(Collections.<Comparable<?>> reverseOrder())); assertFalse(f.equals(null)); }