### Question:
ComparatorFunction implements BinaryFunction<T, T, Integer> { public Integer evaluate(T left, T right) { return Integer.valueOf(comparator.compare(left, right)); } ComparatorFunction(Comparator<? super T> comparator); Integer evaluate(T left, T right); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString(); @SuppressWarnings("unchecked") static ComparatorFunction<T> instance(); static final ComparatorFunction<Comparable<?>> INSTANCE; }### Answer:
@Test public void testEvaluate() { ComparatorFunction<Integer> f = ComparatorFunction.<Integer> instance(); assertTrue((f.evaluate(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(Integer.MAX_VALUE))).intValue() == 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(1))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(0))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(-1))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MAX_VALUE), Integer.valueOf(Integer.MIN_VALUE))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(1), Integer.valueOf(Integer.MAX_VALUE))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(1), Integer.valueOf(1))).intValue() == 0); assertTrue((f.evaluate(Integer.valueOf(1), Integer.valueOf(0))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(1), Integer.valueOf(-1))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(1), Integer.valueOf(Integer.MIN_VALUE))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(0), Integer.valueOf(Integer.MAX_VALUE))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(0), Integer.valueOf(1))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(0), Integer.valueOf(0))).intValue() == 0); assertTrue((f.evaluate(Integer.valueOf(0), Integer.valueOf(-1))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(0), Integer.valueOf(Integer.MIN_VALUE))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(-1), Integer.valueOf(Integer.MAX_VALUE))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(-1), Integer.valueOf(1))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(-1), Integer.valueOf(0))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(-1), Integer.valueOf(-1))).intValue() == 0); assertTrue((f.evaluate(Integer.valueOf(-1), Integer.valueOf(Integer.MIN_VALUE))).intValue() > 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(Integer.MAX_VALUE))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(1))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(0))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(-1))).intValue() < 0); assertTrue((f.evaluate(Integer.valueOf(Integer.MIN_VALUE), Integer.valueOf(Integer.MIN_VALUE))).intValue() == 0); }