"ucol_getSortKey/len", ["$p1,TestGetSortKey", "$p2,TestGetSortKey"],
"ucol_getSortKey/null", ["$p1,TestGetSortKeyNull", "$p2,TestGetSortKeyNull"],
- "ucol_nextSortKeyPart/16_all", ["$p1,TestNextSortKeyPart16", "$p2,TestNextSortKeyPart16"],
- "ucol_nextSortKeyPart/32_all", ["$p1,TestNextSortKeyPart32", "$p2,TestNextSortKeyPart32"],
- "ucol_nextSortKeyPart/32_2", ["$p1,TestNextSortKeyPart32_2", "$p2,TestNextSortKeyPart32_2"],
+ "ucol_nextSortKeyPart/4_all", ["$p1,TestNextSortKeyPart_4All", "$p2,TestNextSortKeyPart_4All"],
+ "ucol_nextSortKeyPart/4x4", ["$p1,TestNextSortKeyPart_4x4", "$p2,TestNextSortKeyPart_4x4"],
+ "ucol_nextSortKeyPart/4x8", ["$p1,TestNextSortKeyPart_4x8", "$p2,TestNextSortKeyPart_4x8"],
+ "ucol_nextSortKeyPart/32_all", ["$p1,TestNextSortKeyPart_32All", "$p2,TestNextSortKeyPart_32All"],
+ "ucol_nextSortKeyPart/32x2", ["$p1,TestNextSortKeyPart_32x2", "$p2,TestNextSortKeyPart_32x2"],
+
+ "ucol_nextSortKeyPart/UTF8/4_all", ["$p1,TestNextSortKeyPartUTF8_4All", "$p2,TestNextSortKeyPartUTF8_4All"],
+ "ucol_nextSortKeyPart/UTF8/4x4", ["$p1,TestNextSortKeyPartUTF8_4x4", "$p2,TestNextSortKeyPartUTF8_4x4"],
+ "ucol_nextSortKeyPart/UTF8/4x8", ["$p1,TestNextSortKeyPartUTF8_4x8", "$p2,TestNextSortKeyPartUTF8_4x8"],
+ "ucol_nextSortKeyPart/UTF8/32_all", ["$p1,TestNextSortKeyPartUTF8_32All", "$p2,TestNextSortKeyPartUTF8_32All"],
+ "ucol_nextSortKeyPart/UTF8/32x2", ["$p1,TestNextSortKeyPartUTF8_32x2", "$p2,TestNextSortKeyPartUTF8_32x2"],
"Collator::compare/len", ["$p1,TestCppCompare", "$p2,TestCppCompare"],
"Collator::compare/null", ["$p1,TestCppCompareNull", "$p2,TestCppCompareNull"],
}\r
\r
//\r
-// Test case taking a single test data array, calling ucol_nextSortKeyPart for each for the\r
+// Test case taking a single test data array in UTF-16, calling ucol_nextSortKeyPart for each for the\r
// given buffer size\r
//\r
class NextSortKeyPart : public UPerfFunction\r
state[0] = 0;\r
state[1] = 0;\r
int32_t partLen = bufSize;\r
- for (int32_t n = 0; partLen == bufSize && (maxIteration < 0 || n < maxIteration); n++) {\r
+ for (int32_t n = 0; U_SUCCESS(*status) && partLen == bufSize && (maxIteration < 0 || n < maxIteration); n++) {\r
partLen = ucol_nextSortKeyPart(coll, &iter, state, part, bufSize, status);\r
events++;\r
}\r
+ // Workaround for #10595\r
+ if (U_FAILURE(*status)) {\r
+ *status = U_ZERO_ERROR;\r
+ }\r
}\r
free(part);\r
}\r
return events;\r
}\r
\r
+//\r
+// Test case taking a single test data array in UTF-8, calling ucol_nextSortKeyPart for each for the\r
+// given buffer size\r
+//\r
+class NextSortKeyPartUTF8 : public UPerfFunction\r
+{\r
+public:\r
+ NextSortKeyPartUTF8(const UCollator* coll, CA_char* source, int32_t bufSize, int32_t maxIteration = -1);\r
+ ~NextSortKeyPartUTF8();\r
+ virtual void call(UErrorCode* status);\r
+ virtual long getOperationsPerIteration();\r
+ virtual long getEventsPerIteration();\r
+\r
+private:\r
+ const UCollator *coll;\r
+ CA_char *source;\r
+ int32_t bufSize;\r
+ int32_t maxIteration;\r
+ long events;\r
+};\r
+\r
+// Note: maxIteration = -1 -> repeat until the end of collation key\r
+NextSortKeyPartUTF8::NextSortKeyPartUTF8(const UCollator* coll, CA_char* source, int32_t bufSize, int32_t maxIteration /* = -1 */)\r
+ : coll(coll),\r
+ source(source),\r
+ bufSize(bufSize),\r
+ maxIteration(maxIteration),\r
+ events(0)\r
+{\r
+}\r
+\r
+NextSortKeyPartUTF8::~NextSortKeyPartUTF8()\r
+{\r
+}\r
+\r
+void NextSortKeyPartUTF8::call(UErrorCode* status)\r
+{\r
+ if (U_FAILURE(*status)) return;\r
+\r
+ uint8_t *part = (uint8_t *)malloc(bufSize);\r
+ uint32_t state[2];\r
+ UCharIterator iter;\r
+\r
+ events = 0;\r
+ for (int i = 0; i < source->count && U_SUCCESS(*status); i++) {\r
+ uiter_setUTF8(&iter, source->dataOf(i), source->lengthOf(i));\r
+ state[0] = 0;\r
+ state[1] = 0;\r
+ int32_t partLen = bufSize;\r
+ for (int32_t n = 0; U_SUCCESS(*status) && partLen == bufSize && (maxIteration < 0 || n < maxIteration); n++) {\r
+ partLen = ucol_nextSortKeyPart(coll, &iter, state, part, bufSize, status);\r
+ events++;\r
+ }\r
+ // Workaround for #10595\r
+ if (U_FAILURE(*status)) {\r
+ *status = U_ZERO_ERROR;\r
+ }\r
+ }\r
+ free(part);\r
+}\r
+\r
+long NextSortKeyPartUTF8::getOperationsPerIteration()\r
+{\r
+ return source->count;\r
+}\r
+\r
+long NextSortKeyPartUTF8::getEventsPerIteration()\r
+{\r
+ return events;\r
+}\r
+\r
// CPP API test cases\r
\r
//\r
UPerfFunction* TestGetSortKey();\r
UPerfFunction* TestGetSortKeyNull();\r
\r
- UPerfFunction* TestNextSortKeyPart16();\r
- UPerfFunction* TestNextSortKeyPart32();\r
- UPerfFunction* TestNextSortKeyPart32_2();\r
+ UPerfFunction* TestNextSortKeyPart_4All();\r
+ UPerfFunction* TestNextSortKeyPart_4x2();\r
+ UPerfFunction* TestNextSortKeyPart_4x4();\r
+ UPerfFunction* TestNextSortKeyPart_4x8();\r
+ UPerfFunction* TestNextSortKeyPart_32All();\r
+ UPerfFunction* TestNextSortKeyPart_32x2();\r
+\r
+ UPerfFunction* TestNextSortKeyPartUTF8_4All();\r
+ UPerfFunction* TestNextSortKeyPartUTF8_4x2();\r
+ UPerfFunction* TestNextSortKeyPartUTF8_4x4();\r
+ UPerfFunction* TestNextSortKeyPartUTF8_4x8();\r
+ UPerfFunction* TestNextSortKeyPartUTF8_32All();\r
+ UPerfFunction* TestNextSortKeyPartUTF8_32x2();\r
\r
UPerfFunction* TestCppCompare();\r
UPerfFunction* TestCppCompareNull();\r
TESTCASE(6, TestGetSortKey);\r
TESTCASE(7, TestGetSortKeyNull);\r
\r
- TESTCASE(8, TestNextSortKeyPart16);\r
- TESTCASE(9, TestNextSortKeyPart32);\r
- TESTCASE(10, TestNextSortKeyPart32_2);\r
+ TESTCASE(8, TestNextSortKeyPart_4All);\r
+ TESTCASE(9, TestNextSortKeyPart_4x4);\r
+ TESTCASE(10, TestNextSortKeyPart_4x8);\r
+ TESTCASE(11, TestNextSortKeyPart_32All);\r
+ TESTCASE(12, TestNextSortKeyPart_32x2);\r
\r
- TESTCASE(11, TestCppCompare);\r
- TESTCASE(12, TestCppCompareNull);\r
- TESTCASE(13, TestCppCompareSimilar);\r
+ TESTCASE(13, TestNextSortKeyPartUTF8_4All);\r
+ TESTCASE(14, TestNextSortKeyPartUTF8_4x4);\r
+ TESTCASE(15, TestNextSortKeyPartUTF8_4x8);\r
+ TESTCASE(16, TestNextSortKeyPartUTF8_32All);\r
+ TESTCASE(17, TestNextSortKeyPartUTF8_32x2);\r
\r
- TESTCASE(14, TestCppCompareUTF8);\r
- TESTCASE(15, TestCppCompareUTF8Null);\r
- TESTCASE(16, TestCppCompareUTF8Similar);\r
+ TESTCASE(18, TestCppCompare);\r
+ TESTCASE(19, TestCppCompareNull);\r
+ TESTCASE(20, TestCppCompareSimilar);\r
\r
- TESTCASE(17, TestCppGetCollationKey);\r
- TESTCASE(18, TestCppGetCollationKeyNull);\r
+ TESTCASE(21, TestCppCompareUTF8);\r
+ TESTCASE(22, TestCppCompareUTF8Null);\r
+ TESTCASE(23, TestCppCompareUTF8Similar);\r
+\r
+ TESTCASE(24, TestCppGetCollationKey);\r
+ TESTCASE(25, TestCppGetCollationKeyNull);\r
\r
default:\r
name = ""; \r
return testCase;\r
}\r
\r
-UPerfFunction* CollPerf2Test::TestNextSortKeyPart16()\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPart_4All()\r
{\r
UErrorCode status = U_ZERO_ERROR;\r
- NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 16 /* bufSize */);\r
+ NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 4 /* bufSize */);\r
if (U_FAILURE(status)) {\r
delete testCase;\r
return NULL;\r
return testCase;\r
}\r
\r
-UPerfFunction* CollPerf2Test::TestNextSortKeyPart32()\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPart_4x4()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 4 /* bufSize */, 4 /* maxIteration */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPart_4x8()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 4 /* bufSize */, 8 /* maxIteration */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPart_32All()\r
{\r
UErrorCode status = U_ZERO_ERROR;\r
NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 32 /* bufSize */);\r
return testCase;\r
}\r
\r
-UPerfFunction* CollPerf2Test::TestNextSortKeyPart32_2()\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPart_32x2()\r
{\r
UErrorCode status = U_ZERO_ERROR;\r
NextSortKeyPart *testCase = new NextSortKeyPart(coll, getData16(status), 32 /* bufSize */, 2 /* maxIteration */);\r
return testCase;\r
}\r
\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPartUTF8_4All()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPartUTF8 *testCase = new NextSortKeyPartUTF8(coll, getData8(status), 4 /* bufSize */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPartUTF8_4x4()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPartUTF8 *testCase = new NextSortKeyPartUTF8(coll, getData8(status), 4 /* bufSize */, 4 /* maxIteration */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPartUTF8_4x8()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPartUTF8 *testCase = new NextSortKeyPartUTF8(coll, getData8(status), 4 /* bufSize */, 8 /* maxIteration */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPartUTF8_32All()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPartUTF8 *testCase = new NextSortKeyPartUTF8(coll, getData8(status), 32 /* bufSize */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
+UPerfFunction* CollPerf2Test::TestNextSortKeyPartUTF8_32x2()\r
+{\r
+ UErrorCode status = U_ZERO_ERROR;\r
+ NextSortKeyPartUTF8 *testCase = new NextSortKeyPartUTF8(coll, getData8(status), 32 /* bufSize */, 2 /* maxIteration */);\r
+ if (U_FAILURE(status)) {\r
+ delete testCase;\r
+ return NULL;\r
+ }\r
+ return testCase;\r
+}\r
+\r
UPerfFunction* CollPerf2Test::TestCppCompare()\r
{\r
UErrorCode status = U_ZERO_ERROR;\r