/******************************************************************** * COPYRIGHT: * Copyright (c) 1997-1999, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ #ifndef _COLL #include "unicode/coll.h" #endif #ifndef _TBLCOLL #include "unicode/tblcoll.h" #endif #ifndef _UNISTR #include "unicode/unistr.h" #endif #ifndef _SORTKEY #include "unicode/sortkey.h" #endif #ifndef _CURRCOLL #include "currcoll.h" #endif #define ARRAY_LENGTH(array) (sizeof array / sizeof array[0]) CollationCurrencyTest::CollationCurrencyTest() { } CollationCurrencyTest::~CollationCurrencyTest() { } void CollationCurrencyTest::currencyTest(char *par) { // All the currency symbols, in collation order static const UChar currency[] = { 0x00a4, // generic currency 0x0e3f, // baht 0x00a2, // cent 0x20a1, // colon 0x20a2, // cruzeiro 0x0024, // dollar 0x20ab, // dong 0x20ac, // euro 0x20a3, // franc 0x20a4, // lira 0x20a5, // mill 0x20a6, // naira 0x20a7, // peseta 0x00a3, // pound 0x20a8, // rupee 0x20aa, // shekel 0x20a9, // won 0x00a5 // yen }; uint32_t i, j; UErrorCode status = U_ZERO_ERROR; Collator::EComparisonResult expectedResult = Collator::EQUAL; RuleBasedCollator *c = (RuleBasedCollator *)Collator::createInstance(status); if (U_FAILURE(status)) { errln ("Collator::createInstance() failed!"); return; } // Compare each currency symbol against all the // currency symbols, including itself for (i = 0; i < ARRAY_LENGTH(currency); i += 1) { for (j = 0; j < ARRAY_LENGTH(currency); j += 1) { UnicodeString source(¤cy[i], 1); UnicodeString target(¤cy[j], 1); if (i < j) { expectedResult = Collator::LESS; } else if ( i == j) { expectedResult = Collator::EQUAL; } else { expectedResult = Collator::GREATER; } Collator::EComparisonResult compareResult = c->compare(source, target); CollationKey sourceKey, targetKey; UErrorCode status = U_ZERO_ERROR; c->getCollationKey(source, sourceKey, status); if (U_FAILURE(status)) { errln("Couldn't get collationKey for source"); continue; } c->getCollationKey(target, targetKey, status); if (U_FAILURE(status)) { errln("Couldn't get collationKey for target"); continue; } Collator::EComparisonResult keyResult = sourceKey.compareTo(targetKey); reportCResult(source, target, sourceKey, targetKey, compareResult, keyResult, expectedResult); } } delete c; } void CollationCurrencyTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* par) { if (exec) { logln("Collation Currency Tests: "); } switch (index) { case 0: name = "currencyTest"; if (exec) currencyTest(par); break; default: name = ""; break; } }