185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho/* 285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ********************************************************************** 385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Copyright (C) 2002-2008, International Business Machines 485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Corporation and others. All Rights Reserved. 585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ********************************************************************** 685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * file name: utrie2perf.cpp 785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * encoding: US-ASCII 885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * tab size: 8 (not used) 985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * indentation:4 1085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 1185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * created on: 2008sep07 1285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * created by: Markus W. Scherer 1385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * 1485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * Performance test program for UTrie2. 1585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho */ 1685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 1785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdio.h> 1885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include <stdlib.h> 1985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/uchar.h" 2085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/unorm.h" 2185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "unicode/uperf.h" 2285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#include "uoptions.h" 2385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 2585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 2685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 2785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Left over from when icu/branches/markus/utf8 could use both old UTrie 2885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// and new UTrie2, switched with #if in unorm.cpp and ubidi_props.c. 2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Comparative benchmarks were done in that branch on revision r24630 3085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// and earlier. 3185bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_CAPI void U_EXPORT2 3285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hounorm_initUTrie2(UErrorCode *pErrorCode); 3385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 3485bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_CAPI void U_EXPORT2 3585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Houbidi_initUTrie2(UErrorCode *pErrorCode); 3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 3885bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_NAMESPACE_BEGIN 3985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass UnicodeSet; 4185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4285bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_NAMESPACE_END 4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Test object. 4585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass UTrie2PerfTest : public UPerfTest { 4685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 4785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UTrie2PerfTest(int32_t argc, const char *argv[], UErrorCode &status) 4885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho : UPerfTest(argc, argv, NULL, 0, "", status), 4985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utf8(NULL), utf8Length(0), countInputCodePoints(0) { 5085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (U_SUCCESS(status)) { 5185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 // See comment at unorm_initUTrie2() forward declaration. 5285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho unorm_initUTrie2(&status); 5385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ubidi_initUTrie2(&status); 5485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 5585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t inputLength; 5685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UPerfTest::getBuffer(inputLength, status); 5785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_SUCCESS(status) && inputLength>0) { 5885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho countInputCodePoints = u_countChar32(buffer, bufferLen); 5985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 6085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Preflight the UTF-8 length and allocate utf8. 6185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_strToUTF8(NULL, 0, &utf8Length, buffer, bufferLen, &status); 6285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(status==U_BUFFER_OVERFLOW_ERROR) { 6385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho utf8=(char *)malloc(utf8Length); 6485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(utf8!=NULL) { 6585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status=U_ZERO_ERROR; 6685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_strToUTF8(utf8, utf8Length, NULL, buffer, bufferLen, &status); 6785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } else { 6885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status=U_MEMORY_ALLOCATION_ERROR; 6985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 7285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(verbose) { 7385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho printf("code points:%ld len16:%ld len8:%ld " 7485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "B/cp:%.3g\n", 7585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (long)countInputCodePoints, (long)bufferLen, (long)utf8Length, 7685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho (double)utf8Length/countInputCodePoints); 7785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 7985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 8085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 8185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL); 8385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UChar *getBuffer() const { return buffer; } 8585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t getBufferLen() const { return bufferLen; } 8685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 8785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho char *utf8; 8885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t utf8Length; 8985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Number of code points in the input text. 9185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t countInputCodePoints; 9285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 9385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho// Performance test function object. 9585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass Command : public UPerfFunction { 9685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 9785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho Command(const UTrie2PerfTest &testcase) : testcase(testcase) {} 9885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 9985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 10085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual ~Command() {} 10185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // virtual void call(UErrorCode* pErrorCode) { ... } 10385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual long getOperationsPerIteration() { 10585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Number of code points tested. 10685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return testcase.countInputCodePoints; 10785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 10885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 10985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // virtual long getEventsPerIteration(); 11085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 11185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UTrie2PerfTest &testcase; 11285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UNormalizationCheckResult qcResult; 11385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 11585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass CheckFCD : public Command { 11685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 11785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho CheckFCD(const UTrie2PerfTest &testcase) : Command(testcase) {} 11885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 11985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UPerfFunction* get(const UTrie2PerfTest &testcase) { 12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return new CheckFCD(testcase); 12185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 12285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* pErrorCode) { 12385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode errorCode=U_ZERO_ERROR; 12485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho qcResult=unorm_quickCheck(testcase.getBuffer(), testcase.getBufferLen(), 12585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UNORM_FCD, &errorCode); 12685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(errorCode)) { 12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "error: unorm_quickCheck(UNORM_FCD) failed: %s\n", 12885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_errorName(errorCode)); 12985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 // See comment at unorm_initUTrie2() forward declaration. 13485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 13585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass CheckFCDAlwaysGet : public Command { 13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 13785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho CheckFCDAlwaysGet(const UTrie2PerfTest &testcase) : Command(testcase) {} 13885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 13985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UPerfFunction* get(const UTrie2PerfTest &testcase) { 14085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return new CheckFCDAlwaysGet(testcase); 14185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 14285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* pErrorCode) { 14385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode errorCode=U_ZERO_ERROR; 14485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho qcResult=unorm_quickCheck(testcase.getBuffer(), testcase.getBufferLen(), 14585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UNORM_FCD_ALWAYS_GET, &errorCode); 14685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(errorCode)) { 14785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "error: unorm_quickCheck(UNORM_FCD) failed: %s\n", 14885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_errorName(errorCode)); 14985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 15285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15385bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoU_CAPI UBool U_EXPORT2 15485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hounorm_checkFCDUTF8(const uint8_t *src, int32_t srcLength, const UnicodeSet *nx); 15585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass CheckFCDUTF8 : public Command { 15785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 15885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho CheckFCDUTF8(const UTrie2PerfTest &testcase) : Command(testcase) {} 15985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 16085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UPerfFunction* get(const UTrie2PerfTest &testcase) { 16185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return new CheckFCDUTF8(testcase); 16285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 16385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* pErrorCode) { 16485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UBool isFCD=unorm_checkFCDUTF8((const uint8_t *)testcase.utf8, testcase.utf8Length, NULL); 16585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(isFCD>1) { 16685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "error: bogus result from unorm_checkFCDUTF8()\n"); 16785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 16885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 17085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 17285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 17385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass ToNFC : public Command { 17485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 17585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ToNFC(const UTrie2PerfTest &testcase) : Command(testcase) { 17685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode errorCode=U_ZERO_ERROR; 17785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho destCapacity=unorm_normalize(testcase.getBuffer(), testcase.getBufferLen(), 17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UNORM_NFC, 0, 17985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho NULL, 0, 18085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho &errorCode); 18185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dest=new UChar[destCapacity]; 18285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 18385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho ~ToNFC() { 18485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho delete [] dest; 18585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 18685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 18785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UPerfFunction* get(const UTrie2PerfTest &testcase) { 18885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return new ToNFC(testcase); 18985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 19085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* pErrorCode) { 19185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode errorCode=U_ZERO_ERROR; 19285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t destLength=unorm_normalize(testcase.getBuffer(), testcase.getBufferLen(), 19385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UNORM_NFC, 0, 19485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho dest, destCapacity, 19585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho &errorCode); 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(errorCode) || destLength!=destCapacity) { 19785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "error: unorm_normalize(UNORM_NFC) failed: %s\n", 19885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho u_errorName(errorCode)); 19985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 20185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprivate: 20385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar *dest; 20485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t destCapacity; 20585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 20685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 20785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoclass GetBiDiClass : public Command { 20885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoprotected: 20985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho GetBiDiClass(const UTrie2PerfTest &testcase) : Command(testcase) {} 21085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hopublic: 21185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho static UPerfFunction* get(const UTrie2PerfTest &testcase) { 21285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return new GetBiDiClass(testcase); 21385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 21485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho virtual void call(UErrorCode* pErrorCode) { 21585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho const UChar *buffer=testcase.getBuffer(); 21685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t length=testcase.getBufferLen(); 21785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UChar32 c; 21885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho int32_t i; 21985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho uint32_t bitSet=0; 22085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho for(i=0; i<length;) { 22185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho U16_NEXT(buffer, i, length, c); 22285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho bitSet|=(uint32_t)1<<u_charDirection(c); 22385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 22485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(length>0 && bitSet==0) { 22585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "error: GetBiDiClass() did not collect bits\n"); 22685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 22785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 22885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}; 22985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 23085bf2e2fbc60a9f938064abc8127d61da7d19882Claire HoUPerfFunction* UTrie2PerfTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* par) { 23185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho switch (index) { 23285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case 0: name = "CheckFCD"; if (exec) return CheckFCD::get(*this); break; 23385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case 1: name = "ToNFC"; if (exec) return ToNFC::get(*this); break; 23485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case 2: name = "GetBiDiClass"; if (exec) return GetBiDiClass::get(*this); break; 23585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#if 0 // See comment at unorm_initUTrie2() forward declaration. 23685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case 3: name = "CheckFCDAlwaysGet"; if (exec) return CheckFCDAlwaysGet::get(*this); break; 23785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho case 4: name = "CheckFCDUTF8"; if (exec) return CheckFCDUTF8::get(*this); break; 23885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho#endif 23985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho default: name = ""; break; 24085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 24185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return NULL; 24285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 24385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 24485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hoint main(int argc, const char *argv[]) { 24585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UErrorCode status = U_ZERO_ERROR; 24685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UTrie2PerfTest test(argc, argv, status); 24785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 24885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (U_FAILURE(status)){ 24985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho printf("The error is %s\n", u_errorName(status)); 25085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho test.usage(); 25185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return status; 25285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 25385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 25485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (test.run() == FALSE){ 25585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho fprintf(stderr, "FAILED: Tests could not be run please check the " 25685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho "arguments.\n"); 25785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return -1; 25885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 25985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 26085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return 0; 26185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho} 262