2 **********************************************************************
3 * Copyright (c) 2002-2005, 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
18 #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0]))
20 UPerfFunction
* NormalizerPerformanceTest::runIndexedTest(int32_t index
, UBool exec
,const char* &name
, char* par
) {
22 TESTCASE(0,TestICU_NFC_NFD_Text
);
23 TESTCASE(1,TestICU_NFC_NFC_Text
);
24 TESTCASE(2,TestICU_NFC_Orig_Text
);
26 TESTCASE(3,TestICU_NFD_NFD_Text
);
27 TESTCASE(4,TestICU_NFD_NFC_Text
);
28 TESTCASE(5,TestICU_NFD_Orig_Text
);
30 TESTCASE(6,TestICU_FCD_NFD_Text
);
31 TESTCASE(7,TestICU_FCD_NFC_Text
);
32 TESTCASE(8,TestICU_FCD_Orig_Text
);
34 TESTCASE(9,TestWin_NFC_NFD_Text
);
35 TESTCASE(10,TestWin_NFC_NFC_Text
);
36 TESTCASE(11,TestWin_NFC_Orig_Text
);
38 TESTCASE(12,TestWin_NFD_NFD_Text
);
39 TESTCASE(13,TestWin_NFD_NFC_Text
);
40 TESTCASE(14,TestWin_NFD_Orig_Text
);
42 TESTCASE(15,TestQC_NFC_NFD_Text
);
43 TESTCASE(16,TestQC_NFC_NFC_Text
);
44 TESTCASE(17,TestQC_NFC_Orig_Text
);
46 TESTCASE(18,TestQC_NFD_NFD_Text
);
47 TESTCASE(19,TestQC_NFD_NFC_Text
);
48 TESTCASE(20,TestQC_NFD_Orig_Text
);
50 TESTCASE(21,TestQC_FCD_NFD_Text
);
51 TESTCASE(22,TestQC_FCD_NFC_Text
);
52 TESTCASE(23,TestQC_FCD_Orig_Text
);
54 TESTCASE(24,TestIsNormalized_NFC_NFD_Text
);
55 TESTCASE(25,TestIsNormalized_NFC_NFC_Text
);
56 TESTCASE(26,TestIsNormalized_NFC_Orig_Text
);
58 TESTCASE(27,TestIsNormalized_NFD_NFD_Text
);
59 TESTCASE(28,TestIsNormalized_NFD_NFC_Text
);
60 TESTCASE(29,TestIsNormalized_NFD_Orig_Text
);
62 TESTCASE(30,TestIsNormalized_FCD_NFD_Text
);
63 TESTCASE(31,TestIsNormalized_FCD_NFC_Text
);
64 TESTCASE(32,TestIsNormalized_FCD_Orig_Text
);
74 void NormalizerPerformanceTest::normalizeInput(ULine
* dest
,const UChar
* src
,int32_t srcLen
,UNormalizationMode mode
, int32_t options
){
76 UErrorCode status
= U_ZERO_ERROR
;
79 reqLen
=unorm_normalize(src
,srcLen
,mode
, options
,NULL
,0,&status
);
80 if(status
==U_BUFFER_OVERFLOW_ERROR
){
82 dest
->name
= new UChar
[reqLen
+1];
83 reqLen
= unorm_normalize(src
,srcLen
,mode
, options
,dest
->name
,reqLen
+1,&status
);
86 }else if(U_FAILURE(status
)){
87 printf("Could not normalize input. Error: %s", u_errorName(status
));
91 UChar
* NormalizerPerformanceTest::normalizeInput(int32_t& len
, const UChar
* src
,int32_t srcLen
,UNormalizationMode mode
, int32_t options
){
93 UErrorCode status
= U_ZERO_ERROR
;
97 reqLen
=unorm_normalize(src
,srcLen
,mode
, options
,NULL
,0,&status
);
98 if(status
==U_BUFFER_OVERFLOW_ERROR
){
100 dest
= new UChar
[reqLen
+1];
101 reqLen
= unorm_normalize(src
,srcLen
,mode
, options
,dest
,reqLen
+1,&status
);
104 }else if(U_FAILURE(status
)){
105 printf("Could not normalize input. Error: %s", u_errorName(status
));
112 static UOption cmdLineOptions
[]={
113 UOPTION_DEF("options", 'o', UOPT_OPTIONAL_ARG
)
116 NormalizerPerformanceTest::NormalizerPerformanceTest(int32_t argc
, const char* argv
[], UErrorCode
& status
)
117 : UPerfTest(argc
,argv
,status
), options(0) {
125 if(status
== U_ILLEGAL_ARGUMENT_ERROR
){
126 fprintf(stderr
,gUsageString
, "normperf");
130 if(U_FAILURE(status
)){
131 fprintf(stderr
, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status
));
135 _remainingArgc
= u_parseArgs(_remainingArgc
, (char **)argv
, (int32_t)(LENGTHOF(cmdLineOptions
)), cmdLineOptions
);
136 if(cmdLineOptions
[0].doesOccur
&& cmdLineOptions
[0].value
!=NULL
) {
137 options
=(int32_t)strtol(cmdLineOptions
[0].value
, NULL
, 16);
141 ULine
* filelines
= getLines(status
);
142 if(U_FAILURE(status
)){
143 fprintf(stderr
, "FAILED to read lines from file and create UPerfTest object. Error: %s\n", u_errorName(status
));
146 NFDFileLines
= new ULine
[numLines
];
147 NFCFileLines
= new ULine
[numLines
];
149 for(int32_t i
=0;i
<numLines
;i
++){
150 normalizeInput(&NFDFileLines
[i
],filelines
[i
].name
,filelines
[i
].len
,UNORM_NFD
, options
);
151 normalizeInput(&NFCFileLines
[i
],filelines
[i
].name
,filelines
[i
].len
,UNORM_NFC
, options
);
156 const UChar
* src
= getBuffer(srcLen
,status
);
160 if(U_FAILURE(status
)){
161 fprintf(stderr
, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status
));
165 NFDBuffer
= normalizeInput(NFDBufferLen
,src
,srcLen
,UNORM_NFD
, options
);
166 NFCBuffer
= normalizeInput(NFCBufferLen
,src
,srcLen
,UNORM_NFC
, options
);
171 NormalizerPerformanceTest::~NormalizerPerformanceTest(){
172 delete[] NFDFileLines
;
173 delete[] NFCFileLines
;
178 // Test NFC Performance
179 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_NFD_Text(){
181 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFDFileLines
,numLines
, uselen
);
184 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFDBuffer
, NFDBufferLen
, uselen
);
188 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_NFC_Text(){
190 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFCFileLines
,numLines
, uselen
);
193 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,NFCBuffer
, NFCBufferLen
, uselen
);
197 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFC_Orig_Text(){
199 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,lines
,numLines
, uselen
);
202 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFC
, options
,buffer
, bufferLen
, uselen
);
207 // Test NFD Performance
208 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_NFD_Text(){
210 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFDFileLines
,numLines
, uselen
);
213 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
217 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_NFC_Text(){
219 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFCFileLines
,numLines
, uselen
);
222 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
226 UPerfFunction
* NormalizerPerformanceTest::TestICU_NFD_Orig_Text(){
228 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,lines
,numLines
, uselen
);
231 NormPerfFunction
* func
= new NormPerfFunction(ICUNormNFD
, options
,buffer
,bufferLen
, uselen
);
236 // Test FCD Performance
237 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_NFD_Text(){
239 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFDFileLines
,numLines
, uselen
);
242 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
247 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_NFC_Text(){
249 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFCFileLines
,numLines
, uselen
);
252 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
256 UPerfFunction
* NormalizerPerformanceTest::TestICU_FCD_Orig_Text(){
258 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,lines
,numLines
, uselen
);
261 NormPerfFunction
* func
= new NormPerfFunction(ICUNormFCD
, options
,buffer
,bufferLen
, uselen
);
266 // Test Win NFC Performance
267 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_NFD_Text(){
269 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFDFileLines
,numLines
, uselen
);
272 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
276 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_NFC_Text(){
278 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFCFileLines
,numLines
, uselen
);
281 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
285 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFC_Orig_Text(){
287 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,lines
,numLines
, uselen
);
290 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFC
, options
,buffer
,bufferLen
, uselen
);
295 // Test Win NFD Performance
296 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_NFD_Text(){
298 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFDFileLines
,numLines
, uselen
);
301 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFDBuffer
,NFDBufferLen
, uselen
);
305 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_NFC_Text(){
307 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFCFileLines
,numLines
, uselen
);
310 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,NFCBuffer
,NFCBufferLen
, uselen
);
314 UPerfFunction
* NormalizerPerformanceTest::TestWin_NFD_Orig_Text(){
316 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,lines
,numLines
, uselen
);
319 NormPerfFunction
* func
= new NormPerfFunction(WinNormNFD
, options
,buffer
,bufferLen
, uselen
);
324 // Test Quick Check Performance
325 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_NFD_Text(){
327 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
330 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_NFC
, options
,uselen
);
334 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_NFC_Text(){
336 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
339 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_NFC
, options
,uselen
);
343 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFC_Orig_Text(){
345 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_NFC
, options
,uselen
);
348 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_NFC
, options
,uselen
);
353 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_NFD_Text(){
355 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
358 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_NFD
, options
,uselen
);
362 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_NFC_Text(){
364 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
367 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_NFD
, options
,uselen
);
371 UPerfFunction
* NormalizerPerformanceTest::TestQC_NFD_Orig_Text(){
373 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_NFD
, options
,uselen
);
376 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_NFD
, options
,uselen
);
381 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_NFD_Text(){
383 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
386 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFDBuffer
, NFDBufferLen
, UNORM_FCD
, options
,uselen
);
390 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_NFC_Text(){
392 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
395 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,NFCBuffer
, NFCBufferLen
, UNORM_FCD
, options
,uselen
);
399 UPerfFunction
* NormalizerPerformanceTest::TestQC_FCD_Orig_Text(){
401 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,lines
, numLines
, UNORM_FCD
, options
,uselen
);
404 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUQuickCheck
,buffer
, bufferLen
, UNORM_FCD
, options
,uselen
);
409 // Test isNormalized Performance
410 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_NFD_Text(){
412 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
415 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_NFC
, options
,uselen
);
419 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_NFC_Text(){
421 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_NFC
, options
,uselen
);
424 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_NFC
, options
,uselen
);
428 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFC_Orig_Text(){
430 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_NFC
, options
,uselen
);
433 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_NFC
, options
,uselen
);
438 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_NFD_Text(){
440 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
443 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_NFD
, options
,uselen
);
447 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_NFC_Text(){
449 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_NFD
, options
,uselen
);
452 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_NFD
, options
,uselen
);
456 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_NFD_Orig_Text(){
458 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_NFD
, options
,uselen
);
461 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_NFD
, options
,uselen
);
466 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_NFD_Text(){
468 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
471 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFDBuffer
, NFDBufferLen
, UNORM_FCD
, options
,uselen
);
475 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_NFC_Text(){
477 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCFileLines
, numLines
, UNORM_FCD
, options
,uselen
);
480 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,NFCBuffer
, NFCBufferLen
, UNORM_FCD
, options
,uselen
);
484 UPerfFunction
* NormalizerPerformanceTest::TestIsNormalized_FCD_Orig_Text(){
486 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,lines
, numLines
, UNORM_FCD
, options
,uselen
);
489 QuickCheckPerfFunction
* func
= new QuickCheckPerfFunction(ICUIsNormalized
,buffer
, bufferLen
, UNORM_FCD
, options
,uselen
);
494 int main(int argc
, const char* argv
[]){
495 UErrorCode status
= U_ZERO_ERROR
;
496 NormalizerPerformanceTest
test(argc
, argv
, status
);
497 if(U_FAILURE(status
)){
500 if(test
.run()==FALSE
){
501 fprintf(stderr
,"FAILED: Tests could not be run please check the arguments.\n");