mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 22:44:49 +00:00
ICU-998 More efficient secondary and tertiary compressing
X-SVN-Rev: 5877
This commit is contained in:
parent
7df7daec4d
commit
e186f84db0
4 changed files with 140 additions and 46 deletions
|
@ -1723,6 +1723,9 @@ uint32_t getDiscontiguous(const UCollator *coll, collIterate *source,
|
|||
}
|
||||
|
||||
inline uint32_t getImplicit(UChar32 cp, collIterate *collationSource, uint32_t hanFixup) {
|
||||
if ((cp & 0xFFFE) == 0xFFFE || (0xD800 <= cp && cp <= 0xDC00)) {
|
||||
return 0; /* illegal code value, use completely ignoreable! */
|
||||
}
|
||||
/*
|
||||
we must skip all 00, 01, 02 bytes, so most bytes have 253 values
|
||||
we must leave a gap of 01 between all values of the last byte, so the last byte has 126 values (3 byte case)
|
||||
|
@ -1961,9 +1964,6 @@ uint32_t getSpecialCE(const UCollator *coll, UChar ch, uint32_t CE, collIterate
|
|||
UTF_IS_SECOND_SURROGATE((nextChar=*source->pos))) {
|
||||
uint32_t cp = ((((uint32_t)ch)<<10UL)+(nextChar)-(((uint32_t)0xd800<<10UL)+0xdc00-0x10000));
|
||||
source->pos++;
|
||||
if ((cp & 0xFFFE) == 0xFFFE || (0xD800 <= cp && cp <= 0xDC00)) {
|
||||
return 0; /* illegal code value, use completely ignoreable! */
|
||||
}
|
||||
return getImplicit(cp, source, 0);
|
||||
} else {
|
||||
return 0; /* completely ignorable */
|
||||
|
@ -2241,6 +2241,9 @@ inline UChar getPrevNormalizedChar(collIterate *data)
|
|||
}
|
||||
|
||||
inline uint32_t getPrevImplicit(UChar32 cp, collIterate *collationSource, uint32_t hanFixup) {
|
||||
if ((cp & 0xFFFE) == 0xFFFE || (0xD800 <= cp && cp <= 0xDC00)) {
|
||||
return 0; /* illegal code value, use completely ignoreable! */
|
||||
}
|
||||
/* we must skip all 00, 01, 02 bytes, so most bytes have 253 values
|
||||
we must leave a gap of 01 between all values of the last byte, so the last byte has 126 values (3 byte case)
|
||||
we shift so that HAN all has the same first primary, for compression.
|
||||
|
@ -2528,9 +2531,6 @@ uint32_t getSpecialPrevCE(const UCollator *coll, UChar ch, uint32_t CE,
|
|||
if (UTF_IS_FIRST_SURROGATE(prevChar)) {
|
||||
cp = ((((uint32_t)prevChar)<<10UL)+(ch)-(((uint32_t)0xd800<<10UL)+0xdc00-0x10000));
|
||||
source->pos = prev;
|
||||
if ((cp & 0xFFFE) == 0xFFFE || (0xD800 <= cp && cp <= 0xDC00)) {
|
||||
return 0; /* illegal code value, use completely ignoreable! */
|
||||
}
|
||||
} else {
|
||||
return 0; /* completely ignorable */
|
||||
}
|
||||
|
@ -3109,11 +3109,11 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
if(shifted && ((notIsContinuation && order <= variableTopValue && primary1 > 0)
|
||||
|| (!notIsContinuation && wasShifted))) {
|
||||
if(count4 > 0) {
|
||||
while (count4 >= UCOL_BOT_COUNT4) {
|
||||
while (count4 > UCOL_BOT_COUNT4) {
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + UCOL_BOT_COUNT4);
|
||||
count4 -= UCOL_BOT_COUNT4;
|
||||
}
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + count4);
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + (count4-1));
|
||||
count4 = 0;
|
||||
}
|
||||
/* We are dealing with a variable and we're treating them as shifted */
|
||||
|
@ -3169,17 +3169,17 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
} else {
|
||||
if (count2 > 0) {
|
||||
if (secondary > UCOL_COMMON2) { // not necessary for 4th level.
|
||||
while (count2 >= UCOL_TOP_COUNT2) {
|
||||
while (count2 > UCOL_TOP_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - UCOL_TOP_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_TOP_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - (count2-1));
|
||||
} else {
|
||||
while (count2 >= UCOL_BOT_COUNT2) {
|
||||
while (count2 > UCOL_BOT_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + UCOL_BOT_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_BOT_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + (count2-1));
|
||||
}
|
||||
count2 = 0;
|
||||
}
|
||||
|
@ -3252,17 +3252,17 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
}
|
||||
if (count3 > 0) {
|
||||
if ((tertiary > tertiaryCommon)) {
|
||||
while (count3 >= coll->tertiaryTopCount) {
|
||||
while (count3 > coll->tertiaryTopCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - coll->tertiaryTopCount);
|
||||
count3 -= (uint32_t)coll->tertiaryTopCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - (count3-1));
|
||||
} else {
|
||||
while (count3 >= coll->tertiaryBottomCount) {
|
||||
while (count3 > coll->tertiaryBottomCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + coll->tertiaryBottomCount);
|
||||
count3 -= (uint32_t)coll->tertiaryBottomCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + (count3-1));
|
||||
}
|
||||
count3 = 0;
|
||||
}
|
||||
|
@ -3311,11 +3311,11 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
/* we have done all the CE's, now let's put them together to form a key */
|
||||
if(compareSec == 0) {
|
||||
if (count2 > 0) {
|
||||
while (count2 >= UCOL_BOT_COUNT2) {
|
||||
while (count2 > UCOL_BOT_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + UCOL_BOT_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_BOT_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + (count2-1));
|
||||
}
|
||||
*(primaries++) = UCOL_LEVELTERMINATOR;
|
||||
uint32_t secsize = secondaries-secStart;
|
||||
|
@ -3326,6 +3326,7 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
if(frenchStartPtr != NULL) {
|
||||
uprv_ucol_reverse_buffer(uint8_t, frenchStartPtr, frenchEndPtr);
|
||||
}
|
||||
/* TODO: put French secondary compression here */
|
||||
for(i = 0; i<secsize; i++) {
|
||||
*(primaries++) = *(secondaries-i-1);
|
||||
}
|
||||
|
@ -3342,6 +3343,7 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
if(frenchStartPtr != NULL) {
|
||||
uprv_ucol_reverse_buffer(uint8_t, frenchStartPtr, frenchEndPtr);
|
||||
}
|
||||
/* TODO: put French secondary compression here */
|
||||
for(i = 0; i<secsize; i++) {
|
||||
*(primaries++) = *(secondaries-i-1);
|
||||
}
|
||||
|
@ -3382,11 +3384,11 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - count3);
|
||||
} else {
|
||||
while (count3 >= coll->tertiaryBottomCount) {
|
||||
while (count3 > coll->tertiaryBottomCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + coll->tertiaryBottomCount);
|
||||
count3 -= (uint32_t)coll->tertiaryBottomCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + (count3-1));
|
||||
}
|
||||
}
|
||||
uint32_t tersize = tertiaries - terStart;
|
||||
|
@ -3397,11 +3399,11 @@ ucol_calcSortKey(const UCollator *coll,
|
|||
primaries += tersize;
|
||||
if(/*compareQuad == 0*/qShifted == TRUE) {
|
||||
if(count4 > 0) {
|
||||
while (count4 >= UCOL_BOT_COUNT4) {
|
||||
while (count4 > UCOL_BOT_COUNT4) {
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + UCOL_BOT_COUNT4);
|
||||
count4 -= UCOL_BOT_COUNT4;
|
||||
}
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + count4);
|
||||
*quads++ = (uint8_t)(UCOL_COMMON_BOT4 + (count4-1));
|
||||
}
|
||||
*(primaries++) = UCOL_LEVELTERMINATOR;
|
||||
uint32_t quadsize = quads - quadStart;
|
||||
|
@ -3635,17 +3637,17 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll,
|
|||
} else {
|
||||
if (count2 > 0) {
|
||||
if (secondary > UCOL_COMMON2) { // not necessary for 4th level.
|
||||
while (count2 >= UCOL_TOP_COUNT2) {
|
||||
while (count2 > UCOL_TOP_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - UCOL_TOP_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_TOP_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_TOP2 - (count2-1));
|
||||
} else {
|
||||
while (count2 >= UCOL_BOT_COUNT2) {
|
||||
while (count2 > UCOL_BOT_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + UCOL_BOT_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_BOT_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + (count2-1));
|
||||
}
|
||||
count2 = 0;
|
||||
}
|
||||
|
@ -3670,17 +3672,17 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll,
|
|||
}
|
||||
if (count3 > 0) {
|
||||
if ((tertiary > tertiaryCommon)) {
|
||||
while (count3 >= coll->tertiaryTopCount) {
|
||||
while (count3 > coll->tertiaryTopCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - coll->tertiaryTopCount);
|
||||
count3 -= (uint32_t)coll->tertiaryTopCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - (count3-1));
|
||||
} else {
|
||||
while (count3 >= coll->tertiaryBottomCount) {
|
||||
while (count3 > coll->tertiaryBottomCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + coll->tertiaryBottomCount);
|
||||
count3 -= (uint32_t)coll->tertiaryBottomCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + (count3-1));
|
||||
}
|
||||
count3 = 0;
|
||||
}
|
||||
|
@ -3717,11 +3719,11 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll,
|
|||
sortKeySize += (primaries - primStart);
|
||||
/* we have done all the CE's, now let's put them together to form a key */
|
||||
if (count2 > 0) {
|
||||
while (count2 >= UCOL_BOT_COUNT2) {
|
||||
while (count2 > UCOL_BOT_COUNT2) {
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + UCOL_BOT_COUNT2);
|
||||
count2 -= (uint32_t)UCOL_BOT_COUNT2;
|
||||
}
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + count2);
|
||||
*secondaries++ = (uint8_t)(UCOL_COMMON_BOT2 + (count2-1));
|
||||
}
|
||||
uint32_t secsize = secondaries-secStart;
|
||||
sortKeySize += secsize;
|
||||
|
@ -3747,11 +3749,11 @@ ucol_calcSortKeySimpleTertiary(const UCollator *coll,
|
|||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryTop - count3);
|
||||
} else {
|
||||
while (count3 >= coll->tertiaryBottomCount) {
|
||||
while (count3 > coll->tertiaryBottomCount) {
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + coll->tertiaryBottomCount);
|
||||
count3 -= (uint32_t)coll->tertiaryBottomCount;
|
||||
}
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + count3);
|
||||
*tertiaries++ = (uint8_t)(tertiaryBottom + (count3-1));
|
||||
}
|
||||
}
|
||||
*(primaries++) = UCOL_LEVELTERMINATOR;
|
||||
|
|
|
@ -386,9 +386,9 @@ enum {
|
|||
|
||||
#define UCOL_FLAG_BIT_MASK_CASE_SW_OFF 0x80
|
||||
#define UCOL_FLAG_BIT_MASK_CASE_SW_ON 0x40
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_OFF 0x86
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_LOWER 0x46
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_UPPER 0xC6
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_OFF 0x85
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_LOWER 0x45
|
||||
#define UCOL_COMMON_TOP3_CASE_SW_UPPER 0xC5
|
||||
|
||||
/* These values come from the UCA */
|
||||
#define UCOL_COMMON_BOT3 0x05
|
||||
|
|
|
@ -579,8 +579,10 @@ void TestSortKey()
|
|||
{
|
||||
uint8_t *sortk1 = NULL, *sortk2 = NULL, *sortk3 = NULL;
|
||||
uint8_t sortk2_compat[] = {
|
||||
/* 2.0 key */
|
||||
0x19, 0x1B, 0x1D, 0x1F, 0x19, 0x01, 0x09, 0x01, 0x09, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00
|
||||
/* 1.8.1 key.*/
|
||||
0x19, 0x1B, 0x1D, 0x1F, 0x19, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00
|
||||
/*0x19, 0x1B, 0x1D, 0x1F, 0x19, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x92, 0x93, 0x94, 0x95, 0x92, 0x00*/
|
||||
/*this is a 1.8 sortkey */
|
||||
/*0x17, 0x19, 0x1B, 0x1D, 0x17, 0x01, 0x08, 0x01, 0x08, 0x00*/
|
||||
/*this is a 1.7 sortkey */
|
||||
|
|
|
@ -1309,9 +1309,9 @@ static void IsTailoredTest( ) {
|
|||
}
|
||||
}
|
||||
|
||||
static void genericOrderingTest(UCollator *coll, const char *s[], uint32_t size) {
|
||||
UChar t1[256] = {0};
|
||||
UChar t2[256] = {0};
|
||||
static void genericOrderingTestWithResult(UCollator *coll, const char *s[], uint32_t size, UCollationResult result) {
|
||||
UChar t1[2048] = {0};
|
||||
UChar t2[2048] = {0};
|
||||
UCollationElements *iter;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
|
||||
|
@ -1327,9 +1327,9 @@ static void genericOrderingTest(UCollator *coll, const char *s[], uint32_t size)
|
|||
}
|
||||
for(i = 0; i < size-1; i++) {
|
||||
for(j = i+1; j < size; j++) {
|
||||
u_unescape(s[i], t1, 256);
|
||||
u_unescape(s[j], t2, 256);
|
||||
doTest(coll, t1, t2, UCOL_LESS);
|
||||
u_unescape(s[i], t1, 2048);
|
||||
u_unescape(s[j], t2, 2048);
|
||||
doTest(coll, t1, t2, result);
|
||||
/* synwee : added collation element iterator test */
|
||||
ucol_setText(iter, t1, u_strlen(t1), &status);
|
||||
backAndForth(iter);
|
||||
|
@ -1340,6 +1340,10 @@ static void genericOrderingTest(UCollator *coll, const char *s[], uint32_t size)
|
|||
ucol_closeElements(iter);
|
||||
}
|
||||
|
||||
static void genericOrderingTest(UCollator *coll, const char *s[], uint32_t size) {
|
||||
genericOrderingTestWithResult(coll, s, size, UCOL_LESS);
|
||||
}
|
||||
|
||||
static void genericLocaleStarter(const char *locale, const char *s[], uint32_t size) {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
UCollator *coll = ucol_open(locale, &status);
|
||||
|
@ -1936,6 +1940,7 @@ static void TestCase( )
|
|||
ucol_setAttribute(myCollation, UCOL_CASE_LEVEL, caseTestAttributes[k][1], &status);
|
||||
for (i = 0; i < 3 ; i++) {
|
||||
for(j = i+1; j<4; j++) {
|
||||
log_verbose("k:%d, i:%d, j:%d\n", k, i, j);
|
||||
doTest(myCollation, testCase[i], testCase[j], caseTestResults[k][3*i+j-1]);
|
||||
}
|
||||
}
|
||||
|
@ -2787,6 +2792,90 @@ static void TestVariableTopSetting() {
|
|||
}
|
||||
}
|
||||
|
||||
static void TestNonChars() {
|
||||
static const char *test[] = {
|
||||
"\\u0000",
|
||||
"\\uFFFE", "\\uFFFF",
|
||||
"\\U0001FFFE", "\\U0001FFFF",
|
||||
"\\U0002FFFE", "\\U0002FFFF",
|
||||
"\\U0003FFFE", "\\U0003FFFF",
|
||||
"\\U0004FFFE", "\\U0004FFFF",
|
||||
"\\U0005FFFE", "\\U0005FFFF",
|
||||
"\\U0006FFFE", "\\U0006FFFF",
|
||||
"\\U0007FFFE", "\\U0007FFFF",
|
||||
"\\U0008FFFE", "\\U0008FFFF",
|
||||
"\\U0009FFFE", "\\U0009FFFF",
|
||||
"\\U000AFFFE", "\\U000AFFFF",
|
||||
"\\U000BFFFE", "\\U000BFFFF",
|
||||
"\\U000CFFFE", "\\U000CFFFF",
|
||||
"\\U000DFFFE", "\\U000DFFFF",
|
||||
"\\U000EFFFE", "\\U000EFFFF",
|
||||
"\\U000FFFFE", "\\U000FFFFF",
|
||||
"\\U0010FFFE", "\\U0010FFFF"
|
||||
};
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
UCollator *coll = ucol_open("en_US", &status);
|
||||
|
||||
log_verbose("Test non characters\n");
|
||||
|
||||
if(U_SUCCESS(status)) {
|
||||
genericOrderingTestWithResult(coll, test, 35, UCOL_EQUAL);
|
||||
} else {
|
||||
log_err("Unable to open collator\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void TestExtremeCompression() {
|
||||
static const char *test[] = {
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac",
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad"
|
||||
};
|
||||
genericLocaleStarter("en_US", test, 4);
|
||||
}
|
||||
|
||||
static void TestSurrogates() {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
|
||||
|
@ -2812,8 +2901,9 @@ static void TestSurrogates() {
|
|||
|
||||
void addMiscCollTest(TestNode** root)
|
||||
{
|
||||
/*addTest(root, &TestLimitations, "tscoll/cmsccoll/TestLimitations");*/
|
||||
|
||||
/*addTest(root, &TestLimitations, "tscoll/cmsccoll/TestLimitations");*/
|
||||
addTest(root, &TestNonChars, "tscoll/cmsccoll/TestNonChars");
|
||||
addTest(root, &TestExtremeCompression, "tscoll/cmsccoll/TestExtremeCompression");
|
||||
addTest(root, &TestSurrogates, "tscoll/cmsccoll/TestSurrogates");
|
||||
addTest(root, &TestVariableTopSetting, "tscoll/cmsccoll/TestVariableTopSetting");
|
||||
addTest(root, &TestBocsuCoverage, "tscoll/cmsccoll/TestBocsuCoverage");
|
||||
|
|
Loading…
Add table
Reference in a new issue