ICU-1005 Test coverage for ucol_mergeSortkeys
X-SVN-Rev: 6881
This commit is contained in:
parent
3dc29ee8bb
commit
e4bf389907
@ -394,6 +394,14 @@ UColAttributeValue strengths[] = {
|
||||
UCOL_IDENTICAL
|
||||
};
|
||||
|
||||
static const char * strengthsC[] = {
|
||||
"UCOL_PRIMARY",
|
||||
"UCOL_SECONDARY",
|
||||
"UCOL_TERTIARY",
|
||||
"UCOL_QUATERNARY",
|
||||
"UCOL_IDENTICAL"
|
||||
};
|
||||
|
||||
#if 0
|
||||
static const char * caseFirstC[] = {
|
||||
"UCOL_OFF",
|
||||
@ -412,14 +420,6 @@ static const char * caseLevelC[] = {
|
||||
"UCOL_ON"
|
||||
};
|
||||
|
||||
static const char * strengthsC[] = {
|
||||
"UCOL_PRIMARY",
|
||||
"UCOL_SECONDARY",
|
||||
"UCOL_TERTIARY",
|
||||
"UCOL_QUATERNARY",
|
||||
"UCOL_IDENTICAL"
|
||||
};
|
||||
|
||||
/* not used currently - does not test only prints */
|
||||
static void PrintMarkDavis( )
|
||||
{
|
||||
@ -1401,6 +1401,8 @@ static void genericLocaleStarter(const char *locale, const char *s[], uint32_t s
|
||||
ucol_close(coll);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* currently not used with options */
|
||||
static void genericRulesStarterWithOptions(const char *rules, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize) {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
UChar rlz[RULE_BUFFER_LEN] = { 0 };
|
||||
@ -1423,6 +1425,7 @@ static void genericRulesStarterWithOptions(const char *rules, const char *s[], u
|
||||
}
|
||||
ucol_close(coll);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void genericLocaleStarterWithOptions(const char *locale, const char *s[], uint32_t size, const UColAttribute *attrs, const UColAttributeValue *values, uint32_t attsize) {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
@ -2650,6 +2653,9 @@ static void TestExpansion() {
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* this test tests the current limitations of the engine */
|
||||
/* it always fail, so it is disabled by default */
|
||||
static void TestLimitations() {
|
||||
/* recursive expansions */
|
||||
{
|
||||
@ -2737,6 +2743,7 @@ static void TestLimitations() {
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static void TestBocsuCoverage() {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
@ -2967,7 +2974,7 @@ static void TestExtremeCompression() {
|
||||
test[i][2047] = 0;
|
||||
}
|
||||
|
||||
genericLocaleStarter("en_US", test, 4);
|
||||
genericLocaleStarter("en_US", (const char **)test, 4);
|
||||
|
||||
for(i = 0; i<4; i++) {
|
||||
uprv_free(test[i]);
|
||||
@ -3186,6 +3193,8 @@ static void TestStrCollIdenticalPrefix() {
|
||||
genericRulesTestWithResult(rule, test, sizeof(test)/sizeof(test[0]), UCOL_EQUAL);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* This tests also fails*/
|
||||
static void TestBeforePrefixFailure() {
|
||||
static struct {
|
||||
const char *rules;
|
||||
@ -3263,7 +3272,7 @@ static void TestBeforePrefixFailure() {
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
static void TestPrefixCompose() {
|
||||
const char* rule1 =
|
||||
"&\\u30a7<<<\\u30ab|\\u30fc=\\u30ac|\\u30fc";
|
||||
@ -3300,9 +3309,88 @@ static void TestMergeSortKeys() {
|
||||
"abcd",
|
||||
"abcde"
|
||||
};
|
||||
uint32_t casesSize = sizeof(cases)/sizeof(cases[0]);
|
||||
const char* prefix = "foo";
|
||||
const char* suffix = "egg";
|
||||
char outBuff[256];
|
||||
|
||||
uint8_t **sortkeys = (uint8_t **)uprv_malloc(casesSize*sizeof(uint8_t *));
|
||||
uint8_t **mergedPrefixkeys = (uint8_t **)uprv_malloc(casesSize*sizeof(uint8_t *));
|
||||
uint8_t **mergedSuffixkeys = (uint8_t **)uprv_malloc(casesSize*sizeof(uint8_t *));
|
||||
uint32_t *sortKeysLen = (uint32_t *)uprv_malloc(casesSize*sizeof(uint32_t));
|
||||
uint8_t prefixKey[256], suffixKey[256];
|
||||
uint32_t prefixKeyLen = 0, suffixKeyLen = 0, i = 0;
|
||||
UChar buffer[256];
|
||||
uint32_t unescapedLen = 0, l = 0;
|
||||
UColAttributeValue strength;
|
||||
|
||||
UCollator *coll = ucol_open("en", &status);
|
||||
log_verbose("ucol_mergeSortkeys test\n");
|
||||
log_verbose("Testing order of the test cases\n");
|
||||
genericLocaleStarter("en", cases, casesSize);
|
||||
|
||||
for(i = 0; i<casesSize; i++) {
|
||||
sortkeys[i] = (uint8_t *)uprv_malloc(256*sizeof(uint8_t));
|
||||
mergedPrefixkeys[i] = (uint8_t *)uprv_malloc(256*sizeof(uint8_t));
|
||||
mergedSuffixkeys[i] = (uint8_t *)uprv_malloc(256*sizeof(uint8_t));
|
||||
}
|
||||
|
||||
unescapedLen = u_unescape(prefix, buffer, 256);
|
||||
prefixKeyLen = ucol_getSortKey(coll, buffer, unescapedLen, prefixKey, 256);
|
||||
|
||||
unescapedLen = u_unescape(suffix, buffer, 256);
|
||||
suffixKeyLen = ucol_getSortKey(coll, buffer, unescapedLen, suffixKey, 256);
|
||||
|
||||
log_verbose("Massaging data with prefixes and different strengths\n");
|
||||
strength = UCOL_PRIMARY;
|
||||
while(strength <= UCOL_IDENTICAL) {
|
||||
log_verbose("Strength %s\n", strengthsC[strength<=UCOL_QUATERNARY?strength:4]);
|
||||
ucol_setAttribute(coll, UCOL_STRENGTH, strength, &status);
|
||||
for(i = 0; i<casesSize; i++) {
|
||||
unescapedLen = u_unescape(cases[i], buffer, 256);
|
||||
sortKeysLen[i] = ucol_getSortKey(coll, buffer, unescapedLen, sortkeys[i], 256);
|
||||
ucol_mergeSortkeys(prefixKey, prefixKeyLen, sortkeys[i], sortKeysLen[i], mergedPrefixkeys[i], 256);
|
||||
ucol_mergeSortkeys(sortkeys[i], sortKeysLen[i], suffixKey, suffixKeyLen, mergedSuffixkeys[i], 256);
|
||||
if(i>0) {
|
||||
if(uprv_strcmp((char *)mergedPrefixkeys[i-1], (char *)mergedPrefixkeys[i]) != -1) {
|
||||
log_err("Error while comparing prefixed keys:\n");
|
||||
log_verbose("%s\n%s\n",
|
||||
ucol_sortKeyToString(coll, mergedPrefixkeys[i-1], outBuff, &l),
|
||||
ucol_sortKeyToString(coll, mergedPrefixkeys[i], outBuff, &l));
|
||||
}
|
||||
if(uprv_strcmp((char *)mergedSuffixkeys[i-1], (char *)mergedSuffixkeys[i]) != -1) {
|
||||
log_err("Error while comparing suffixed keys\n");
|
||||
log_verbose("%s\n%s\n", ucol_sortKeyToString(coll, mergedSuffixkeys[i-1], outBuff, &l),
|
||||
ucol_sortKeyToString(coll, mergedSuffixkeys[i], outBuff, &l));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(strength == UCOL_QUATERNARY) {
|
||||
strength = UCOL_IDENTICAL;
|
||||
} else {
|
||||
strength++;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
uint8_t smallBuf[3];
|
||||
uint32_t reqLen = 0;
|
||||
log_verbose("testing buffer overflow\n");
|
||||
reqLen = ucol_mergeSortkeys(prefixKey, prefixKeyLen, suffixKey, suffixKeyLen, smallBuf, 3);
|
||||
if(reqLen != (prefixKeyLen+suffixKeyLen-1)) {
|
||||
log_err("Wrong preflight size for merged sortkey\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
for(i = 0; i<casesSize; i++) {
|
||||
uprv_free(sortkeys[i]);
|
||||
uprv_free(mergedPrefixkeys[i]);
|
||||
uprv_free(mergedSuffixkeys[i]);
|
||||
}
|
||||
uprv_free(sortKeysLen);
|
||||
/* need to finish this up */
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user