]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/collate/src/com/ibm/icu/dev/test/collator/TestComparator.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / collate / src / com / ibm / icu / dev / test / collator / TestComparator.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2002-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 \r
8  \r
9 package com.ibm.icu.dev.test.collator;\r
10 \r
11 import java.util.Comparator;\r
12 \r
13 public class TestComparator {\r
14 \r
15     // test the symmetry and transitivity\r
16     public void test(Comparator comp, int count) {\r
17         Object c = null;\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
23             c = b;\r
24             b = a;\r
25             int compbc = compab;\r
26             \r
27             // allocate new and get comparisons\r
28             a = newObject(b);\r
29             compab = comp.compare(a,b);\r
30             int compba = comp.compare(b,a);\r
31             int compac = comp.compare(a,c);\r
32             \r
33             // check symmetry\r
34             if (compab != -compba) {\r
35                 log("Symmetry Failure", new Object[] {a, b});\r
36             }\r
37             \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
45         }\r
46     }\r
47     \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
52         }\r
53     }\r
54    \r
55     public Object newObject(Object c) {\r
56         // return a new object\r
57         return "";\r
58     }\r
59     \r
60     public String format(Object c) {\r
61         // return a new object\r
62         return c.toString();\r
63     }\r
64     \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
70         }\r
71         result += "]";\r
72         throw new RuntimeException(result);\r
73     }\r
74 }