2 **********************************************************************
3 * Copyright (c) 2002-2003, International Business Machines
4 * Corporation and others. All Rights Reserved.
5 **********************************************************************
6 **********************************************************************
9 * This Program tests the performance of ICU's Normalization engine against Windows
10 * to run it use the command like
12 * c:\normperf.exe -s C:\work\ICUCupertinoRep\icu4c\collation-perf-data -i 10 -p 15 -f TestNames_Asian.txt -u -e UTF-8 -l
16 #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0]))
18 UPerfFunction
* NormalizerPerformanceTest::runIndexedTest(int32_t index
, UBool exec
,const char* &name
, char* par
) {
20 TESTCASE(0,TestICU_NFC_NFD_Text
);
21 TESTCASE(1,TestICU_NFC_NFC_Text
);
22 TESTCASE(2,TestICU_NFC_Orig_Text
);
24 TESTCASE(3,TestICU_NFD_NFD_Text
);
25 TESTCASE(4,TestICU_NFD_NFC_Text
);
26 TESTCASE(5,TestICU_NFD_Orig_Text
);
28 TESTCASE(6,TestICU_FCD_NFD_Text
);
29 TESTCASE(7,TestICU_FCD_NFC_Text
);
30 TESTCASE(8,TestICU_FCD_Orig_Text
);
32 TESTCASE(9,TestWin_NFC_NFD_Text
);
33 TESTCASE(10,TestWin_NFC_NFC_Text
);
34 TESTCASE(11,TestWin_NFC_Orig_Text
);
36 TESTCASE(12,TestWin_NFD_NFD_Text
);
37 TESTCASE(13,TestWin_NFD_NFC_Text
);
38 TESTCASE(14,TestWin_NFD_Orig_Text
);
40 TESTCASE(15,TestQC_NFC_NFD_Text
);
41 TESTCASE(16,TestQC_NFC_NFC_Text
);
42 TESTCASE(17,TestQC_NFC_Orig_Text
);
44 TESTCASE(18,TestQC_NFD_NFD_Text
);
45 TESTCASE(19,TestQC_NFD_NFC_Text
);
46 TESTCASE(20,TestQC_NFD_Orig_Text
);
48 TESTCASE(21,TestQC_FCD_NFD_Text
);
49 TESTCASE(22,TestQC_FCD_NFC_Text
);
50 TESTCASE(23,TestQC_FCD_Orig_Text
);
52 TESTCASE(24,TestIsNormalized_NFC_NFD_Text
);
53 TESTCASE(25,TestIsNormalized_NFC_NFC_Text
);
54 TESTCASE(26,TestIsNormalized_NFC_Orig_Text
);
56 TESTCASE(27,TestIsNormalized_NFD_NFD_Text
);
57 TESTCASE(28,TestIsNormalized_NFD_NFC_Text
);
58 TESTCASE(29,TestIsNormalized_NFD_Orig_Text
);
60 TESTCASE(30,TestIsNormalized_FCD_NFD_Text
);
61 TESTCASE(31,TestIsNormalized_FCD_NFC_Text
);
62 TESTCASE(32,TestIsNormalized_FCD_Orig_Text
);
72 void NormalizerPerformanceTest::normalizeInput(ULine
* dest
,const UChar
* src
,int32_t srcLen
,UNormalizationMode mode
, int32_t options
){
74 UErrorCode status
= U_ZERO_ERROR
;
77 reqLen
=unorm_normalize(src
,srcLen
,mode
, options
,NULL
,0,&status
);
78 if(status
==U_BUFFER_OVERFLOW_ERROR
){
80 dest
->name
= new UChar
[reqLen
+1];
81 reqLen
= unorm_normalize(src
,srcLen
,mode
, options
,dest
->name
,reqLen
+1,&status
);
84 }else if(U_FAILURE(status
)){
85 printf("Could not normalize input. Error: %s", u_errorName(status
));
89 UChar
* NormalizerPerformanceTest::normalizeInput(int32_t& len
, const UChar
* src
,int32_t srcLen
,UNormalizationMode mode
, int32_t options
){
91 UErrorCode status
= U_ZERO_ERROR
;
95 reqLen
=unorm_normalize(src
,srcLen
,mode
, options
,NULL
,0,&status
);
96 if(status
==U_BUFFER_OVERFLOW_ERROR
){
98 dest
= new UChar
[reqLen
+1];
99 reqLen
= unorm_normalize(src
,srcLen
,mode
, options
,dest
,reqLen
+1,&status
);
102 }else if(U_FAILURE(status
)){
103 printf("Could not normalize input. Error: %s", u_errorName(status
));
110 static UOption cmdLineOptions
[]={
111 UOPTION_DEF("options", 'o', UOPT_OPTIONAL_ARG
)
114 NormalizerPerformanceTest::NormalizerPerformanceTest(int32_t argc
, const char* argv
[], UErrorCode
& status
)
115 : UPerfTest(argc
,argv
,status
), options(0) {
123 if(status
== U_ILLEGAL_ARGUMENT_ERROR
){
124 fprintf(stderr
,gUsageString
, "normperf");
128 if(U_FAILURE(status
)){
129 fprintf(stderr
, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status
));
133 _remainingArgc
= u_parseArgs(_remainingArgc
, (char **)argv
, (int32_t)(LENGTHOF(cmdLineOptions
)), cmdLineOptions
);
134 if(cmdLineOptions
[0].doesOccur
&& cmdLineOptions
[0].value
!=NULL
) {
135 options
=(int32_t)strtol(cmdLineOptions
[0].value
, NULL
, 16);
139 ULine
* filelines
= getLines(status
);
140 if(U_FAILURE(status
)){
141 fprintf(stderr
, "FAILED to read lines from file and create UPerfTest object. Error: %s\n", u_errorName(status
));
144 NFDFileLines
= new ULine
[numLines
];
145 NFCFileLines
= new ULine
[numLines
];
147 for(int32_t i
=0;i
<numLines
;i
++){
148 normalizeInput(&NFDFileLines
[i
],filelines
[i
].name
,filelines
[i
].len
,UNORM_NFD
, options
);
149 normalizeInput(&NFCFileLines
[i
],filelines
[i
].name
,filelines
[i
].len
,UNORM_NFC
, options
);
154 const UChar
* src
= getBuffer(srcLen
,status
);
158 if(U_FAILURE(status
)){
159 fprintf(stderr
, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status
));
163 NFDBuffer
= normalizeInput(NFDBufferLen
,src
,srcLen
,UNORM_NFD
, options
);
164 NFCBuffer
= normalizeInput(NFCBufferLen
,src
,srcLen
,UNORM_NFC
, options
);
169 NormalizerPerformanceTest::~NormalizerPerformanceTest(){
170 delete[] NFDFileLines
;
171 delete[] NFCFileLines
;
176 // Test NFC Performance
177 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_NFD_Text(){
179 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFDFileLines
,numLines
, uselen
);
182 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFDBuffer
, NFDBufferLen
, uselen
);
186 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_NFC_Text(){
188 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFCFileLines
,numLines
, uselen
);
191 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFCBuffer
, NFCBufferLen
, uselen
);
195 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_Orig_Text(){
197 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,lines
,numLines
, uselen
);
200 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,buffer
, bufferLen
, uselen
);
205 // Test NFD Performance
206 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_NFD_Text(){
208 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFDFileLines
,numLines
, uselen
);
211 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
215 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_NFC_Text(){
217 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFCFileLines
,numLines
, uselen
);
220 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
224 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_Orig_Text(){
226 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,lines
,numLines
, uselen
);
229 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,buffer
,bufferLen
, uselen
);
234 // Test FCD Performance
235 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_NFD_Text(){
237 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFDFileLines
,numLines
, uselen
);
240 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
245 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_NFC_Text(){
247 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFCFileLines
,numLines
, uselen
);
250 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
254 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_Orig_Text(){
256 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,lines
,numLines
, uselen
);
259 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,buffer
,bufferLen
, uselen
);
264 // Test Win NFC Performance
265 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_NFD_Text(){
267 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFDFileLines
,numLines
, uselen
);
270 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
274 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_NFC_Text(){
276 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFCFileLines
,numLines
, uselen
);
279 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
283 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_Orig_Text(){
285 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,lines
,numLines
, uselen
);
288 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,buffer
,bufferLen
, uselen
);
293 // Test Win NFD Performance
294 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_NFD_Text(){
296 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFDFileLines
,numLines
, uselen
);
299 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
303 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_NFC_Text(){
305 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFCFileLines
,numLines
, uselen
);
308 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
312 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_Orig_Text(){
314 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,lines
,numLines
, uselen
);
317 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,buffer
,bufferLen
, uselen
);
322 // Test Quick Check Performance
323 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_NFD_Text(){
325 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
328 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_NFC
, options
,uselen
);
332 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_NFC_Text(){
334 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
337 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_NFC
, options
,uselen
);
341 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_Orig_Text(){
343 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_NFC
, options
,uselen
);
346 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_NFC
, options
,uselen
);
351 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_NFD_Text(){
353 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
356 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_NFD
, options
,uselen
);
360 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_NFC_Text(){
362 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
365 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_NFD
, options
,uselen
);
369 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_Orig_Text(){
371 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_NFD
, options
,uselen
);
374 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_NFD
, options
,uselen
);
379 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_NFD_Text(){
381 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
384 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_FCD
, options
,uselen
);
388 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_NFC_Text(){
390 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
393 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_FCD
, options
,uselen
);
397 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_Orig_Text(){
399 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_FCD
, options
,uselen
);
402 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_FCD
, options
,uselen
);
407 // Test isNormalized Performance
408 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_NFD_Text(){
410 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
413 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_NFC
, options
,uselen
);
417 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_NFC_Text(){
419 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
422 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_NFC
, options
,uselen
);
426 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_Orig_Text(){
428 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_NFC
, options
,uselen
);
431 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_NFC
, options
,uselen
);
436 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_NFD_Text(){
438 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
441 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_NFD
, options
,uselen
);
445 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_NFC_Text(){
447 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
450 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_NFD
, options
,uselen
);
454 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_Orig_Text(){
456 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_NFD
, options
,uselen
);
459 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_NFD
, options
,uselen
);
464 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_NFD_Text(){
466 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
469 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_FCD
, options
,uselen
);
473 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_NFC_Text(){
475 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
478 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_FCD
, options
,uselen
);
482 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_Orig_Text(){
484 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_FCD
, options
,uselen
);
487 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_FCD
, options
,uselen
);
492 int main(int argc
, const char* argv
[]){
493 UErrorCode status
= U_ZERO_ERROR
;
494 NormalizerPerformanceTest
test(argc
, argv
, status
);
495 if(U_FAILURE(status
)){
498 if(test
.run()==FALSE
){
499 fprintf(stderr
,"FAILED: Tests could not be run please check the arguments.\n");