| /* |
| ******************************************************************************* |
| * Copyright (C) 2002-2004, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| |
| |
| package com.ibm.icu.dev.test.collator; |
| |
| import java.util.*; |
| |
| 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); |
| } |
| } |