001: /*
002: *******************************************************************************
003: * Copyright (C) 2002-2004, International Business Machines Corporation and *
004: * others. All Rights Reserved. *
005: *******************************************************************************
006: */
007:
008: /**
009: * Port From: ICU4C v2.1 : Collate/CollationCurrencyTest
010: * Source File: $ICU4CRoot/source/test/intltest/currcoll.cpp
011: **/package com.ibm.icu.dev.test.collator;
012:
013: import com.ibm.icu.dev.test.*;
014: import com.ibm.icu.text.*;
015: import java.util.Locale;
016:
017: public class CollationCurrencyTest extends TestFmwk {
018: public static void main(String[] args) throws Exception {
019: new CollationCurrencyTest().run(args);
020: }
021:
022: public void TestCurrency() {
023: // All the currency symbols, in collation order
024: char[][] currency = { { 0x00A4 }, /*00A4; L; [14 36, 03, 03] # [082B.0020.0002] # CURRENCY SIGN*/
025: { 0x00A2 }, /*00A2; L; [14 38, 03, 03] # [082C.0020.0002] # CENT SIGN*/
026: { 0xFFE0 }, /*FFE0; L; [14 38, 03, 05] # [082C.0020.0003] # FULLWIDTH CENT SIGN*/
027: { 0x0024 }, /*0024; L; [14 3A, 03, 03] # [082D.0020.0002] # DOLLAR SIGN*/
028: { 0xFF04 }, /*FF04; L; [14 3A, 03, 05] # [082D.0020.0003] # FULLWIDTH DOLLAR SIGN*/
029: { 0xFE69 }, /*FE69; L; [14 3A, 03, 1D] # [082D.0020.000F] # SMALL DOLLAR SIGN*/
030: { 0x00A3 }, /*00A3; L; [14 3C, 03, 03] # [082E.0020.0002] # POUND SIGN*/
031: { 0xFFE1 }, /*FFE1; L; [14 3C, 03, 05] # [082E.0020.0003] # FULLWIDTH POUND SIGN*/
032: { 0x00A5 }, /*00A5; L; [14 3E, 03, 03] # [082F.0020.0002] # YEN SIGN*/
033: { 0xFFE5 }, /*FFE5; L; [14 3E, 03, 05] # [082F.0020.0003] # FULLWIDTH YEN SIGN*/
034: { 0x09F2 }, /*09F2; L; [14 40, 03, 03] # [0830.0020.0002] # BENGALI RUPEE MARK*/
035: { 0x09F3 }, /*09F3; L; [14 42, 03, 03] # [0831.0020.0002] # BENGALI RUPEE SIGN*/
036: { 0x0E3F }, /*0E3F; L; [14 44, 03, 03] # [0832.0020.0002] # THAI CURRENCY SYMBOL BAHT*/
037: { 0x17DB }, /*17DB; L; [14 46, 03, 03] # [0833.0020.0002] # KHMER CURRENCY SYMBOL RIEL*/
038: { 0x20A0 }, /*20A0; L; [14 48, 03, 03] # [0834.0020.0002] # EURO-CURRENCY SIGN*/
039: { 0x20A1 }, /*20A1; L; [14 4A, 03, 03] # [0835.0020.0002] # COLON SIGN*/
040: { 0x20A2 }, /*20A2; L; [14 4C, 03, 03] # [0836.0020.0002] # CRUZEIRO SIGN*/
041: { 0x20A3 }, /*20A3; L; [14 4E, 03, 03] # [0837.0020.0002] # FRENCH FRANC SIGN*/
042: { 0x20A4 }, /*20A4; L; [14 50, 03, 03] # [0838.0020.0002] # LIRA SIGN*/
043: { 0x20A5 }, /*20A5; L; [14 52, 03, 03] # [0839.0020.0002] # MILL SIGN*/
044: { 0x20A6 }, /*20A6; L; [14 54, 03, 03] # [083A.0020.0002] # NAIRA SIGN*/
045: { 0x20A7 }, /*20A7; L; [14 56, 03, 03] # [083B.0020.0002] # PESETA SIGN*/
046: { 0x20A9 }, /*20A9; L; [14 58, 03, 03] # [083C.0020.0002] # WON SIGN*/
047: { 0xFFE6 }, /*FFE6; L; [14 58, 03, 05] # [083C.0020.0003] # FULLWIDTH WON SIGN*/
048: { 0x20AA }, /*20AA; L; [14 5A, 03, 03] # [083D.0020.0002] # NEW SHEQEL SIGN*/
049: { 0x20AB }, /*20AB; L; [14 5C, 03, 03] # [083E.0020.0002] # DONG SIGN*/
050: { 0x20AC }, /*20AC; L; [14 5E, 03, 03] # [083F.0020.0002] # EURO SIGN*/
051: { 0x20AD }, /*20AD; L; [14 60, 03, 03] # [0840.0020.0002] # KIP SIGN*/
052: { 0x20AE }, /*20AE; L; [14 62, 03, 03] # [0841.0020.0002] # TUGRIK SIGN*/
053: { 0x20AF } /*20AF; L; [14 64, 03, 03] # [0842.0020.0002] # DRACHMA SIGN*/
054: };
055:
056: int i, j;
057: int expectedResult = 0;
058: RuleBasedCollator c = (RuleBasedCollator) Collator
059: .getInstance(Locale.ENGLISH);
060:
061: // Compare each currency symbol against all the
062: // currency symbols, including itself
063: String source;
064: String target;
065:
066: for (i = 0; i < currency.length; i += 1) {
067: for (j = 0; j < currency.length; j += 1) {
068: source = new String(currency[i]);
069: target = new String(currency[j]);
070:
071: if (i < j) {
072: expectedResult = -1;
073: } else if (i == j) {
074: expectedResult = 0;
075: } else {
076: expectedResult = 1;
077: }
078:
079: int compareResult = c.compare(source, target);
080: CollationKey sourceKey = null;
081:
082: sourceKey = c.getCollationKey(source);
083:
084: if (sourceKey == null) {
085: errln("Couldn't get collationKey for source");
086: continue;
087: }
088:
089: CollationKey targetKey = null;
090: targetKey = c.getCollationKey(target);
091: if (targetKey == null) {
092: errln("Couldn't get collationKey for source");
093: continue;
094: }
095:
096: int keyResult = sourceKey.compareTo(targetKey);
097:
098: reportCResult(source, target, sourceKey, targetKey,
099: compareResult, keyResult, compareResult,
100: expectedResult);
101: }
102: }
103: }
104:
105: private void reportCResult(String source, String target,
106: CollationKey sourceKey, CollationKey targetKey,
107: int compareResult, int keyResult, int incResult,
108: int expectedResult) {
109: if (expectedResult < -1 || expectedResult > 1) {
110: errln("***** invalid call to reportCResult ****");
111: return;
112: }
113:
114: boolean ok1 = (compareResult == expectedResult);
115: boolean ok2 = (keyResult == expectedResult);
116: boolean ok3 = (incResult == expectedResult);
117:
118: if (ok1 && ok2 && ok3 && !isVerbose()) {
119: return;
120: } else {
121: String msg1 = ok1 ? "Ok: compare(\"" : "FAIL: compare(\"";
122: String msg2 = "\", \"";
123: String msg3 = "\") returned ";
124: String msg4 = "; expected ";
125:
126: String sExpect = new String("");
127: String sResult = new String("");
128: sResult = appendCompareResult(compareResult, sResult);
129: sExpect = appendCompareResult(expectedResult, sExpect);
130: if (ok1) {
131: logln(msg1 + source + msg2 + target + msg3 + sResult);
132: } else {
133: errln(msg1 + source + msg2 + target + msg3 + sResult
134: + msg4 + sExpect);
135: }
136:
137: msg1 = ok2 ? "Ok: key(\"" : "FAIL: key(\"";
138: msg2 = "\").compareTo(key(\"";
139: msg3 = "\")) returned ";
140: sResult = appendCompareResult(keyResult, sResult);
141: if (ok2) {
142: logln(msg1 + source + msg2 + target + msg3 + sResult);
143: } else {
144: errln(msg1 + source + msg2 + target + msg3 + sResult
145: + msg4 + sExpect);
146: msg1 = " ";
147: msg2 = " vs. ";
148: errln(msg1 + prettify(sourceKey) + msg2
149: + prettify(targetKey));
150: }
151:
152: msg1 = ok3 ? "Ok: incCompare(\"" : "FAIL: incCompare(\"";
153: msg2 = "\", \"";
154: msg3 = "\") returned ";
155:
156: sResult = appendCompareResult(incResult, sResult);
157:
158: if (ok3) {
159: logln(msg1 + source + msg2 + target + msg3 + sResult);
160: } else {
161: errln(msg1 + source + msg2 + target + msg3 + sResult
162: + msg4 + sExpect);
163: }
164: }
165: }
166:
167: private String appendCompareResult(int result, String target) {
168: if (result == -1) {
169: target += "LESS";
170: } else if (result == 0) {
171: target += "EQUAL";
172: } else if (result == 1) {
173: target += "GREATER";
174: } else {
175: String huh = "?";
176: target += huh + result;
177: }
178: return target;
179: }
180:
181: String prettify(CollationKey sourceKey) {
182: int i;
183: byte[] bytes = sourceKey.toByteArray();
184: String target = "[";
185:
186: for (i = 0; i < bytes.length; i++) {
187: target += Integer.toHexString(bytes[i]);
188: target += " ";
189: }
190: target += "]";
191: return target;
192: }
193: }
|