/* ******************************************************************************* * Copyright (C) 2002-2010, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ package com.ibm.icu.dev.test.collator; import java.util.Comparator; public class TestComparator { // test the symmetry and transitivity public void test(Comparator comp, int count) { Object c = null; Object b = newObject(c); Object a = newObject(b); int compab = comp.compare(a,b); while (--count >= 0) { // rotate old values c = b; b = a; int compbc = compab; // allocate new and get comparisons a = newObject(b); compab = comp.compare(a,b); int compba = comp.compare(b,a); int compac = comp.compare(a,c); // check symmetry if (compab != -compba) { log("Symmetry Failure", new Object[] {a, b}); } // check transitivity check(a, b, c, compab, compbc, compac); check(a, c, b, compab, -compbc, compab); check(b, a, c, -compab, compac, compbc); check(b, c, a, compbc, -compac, -compab); check(c, a, b, -compac, compab, -compbc); check(c, b, a, -compbc, -compab, -compac); } } private void check(Object a, Object b, Object c, int compab, int compbc, int compac) { if (compab <= 0 && compbc <= 0 && !(compac <= 0)) { log("Transitivity Failure", new Object[] {a, b, c}); } } public Object newObject(Object c) { // return a new object return ""; } public String format(Object c) { // return a new object return c.toString(); } public void log(String title, Object[] arguments) { String result = title + ": ["; for (int i = 0; i < arguments.length; ++i) { if (i != 0) result += ", "; result += format(arguments[i]); } result += "]"; throw new RuntimeException(result); } }