Home | History | Annotate | Download | only in normperf
      1 /*
      2 **********************************************************************
      3 * Copyright (c) 2002-2005, International Business Machines
      4 * Corporation and others.  All Rights Reserved.
      5 **********************************************************************
      6 **********************************************************************
      7 */
      8 /**
      9  * This Program tests the performance of ICU's Normalization engine against Windows
     10  * to run it use the command like
     11  *
     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
     13  */
     14 #include "normperf.h"
     15 #include "uoptions.h"
     16 #include <stdio.h>
     17 
     18 #define LENGTHOF(array) (sizeof(array)/sizeof((array)[0]))
     19 
     20 UPerfFunction* NormalizerPerformanceTest::runIndexedTest(int32_t index, UBool exec,const char* &name, char* par) {
     21     switch (index) {
     22         TESTCASE(0,TestICU_NFC_NFD_Text);
     23         TESTCASE(1,TestICU_NFC_NFC_Text);
     24         TESTCASE(2,TestICU_NFC_Orig_Text);
     25 
     26         TESTCASE(3,TestICU_NFD_NFD_Text);
     27         TESTCASE(4,TestICU_NFD_NFC_Text);
     28         TESTCASE(5,TestICU_NFD_Orig_Text);
     29 
     30         TESTCASE(6,TestICU_FCD_NFD_Text);
     31         TESTCASE(7,TestICU_FCD_NFC_Text);
     32         TESTCASE(8,TestICU_FCD_Orig_Text);
     33 
     34         TESTCASE(9,TestWin_NFC_NFD_Text);
     35         TESTCASE(10,TestWin_NFC_NFC_Text);
     36         TESTCASE(11,TestWin_NFC_Orig_Text);
     37 
     38         TESTCASE(12,TestWin_NFD_NFD_Text);
     39         TESTCASE(13,TestWin_NFD_NFC_Text);
     40         TESTCASE(14,TestWin_NFD_Orig_Text);
     41 
     42         TESTCASE(15,TestQC_NFC_NFD_Text);
     43         TESTCASE(16,TestQC_NFC_NFC_Text);
     44         TESTCASE(17,TestQC_NFC_Orig_Text);
     45 
     46         TESTCASE(18,TestQC_NFD_NFD_Text);
     47         TESTCASE(19,TestQC_NFD_NFC_Text);
     48         TESTCASE(20,TestQC_NFD_Orig_Text);
     49 
     50         TESTCASE(21,TestQC_FCD_NFD_Text);
     51         TESTCASE(22,TestQC_FCD_NFC_Text);
     52         TESTCASE(23,TestQC_FCD_Orig_Text);
     53 
     54         TESTCASE(24,TestIsNormalized_NFC_NFD_Text);
     55         TESTCASE(25,TestIsNormalized_NFC_NFC_Text);
     56         TESTCASE(26,TestIsNormalized_NFC_Orig_Text);
     57 
     58         TESTCASE(27,TestIsNormalized_NFD_NFD_Text);
     59         TESTCASE(28,TestIsNormalized_NFD_NFC_Text);
     60         TESTCASE(29,TestIsNormalized_NFD_Orig_Text);
     61 
     62         TESTCASE(30,TestIsNormalized_FCD_NFD_Text);
     63         TESTCASE(31,TestIsNormalized_FCD_NFC_Text);
     64         TESTCASE(32,TestIsNormalized_FCD_Orig_Text);
     65 
     66         default:
     67             name = "";
     68             return NULL;
     69     }
     70     return NULL;
     71 
     72 }
     73 
     74 void NormalizerPerformanceTest::normalizeInput(ULine* dest,const UChar* src ,int32_t srcLen,UNormalizationMode mode, int32_t options){
     75     int32_t reqLen = 0;
     76     UErrorCode status = U_ZERO_ERROR;
     77     for(;;){
     78         /* pure pre-flight */
     79         reqLen=unorm_normalize(src,srcLen,mode, options,NULL,0,&status);
     80         if(status==U_BUFFER_OVERFLOW_ERROR){
     81             status=U_ZERO_ERROR;
     82             dest->name = new UChar[reqLen+1];
     83             reqLen= unorm_normalize(src,srcLen,mode, options,dest->name,reqLen+1,&status);
     84             dest->len=reqLen;
     85             break;
     86         }else if(U_FAILURE(status)){
     87             printf("Could not normalize input. Error: %s", u_errorName(status));
     88         }
     89     }
     90 }
     91 UChar* NormalizerPerformanceTest::normalizeInput(int32_t& len, const UChar* src ,int32_t srcLen,UNormalizationMode mode, int32_t options){
     92     int32_t reqLen = 0;
     93     UErrorCode status = U_ZERO_ERROR;
     94     UChar* dest = NULL;
     95     for(;;){
     96         /* pure pre-flight */
     97         reqLen=unorm_normalize(src,srcLen,mode, options,NULL,0,&status);
     98         if(status==U_BUFFER_OVERFLOW_ERROR){
     99             status=U_ZERO_ERROR;
    100             dest = new UChar[reqLen+1];
    101             reqLen= unorm_normalize(src,srcLen,mode, options,dest,reqLen+1,&status);
    102             len=reqLen;
    103             break;
    104         }else if(U_FAILURE(status)){
    105             printf("Could not normalize input. Error: %s", u_errorName(status));
    106             return NULL;
    107         }
    108     }
    109     return dest;
    110 }
    111 
    112 static UOption cmdLineOptions[]={
    113     UOPTION_DEF("options", 'o', UOPT_OPTIONAL_ARG)
    114 };
    115 
    116 NormalizerPerformanceTest::NormalizerPerformanceTest(int32_t argc, const char* argv[], UErrorCode& status)
    117 : UPerfTest(argc,argv,status), options(0) {
    118     NFDBuffer = NULL;
    119     NFCBuffer = NULL;
    120     NFDBufferLen = 0;
    121     NFCBufferLen = 0;
    122     NFDFileLines = NULL;
    123     NFCFileLines = NULL;
    124 
    125     if(status== U_ILLEGAL_ARGUMENT_ERROR){
    126        fprintf(stderr,gUsageString, "normperf");
    127        return;
    128     }
    129 
    130     if(U_FAILURE(status)){
    131         fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status));
    132         return;
    133     }
    134 
    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);
    138     }
    139 
    140     if(line_mode){
    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));
    144             return;
    145         }
    146         NFDFileLines = new ULine[numLines];
    147         NFCFileLines = new ULine[numLines];
    148 
    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);
    152 
    153         }
    154     }else if(bulk_mode){
    155         int32_t srcLen = 0;
    156         const UChar* src = getBuffer(srcLen,status);
    157         NFDBufferLen = 0;
    158         NFCBufferLen = 0;
    159 
    160         if(U_FAILURE(status)){
    161             fprintf(stderr, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status));
    162             return;
    163         }
    164 
    165         NFDBuffer = normalizeInput(NFDBufferLen,src,srcLen,UNORM_NFD, options);
    166         NFCBuffer = normalizeInput(NFCBufferLen,src,srcLen,UNORM_NFC, options);
    167     }
    168 
    169 }
    170 
    171 NormalizerPerformanceTest::~NormalizerPerformanceTest(){
    172     delete[] NFDFileLines;
    173     delete[] NFCFileLines;
    174     delete[] NFDBuffer;
    175     delete[] NFCBuffer;
    176 }
    177 
    178 // Test NFC Performance
    179 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_NFD_Text(){
    180     if(line_mode){
    181         NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFDFileLines,numLines, uselen);
    182         return func;
    183     }else{
    184         NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFDBuffer, NFDBufferLen, uselen);
    185         return func;
    186     }
    187 }
    188 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_NFC_Text(){
    189     if(line_mode){
    190         NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,NFCFileLines,numLines, uselen);
    191         return func;
    192     }else{
    193         NormPerfFunction* func= new NormPerfFunction(ICUNormNFC, options,NFCBuffer, NFCBufferLen, uselen);
    194         return func;
    195     }
    196 }
    197 UPerfFunction* NormalizerPerformanceTest::TestICU_NFC_Orig_Text(){
    198     if(line_mode){
    199         NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,lines,numLines, uselen);
    200         return func;
    201     }else{
    202         NormPerfFunction* func = new NormPerfFunction(ICUNormNFC, options,buffer, bufferLen, uselen);
    203         return func;
    204     }
    205 }
    206 
    207 // Test NFD Performance
    208 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_NFD_Text(){
    209     if(line_mode){
    210         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFDFileLines,numLines, uselen);
    211         return func;
    212     }else{
    213         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFDBuffer,NFDBufferLen, uselen);
    214         return func;
    215     }
    216 }
    217 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_NFC_Text(){
    218     if(line_mode){
    219         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFCFileLines,numLines, uselen);
    220         return func;
    221     }else{
    222         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,NFCBuffer,NFCBufferLen, uselen);
    223         return func;
    224     }
    225 }
    226 UPerfFunction* NormalizerPerformanceTest::TestICU_NFD_Orig_Text(){
    227     if(line_mode){
    228         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,lines,numLines, uselen);
    229         return func;
    230     }else{
    231         NormPerfFunction* func = new NormPerfFunction(ICUNormNFD, options,buffer,bufferLen, uselen);
    232         return func;
    233     }
    234 }
    235 
    236 // Test FCD Performance
    237 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_NFD_Text(){
    238     if(line_mode){
    239         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFDFileLines,numLines, uselen);
    240         return func;
    241     }else{
    242         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFDBuffer,NFDBufferLen, uselen);
    243         return func;
    244     }
    245 
    246 }
    247 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_NFC_Text(){
    248     if(line_mode){
    249         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFCFileLines,numLines, uselen);
    250         return func;
    251     }else{
    252         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,NFCBuffer,NFCBufferLen, uselen);
    253         return func;
    254     }
    255 }
    256 UPerfFunction* NormalizerPerformanceTest::TestICU_FCD_Orig_Text(){
    257     if(line_mode){
    258         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,lines,numLines, uselen);
    259         return func;
    260     }else{
    261         NormPerfFunction* func = new NormPerfFunction(ICUNormFCD, options,buffer,bufferLen, uselen);
    262         return func;
    263     }
    264 }
    265 
    266 // Test Win NFC Performance
    267 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_NFD_Text(){
    268     if(line_mode){
    269         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFDFileLines,numLines, uselen);
    270         return func;
    271     }else{
    272         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFDBuffer,NFDBufferLen, uselen);
    273         return func;
    274     }
    275 }
    276 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_NFC_Text(){
    277     if(line_mode){
    278         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFCFileLines,numLines, uselen);
    279         return func;
    280     }else{
    281         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,NFCBuffer,NFCBufferLen, uselen);
    282         return func;
    283     }
    284 }
    285 UPerfFunction* NormalizerPerformanceTest::TestWin_NFC_Orig_Text(){
    286     if(line_mode){
    287         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,lines,numLines, uselen);
    288         return func;
    289     }else{
    290         NormPerfFunction* func = new NormPerfFunction(WinNormNFC, options,buffer,bufferLen, uselen);
    291         return func;
    292     }
    293 }
    294 
    295 // Test Win NFD Performance
    296 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_NFD_Text(){
    297     if(line_mode){
    298         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFDFileLines,numLines, uselen);
    299         return func;
    300     }else{
    301         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFDBuffer,NFDBufferLen, uselen);
    302         return func;
    303     }
    304 }
    305 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_NFC_Text(){
    306     if(line_mode){
    307         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFCFileLines,numLines, uselen);
    308         return func;
    309     }else{
    310         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,NFCBuffer,NFCBufferLen, uselen);
    311         return func;
    312     }
    313 }
    314 UPerfFunction* NormalizerPerformanceTest::TestWin_NFD_Orig_Text(){
    315     if(line_mode){
    316         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,lines,numLines, uselen);
    317         return func;
    318     }else{
    319         NormPerfFunction* func = new NormPerfFunction(WinNormNFD, options,buffer,bufferLen, uselen);
    320         return func;
    321     }
    322 }
    323 
    324 // Test Quick Check Performance
    325 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_NFD_Text(){
    326     if(line_mode){
    327         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_NFC, options,uselen);
    328         return func;
    329     }else{
    330         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_NFC, options,uselen);
    331         return func;
    332     }
    333 }
    334 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_NFC_Text(){
    335     if(line_mode){
    336         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_NFC, options,uselen);
    337         return func;
    338     }else{
    339         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_NFC, options,uselen);
    340         return func;
    341     }
    342 }
    343 UPerfFunction* NormalizerPerformanceTest::TestQC_NFC_Orig_Text(){
    344     if(line_mode){
    345         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_NFC, options,uselen);
    346         return func;
    347     }else{
    348         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_NFC, options,uselen);
    349         return func;
    350     }
    351 }
    352 
    353 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_NFD_Text(){
    354     if(line_mode){
    355         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_NFD, options,uselen);
    356         return func;
    357     }else{
    358         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_NFD, options,uselen);
    359         return func;
    360     }
    361 }
    362 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_NFC_Text(){
    363     if(line_mode){
    364         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_NFD, options,uselen);
    365         return func;
    366     }else{
    367         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_NFD, options,uselen);
    368         return func;
    369     }
    370 }
    371 UPerfFunction* NormalizerPerformanceTest::TestQC_NFD_Orig_Text(){
    372     if(line_mode){
    373         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_NFD, options,uselen);
    374         return func;
    375     }else{
    376         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_NFD, options,uselen);
    377         return func;
    378     }
    379 }
    380 
    381 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_NFD_Text(){
    382     if(line_mode){
    383         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDFileLines, numLines, UNORM_FCD, options,uselen);
    384         return func;
    385     }else{
    386         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFDBuffer, NFDBufferLen, UNORM_FCD, options,uselen);
    387         return func;
    388     }
    389 }
    390 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_NFC_Text(){
    391     if(line_mode){
    392         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCFileLines, numLines, UNORM_FCD, options,uselen);
    393         return func;
    394     }else{
    395         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,NFCBuffer, NFCBufferLen, UNORM_FCD, options,uselen);
    396         return func;
    397     }
    398 }
    399 UPerfFunction* NormalizerPerformanceTest::TestQC_FCD_Orig_Text(){
    400     if(line_mode){
    401         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,lines, numLines, UNORM_FCD, options,uselen);
    402         return func;
    403     }else{
    404         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUQuickCheck,buffer, bufferLen, UNORM_FCD, options,uselen);
    405         return func;
    406     }
    407 }
    408 
    409 // Test isNormalized Performance
    410 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_NFD_Text(){
    411     if(line_mode){
    412         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_NFC, options,uselen);
    413         return func;
    414     }else{
    415         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_NFC, options,uselen);
    416         return func;
    417     }
    418 }
    419 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_NFC_Text(){
    420     if(line_mode){
    421         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_NFC, options,uselen);
    422         return func;
    423     }else{
    424         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_NFC, options,uselen);
    425         return func;
    426     }
    427 }
    428 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFC_Orig_Text(){
    429     if(line_mode){
    430         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_NFC, options,uselen);
    431         return func;
    432     }else{
    433         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_NFC, options,uselen);
    434         return func;
    435     }
    436 }
    437 
    438 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_NFD_Text(){
    439     if(line_mode){
    440         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_NFD, options,uselen);
    441         return func;
    442     }else{
    443         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_NFD, options,uselen);
    444         return func;
    445     }
    446 }
    447 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_NFC_Text(){
    448     if(line_mode){
    449         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_NFD, options,uselen);
    450         return func;
    451     }else{
    452         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_NFD, options,uselen);
    453         return func;
    454     }
    455 }
    456 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_NFD_Orig_Text(){
    457     if(line_mode){
    458         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_NFD, options,uselen);
    459         return func;
    460     }else{
    461         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_NFD, options,uselen);
    462         return func;
    463     }
    464 }
    465 
    466 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_NFD_Text(){
    467     if(line_mode){
    468         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDFileLines, numLines, UNORM_FCD, options,uselen);
    469         return func;
    470     }else{
    471         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFDBuffer, NFDBufferLen, UNORM_FCD, options,uselen);
    472         return func;
    473     }
    474 }
    475 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_NFC_Text(){
    476     if(line_mode){
    477         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCFileLines, numLines, UNORM_FCD, options,uselen);
    478         return func;
    479     }else{
    480         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,NFCBuffer, NFCBufferLen, UNORM_FCD, options,uselen);
    481         return func;
    482     }
    483 }
    484 UPerfFunction* NormalizerPerformanceTest::TestIsNormalized_FCD_Orig_Text(){
    485     if(line_mode){
    486         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,lines, numLines, UNORM_FCD, options,uselen);
    487         return func;
    488     }else{
    489         QuickCheckPerfFunction* func = new QuickCheckPerfFunction(ICUIsNormalized,buffer, bufferLen, UNORM_FCD, options,uselen);
    490         return func;
    491     }
    492 }
    493 
    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)){
    498         return status;
    499     }
    500     if(test.run()==FALSE){
    501         fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n");
    502         return -1;
    503     }
    504     return 0;
    505 }
    506