2 *******************************************************************************
\r
3 * Copyright (C) 2002-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
9 package com.ibm.icu.dev.test.collator;
\r
11 import java.util.Comparator;
\r
13 public class TestComparator {
\r
15 // test the symmetry and transitivity
\r
16 public void test(Comparator comp, int count) {
\r
18 Object b = newObject(c);
\r
19 Object a = newObject(b);
\r
20 int compab = comp.compare(a,b);
\r
21 while (--count >= 0) {
\r
22 // rotate old values
\r
25 int compbc = compab;
\r
27 // allocate new and get comparisons
\r
29 compab = comp.compare(a,b);
\r
30 int compba = comp.compare(b,a);
\r
31 int compac = comp.compare(a,c);
\r
34 if (compab != -compba) {
\r
35 log("Symmetry Failure", new Object[] {a, b});
\r
38 // check transitivity
\r
39 check(a, b, c, compab, compbc, compac);
\r
40 check(a, c, b, compab, -compbc, compab);
\r
41 check(b, a, c, -compab, compac, compbc);
\r
42 check(b, c, a, compbc, -compac, -compab);
\r
43 check(c, a, b, -compac, compab, -compbc);
\r
44 check(c, b, a, -compbc, -compab, -compac);
\r
48 private void check(Object a, Object b, Object c,
\r
49 int compab, int compbc, int compac) {
\r
50 if (compab <= 0 && compbc <= 0 && !(compac <= 0)) {
\r
51 log("Transitivity Failure", new Object[] {a, b, c});
\r
55 public Object newObject(Object c) {
\r
56 // return a new object
\r
60 public String format(Object c) {
\r
61 // return a new object
\r
62 return c.toString();
\r
65 public void log(String title, Object[] arguments) {
\r
66 String result = title + ": [";
\r
67 for (int i = 0; i < arguments.length; ++i) {
\r
68 if (i != 0) result += ", ";
\r
69 result += format(arguments[i]);
\r
72 throw new RuntimeException(result);
\r