| Index: source/test/perf/ustrperf/stringperf.h
|
| diff --git a/source/test/perf/ustrperf/stringperf.h b/source/test/perf/ustrperf/stringperf.h
|
| deleted file mode 100644
|
| index 35f30c27c322506f4a30e04b9c58f29db5e78ed4..0000000000000000000000000000000000000000
|
| --- a/source/test/perf/ustrperf/stringperf.h
|
| +++ /dev/null
|
| @@ -1,551 +0,0 @@
|
| -/*
|
| -**********************************************************************
|
| -* Copyright (c) 2002-2011, International Business Machines
|
| -* Corporation and others. All Rights Reserved.
|
| -**********************************************************************
|
| -*/
|
| -#ifndef _STRINGPERF_H
|
| -#define _STRINGPERF_H
|
| -
|
| -#include "unicode/utypes.h"
|
| -#include "unicode/unistr.h"
|
| -
|
| -#include "unicode/uperf.h"
|
| -
|
| -#include <string.h>
|
| -#include <stdio.h>
|
| -#include <stdlib.h>
|
| -
|
| -typedef std::wstring stlstring;
|
| -
|
| -/* Define all constants for test case operations */
|
| -#define MAXNUMLINES 40000 //Max number of lines in a test data file
|
| -#define MAXSRCLEN 20 //Max length of one line. maybe a larger number, but it need more mem
|
| -#define LOOPS 100 //Iterations
|
| -//#define LOOPS 10
|
| -#define catenate_STRLEN 2
|
| -
|
| -const UChar uTESTCHAR1 = 'a';
|
| -const wchar_t wTESTCHAR1 = 'a';
|
| -const UnicodeString uEMPTY;
|
| -const stlstring sEMPTY;
|
| -UnicodeString unistr;
|
| -stlstring stlstr;
|
| -// Simulate construction with a single-char string for basic_string
|
| -wchar_t simulate[2]={wTESTCHAR1, 0};
|
| -
|
| -/* Constants for scan operation */
|
| -U_STRING_DECL(scan_STRING, "Dot. 123. Some more data.", 25);
|
| -const UnicodeString uScan_STRING=UnicodeString(scan_STRING);
|
| -const stlstring sScan_STRING=stlstring(L"Dot. 123. Some more data.");
|
| -
|
| -/* global variables or constants for concatenation operation */
|
| -U_STRING_DECL(uCatenate_STR, "!!", 2);
|
| -const stlstring sCatenate_STR=stlstring(L"!!");
|
| -static UnicodeString* catICU;
|
| -static stlstring* catStd;
|
| -UBool bCatenatePrealloc;
|
| -
|
| -/* type defines */
|
| -typedef struct WLine WLine;
|
| -struct WLine {
|
| - wchar_t name[100];
|
| - int32_t len;
|
| -}; //struct to store one line of wchar_t string
|
| -
|
| -enum FnType { Fn_ICU, Fn_STD };
|
| -typedef FnType FnType;
|
| -typedef void (*ICUStringPerfFn)(const UChar* src,int32_t srcLen, UnicodeString s0);
|
| -typedef void (*StdStringPerfFn)(const wchar_t* src,int32_t srcLen, stlstring s0);
|
| -
|
| -
|
| -class StringPerfFunction : public UPerfFunction
|
| -{
|
| -public:
|
| -
|
| - virtual long getEventsPerIteration(){
|
| - int loops = LOOPS;
|
| - if (catICU) { delete catICU;}
|
| - if (catStd) { delete catStd;}
|
| -
|
| - if (bCatenatePrealloc) {
|
| -
|
| - int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN);
|
| - catICU = new UnicodeString(to_alloc,'a',0);
|
| - //catICU = new UnicodeString();
|
| -
|
| - catStd = new stlstring();
|
| - //catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN));
|
| - catStd -> reserve(110000000);
|
| - } else {
|
| - catICU = new UnicodeString();
|
| - catStd = new stlstring();
|
| - }
|
| -
|
| - return -1;
|
| - }
|
| -
|
| - virtual void call(UErrorCode* status)
|
| - {
|
| - if(line_mode_==TRUE){
|
| - if(uselen_){
|
| - for(int32_t i = 0; i< numLines_; i++){
|
| - if (fnType_==Fn_ICU) {
|
| - (*fn1_)(lines_[i].name,lines_[i].len,uS0_[i]);
|
| - } else {
|
| - (*fn2_)(wlines_[i].name,wlines_[i].len,sS0_[i]);
|
| - }
|
| - }
|
| - }else{
|
| - for(int32_t i = 0; i< numLines_; i++){
|
| - if (fnType_==Fn_ICU) {
|
| - (*fn1_)(lines_[i].name,-1,uS0_[i]);
|
| - } else {
|
| - (*fn2_)(wlines_[i].name,-1,sS0_[i]);
|
| - }
|
| - }
|
| - }
|
| - }else{
|
| - if(uselen_){
|
| - if (fnType_==Fn_ICU) {
|
| - (*fn1_)(src_,srcLen_,*ubulk_);
|
| - } else {
|
| - (*fn2_)(wsrc_,wsrcLen_,*sbulk_);
|
| - }
|
| - }else{
|
| - if (fnType_==Fn_ICU) {
|
| - (*fn1_)(src_,-1,*ubulk_);
|
| - } else {
|
| - (*fn2_)(wsrc_,-1,*sbulk_);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - virtual long getOperationsPerIteration()
|
| - {
|
| - if(line_mode_==TRUE){
|
| - return numLines_;
|
| - }else{
|
| - return 1;
|
| - }
|
| - }
|
| -
|
| - StringPerfFunction(ICUStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen)
|
| - {
|
| -
|
| - fn1_ = func;
|
| - lines_=srcLines;
|
| - wlines_=NULL;
|
| - numLines_=srcNumLines;
|
| - uselen_=uselen;
|
| - line_mode_=TRUE;
|
| - src_ = NULL;
|
| - srcLen_ = 0;
|
| - wsrc_ = NULL;
|
| - wsrcLen_ = 0;
|
| - fnType_ = Fn_ICU;
|
| -
|
| - uS0_=new UnicodeString[numLines_];
|
| - for(int32_t i=0; i<numLines_; i++) {
|
| - uS0_[i]=UnicodeString(lines_[i].name, lines_[i].len);
|
| - }
|
| - sS0_=NULL;
|
| - ubulk_=NULL;
|
| - sbulk_=NULL;
|
| - }
|
| -
|
| - StringPerfFunction(StdStringPerfFn func, ULine* srcLines, int32_t srcNumLines, UBool uselen)
|
| - {
|
| -
|
| - fn2_ = func;
|
| - lines_=srcLines;
|
| - wlines_=NULL;
|
| - numLines_=srcNumLines;
|
| - uselen_=uselen;
|
| - line_mode_=TRUE;
|
| - src_ = NULL;
|
| - srcLen_ = 0;
|
| - wsrc_ = NULL;
|
| - wsrcLen_ = 0;
|
| - fnType_ = Fn_STD;
|
| -
|
| - uS0_=NULL;
|
| - ubulk_=NULL;
|
| - sbulk_=NULL;
|
| -
|
| - //fillin wlines_[], sS0_[]
|
| - prepareLinesForStd();
|
| - }
|
| -
|
| - StringPerfFunction(ICUStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen)
|
| - {
|
| -
|
| - fn1_ = func;
|
| - lines_=NULL;
|
| - wlines_=NULL;
|
| - numLines_=0;
|
| - uselen_=uselen;
|
| - line_mode_=FALSE;
|
| - src_ = new UChar[sourceLen];
|
| - memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR);
|
| - srcLen_ = sourceLen;
|
| - wsrc_ = NULL;
|
| - wsrcLen_ = 0;
|
| - fnType_ = Fn_ICU;
|
| -
|
| - uS0_=NULL;
|
| - sS0_=NULL;
|
| - ubulk_=new UnicodeString(src_,srcLen_);
|
| - sbulk_=NULL;
|
| - }
|
| -
|
| - StringPerfFunction(StdStringPerfFn func, UChar* source, int32_t sourceLen, UBool uselen)
|
| - {
|
| -
|
| - fn2_ = func;
|
| - lines_=NULL;
|
| - wlines_=NULL;
|
| - numLines_=0;
|
| - uselen_=uselen;
|
| - line_mode_=FALSE;
|
| - src_ = new UChar[sourceLen];
|
| - memcpy(src_, source, sourceLen * U_SIZEOF_UCHAR);
|
| - srcLen_ = sourceLen;
|
| - fnType_ = Fn_STD;
|
| -
|
| - uS0_=NULL;
|
| - sS0_=NULL;
|
| - ubulk_=NULL;
|
| -
|
| - //fillin wsrc_, sbulk_
|
| - prepareBulkForStd();
|
| -
|
| - }
|
| -
|
| - ~StringPerfFunction()
|
| - {
|
| - //free(src_);
|
| - free(wsrc_);
|
| - delete[] src_;
|
| - delete ubulk_;
|
| - delete sbulk_;
|
| - delete[] uS0_;
|
| - delete[] sS0_;
|
| - delete[] wlines_;
|
| - }
|
| -
|
| -private:
|
| - void prepareLinesForStd(void)
|
| - {
|
| - UErrorCode err=U_ZERO_ERROR;
|
| -
|
| - wlines_=new WLine[numLines_];
|
| - wchar_t ws[100];
|
| - int32_t wcap = sizeof(ws) / sizeof(*ws);
|
| - int32_t wl;
|
| - wchar_t* wcs;
|
| -
|
| - sS0_=new stlstring[numLines_];
|
| - for(int32_t i=0; i<numLines_; i++) {
|
| - if(uselen_) {
|
| - wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len, &err);
|
| - memcpy(wlines_[i].name, wcs, wl * sizeof(wchar_t));
|
| - wlines_[i].len = wl;
|
| - sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len);
|
| - } else {
|
| - wcs = u_strToWCS(ws, wcap, &wl, lines_[i].name, lines_[i].len-1, &err);
|
| - memcpy(wlines_[i].name, wcs, wl*sizeof(wchar_t));
|
| - wlines_[i].len = wl;
|
| - sS0_[i]=stlstring(wlines_[i].name, wlines_[i].len+1);
|
| - }
|
| -
|
| - if (U_FAILURE(err)) {
|
| - return;
|
| - }
|
| - }
|
| -
|
| - }
|
| -
|
| - void prepareBulkForStd(void)
|
| - {
|
| - UErrorCode err=U_ZERO_ERROR;
|
| -
|
| - const UChar* uSrc = src_;
|
| - int32_t uSrcLen = srcLen_;
|
| - wchar_t* wDest = NULL;
|
| - int32_t wDestLen = 0;
|
| - int32_t reqLen= 0 ;
|
| -
|
| - if(uselen_) {
|
| - /* pre-flight*/
|
| - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err);
|
| -
|
| - if(err == U_BUFFER_OVERFLOW_ERROR){
|
| - err=U_ZERO_ERROR;
|
| - wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen));
|
| - wDestLen = reqLen;
|
| - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen,&err);
|
| - }
|
| -
|
| - if (U_SUCCESS(err)) {
|
| - wsrc_ = wDest;
|
| - wsrcLen_ = wDestLen;
|
| - sbulk_=new stlstring(wsrc_,wsrcLen_);
|
| - }
|
| -
|
| - } else {
|
| - /* pre-flight*/
|
| - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err);
|
| -
|
| - if(err == U_BUFFER_OVERFLOW_ERROR){
|
| - err=U_ZERO_ERROR;
|
| - wDest =(wchar_t*) malloc(sizeof(wchar_t) * (reqLen+1));
|
| - wDestLen = reqLen+1;
|
| - u_strToWCS(wDest,wDestLen,&reqLen,uSrc,uSrcLen-1,&err);
|
| - }
|
| -
|
| - if (U_SUCCESS(err)) {
|
| - wsrc_ = wDest;
|
| - wsrcLen_ = wDestLen;
|
| - sbulk_=new stlstring(wsrc_);
|
| - }
|
| - }
|
| -
|
| - //free(wDest);
|
| - }
|
| -
|
| -
|
| -private:
|
| - ICUStringPerfFn fn1_;
|
| - StdStringPerfFn fn2_;
|
| -
|
| - ULine* lines_;
|
| - WLine* wlines_;
|
| - int32_t numLines_;
|
| -
|
| - UBool uselen_;
|
| - UChar* src_;
|
| - int32_t srcLen_;
|
| - wchar_t* wsrc_;
|
| - int32_t wsrcLen_;
|
| - UBool line_mode_;
|
| -
|
| - //added for preparing testing data
|
| - UnicodeString* uS0_;
|
| - stlstring* sS0_;
|
| - UnicodeString* ubulk_;
|
| - stlstring* sbulk_;
|
| - FnType fnType_;
|
| -};
|
| -
|
| -
|
| -class StringPerformanceTest : public UPerfTest
|
| -{
|
| -public:
|
| - StringPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status);
|
| - ~StringPerformanceTest();
|
| - virtual UPerfFunction* runIndexedTest(int32_t index, UBool exec,
|
| - const char *&name,
|
| - char *par = NULL);
|
| - UPerfFunction* TestCtor();
|
| - UPerfFunction* TestCtor1();
|
| - UPerfFunction* TestCtor2();
|
| - UPerfFunction* TestCtor3();
|
| - UPerfFunction* TestAssign();
|
| - UPerfFunction* TestAssign1();
|
| - UPerfFunction* TestAssign2();
|
| - UPerfFunction* TestGetch();
|
| - UPerfFunction* TestCatenate();
|
| - UPerfFunction* TestScan();
|
| - UPerfFunction* TestScan1();
|
| - UPerfFunction* TestScan2();
|
| -
|
| - UPerfFunction* TestStdLibCtor();
|
| - UPerfFunction* TestStdLibCtor1();
|
| - UPerfFunction* TestStdLibCtor2();
|
| - UPerfFunction* TestStdLibCtor3();
|
| - UPerfFunction* TestStdLibAssign();
|
| - UPerfFunction* TestStdLibAssign1();
|
| - UPerfFunction* TestStdLibAssign2();
|
| - UPerfFunction* TestStdLibGetch();
|
| - UPerfFunction* TestStdLibCatenate();
|
| - UPerfFunction* TestStdLibScan();
|
| - UPerfFunction* TestStdLibScan1();
|
| - UPerfFunction* TestStdLibScan2();
|
| -
|
| -private:
|
| - long COUNT_;
|
| - ULine* filelines_;
|
| - UChar* StrBuffer;
|
| - int32_t StrBufferLen;
|
| -
|
| -};
|
| -
|
| -
|
| -inline void ctor(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UnicodeString a;
|
| -}
|
| -
|
| -inline void ctor1(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UnicodeString b(uTESTCHAR1);
|
| -}
|
| -
|
| -inline void ctor2(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UnicodeString c(uEMPTY);
|
| -}
|
| -
|
| -inline void ctor3(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UnicodeString d(src,srcLen);
|
| -}
|
| -
|
| -inline UnicodeString icu_assign_helper(const UChar* src,int32_t srcLen)
|
| -{
|
| - if (srcLen==-1) { return src;}
|
| - else { return UnicodeString(src, srcLen);}
|
| -}
|
| -
|
| -inline void assign(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - unistr = icu_assign_helper(src,srcLen);
|
| -}
|
| -
|
| -inline void assign1(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - unistr.setTo(src, srcLen);
|
| -}
|
| -
|
| -inline void assign2(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - unistr = s0;
|
| -}
|
| -
|
| -inline void getch(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - s0.charAt(0);
|
| -}
|
| -
|
| -
|
| -inline void catenate(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UTimer mystart, mystop;
|
| - utimer_getTime(&mystart);
|
| -
|
| - *catICU += s0;
|
| -
|
| - utimer_getTime(&mystop);
|
| - double mytime = utimer_getDeltaSeconds(&mystart,&mystop);
|
| - printf("\nmytime=%f \n", mytime);
|
| -
|
| - *catICU += uCatenate_STR;
|
| -}
|
| -
|
| -volatile int scan_idx;
|
| -U_STRING_DECL(SCAN1, "123", 3);
|
| -
|
| -inline void scan(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UChar c='.';
|
| - scan_idx = uScan_STRING.indexOf(c);
|
| -}
|
| -
|
| -inline void scan1(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - scan_idx = uScan_STRING.indexOf(SCAN1,3);
|
| -}
|
| -
|
| -inline void scan2(const UChar* src,int32_t srcLen, UnicodeString s0)
|
| -{
|
| - UChar c1='s';
|
| - UChar c2='m';
|
| - scan_idx = uScan_STRING.indexOf(c1);
|
| - scan_idx = uScan_STRING.indexOf(c2);
|
| -}
|
| -
|
| -
|
| -inline void StdLibCtor(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - stlstring a;
|
| -}
|
| -
|
| -inline void StdLibCtor1(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - stlstring b(simulate);
|
| -}
|
| -
|
| -inline void StdLibCtor2(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - stlstring c(sEMPTY);
|
| -}
|
| -
|
| -inline void StdLibCtor3(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - if (srcLen==-1) {
|
| - stlstring d(src);
|
| - }else {
|
| - stlstring d(src, srcLen);
|
| - }
|
| -}
|
| -
|
| -inline stlstring stl_assign_helper(const wchar_t* src,int32_t srcLen)
|
| -{
|
| - if (srcLen==-1) { return src;}
|
| - else { return stlstring(src, srcLen);}
|
| -}
|
| -
|
| -inline void StdLibAssign(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - stlstr = stl_assign_helper(src,srcLen);
|
| -}
|
| -
|
| -inline void StdLibAssign1(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - if (srcLen==-1) { stlstr=src;}
|
| - else { stlstr.assign(src, srcLen);}
|
| -}
|
| -
|
| -inline void StdLibAssign2(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - stlstr=s0;
|
| -}
|
| -
|
| -inline void StdLibGetch(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - s0.at(0);
|
| -}
|
| -
|
| -inline void StdLibCatenate(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - UTimer mystart, mystop;
|
| - utimer_getTime(&mystart);
|
| -
|
| - *catStd += s0;
|
| - *catStd += sCatenate_STR;
|
| -
|
| - utimer_getTime(&mystop);
|
| - double mytime = utimer_getDeltaSeconds(&mystart,&mystop);
|
| - printf("\nmytime=%f \n", mytime);
|
| -
|
| -}
|
| -
|
| -inline void StdLibScan(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - scan_idx = (int) sScan_STRING.find('.');
|
| -}
|
| -
|
| -inline void StdLibScan1(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - scan_idx = (int) sScan_STRING.find(L"123");
|
| -}
|
| -
|
| -inline void StdLibScan2(const wchar_t* src,int32_t srcLen, stlstring s0)
|
| -{
|
| - scan_idx = (int) sScan_STRING.find_first_of(L"sm");
|
| -}
|
| -
|
| -#endif // STRINGPERF_H
|
| -
|
|
|