]> granicus.if.org Git - icu/commitdiff
ICU-10549 Updates in the performance test case collperf2.
authorYoshito Umaoka <y.umaoka@gmail.com>
Mon, 16 Dec 2013 16:09:05 +0000 (16:09 +0000)
committerYoshito Umaoka <y.umaoka@gmail.com>
Mon, 16 Dec 2013 16:09:05 +0000 (16:09 +0000)
X-SVN-Rev: 34773

icu4c/source/test/perf/collperf2/CollPerf2_r.pl
icu4c/source/test/perf/collperf2/collperf2.cpp

index b1983974a7f9bd574f81206c1e195d43e3fd6bff..58e8bbebb04fd30583e72ea37cd9e0b4871a8643 100755 (executable)
@@ -48,9 +48,17 @@ my $tests = {
     "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"],
index 5f68333b99e257f969ff0b3fb5364c52e644f07e..3c3bdf1f07e0b70cb8cea425f1f971eea827f2f4 100644 (file)
@@ -321,7 +321,7 @@ long GetSortKey::getOperationsPerIteration()
 }\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
@@ -369,10 +369,14 @@ void NextSortKeyPart::call(UErrorCode* status)
         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
@@ -387,6 +391,77 @@ long NextSortKeyPart::getEventsPerIteration()
     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
@@ -705,9 +780,19 @@ private:
     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
@@ -1059,20 +1144,28 @@ CollPerf2Test::runIndexedTest(int32_t index, UBool exec, const char *&name, char
         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
@@ -1171,10 +1264,10 @@ UPerfFunction* CollPerf2Test::TestGetSortKeyNull()
     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
@@ -1182,7 +1275,29 @@ UPerfFunction* CollPerf2Test::TestNextSortKeyPart16()
     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
@@ -1193,7 +1308,7 @@ UPerfFunction* CollPerf2Test::TestNextSortKeyPart32()
     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
@@ -1204,6 +1319,61 @@ UPerfFunction* CollPerf2Test::TestNextSortKeyPart32_2()
     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