2dbb8812ba
X-SVN-Rev: 2226
140 lines
3.3 KiB
C++
140 lines
3.3 KiB
C++
/********************************************************************
|
|
* 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
|
|
};
|
|
|
|
|
|
int32_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;
|
|
}
|
|
}
|