| Index: icu46/source/test/perf/ustrperf/stringperf.cpp
|
| ===================================================================
|
| --- icu46/source/test/perf/ustrperf/stringperf.cpp (revision 0)
|
| +++ icu46/source/test/perf/ustrperf/stringperf.cpp (revision 0)
|
| @@ -0,0 +1,377 @@
|
| +/********************************************************************
|
| + * COPYRIGHT:
|
| + * Copyright (C) 2002-2006 International Business Machines Corporation
|
| + * and others. All Rights Reserved.
|
| + *
|
| + ********************************************************************/
|
| +/*****************************************************************************
|
| +* File stringperf.cpp
|
| +*
|
| +* Modification History:
|
| +* Name Description
|
| +* Doug Wang Second version
|
| +* Doug Wang First Version
|
| +******************************************************************************
|
| +*/
|
| +
|
| +/**
|
| + * This program tests UnicodeString performance.
|
| + * APIs tested: UnicodeString
|
| + * ICU4C
|
| + * Windows 2000/XP, Linux
|
| + */
|
| +
|
| +#include "stringperf.h"
|
| +
|
| +
|
| +int main(int argc, const char *argv[])
|
| +{
|
| + UErrorCode status = U_ZERO_ERROR;
|
| +
|
| + bCatenatePrealloc=TRUE;
|
| +
|
| + StringPerformanceTest test(argc, argv, status);
|
| + if (U_FAILURE(status)){
|
| + return status;
|
| + }
|
| +
|
| + int loops = LOOPS;
|
| + 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();
|
| + }
|
| +
|
| + if (test.run() == FALSE){
|
| + fprintf(stderr, "FAILED: Tests could not be run please check the "
|
| + "arguments.\n");
|
| + return -1;
|
| + }
|
| +
|
| + delete catICU;
|
| + delete catStd;
|
| + return 0;
|
| +}
|
| +
|
| +StringPerformanceTest::StringPerformanceTest(int32_t argc, const char *argv[],
|
| + UErrorCode &status)
|
| + : UPerfTest(argc, argv, status)
|
| +{
|
| + filelines_=NULL;
|
| + StrBuffer=NULL;
|
| + StrBufferLen=0;
|
| +
|
| + int32_t len =0;
|
| +
|
| + if (status== U_ILLEGAL_ARGUMENT_ERROR){
|
| + //fprintf(stderr,gUsageString, "stringperf");
|
| + return;
|
| + }
|
| + if (U_FAILURE(status)){
|
| + fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n",
|
| + u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| +
|
| + if(line_mode){
|
| + ULine* filelines = getLines(status);
|
| + if(U_FAILURE(status)){
|
| + fprintf(stderr, "FAILED to read lines from file and create UPerfTest object. Error: %s\n", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| + filelines_ = new ULine[numLines];
|
| + for (int i =0; i < numLines; i++) {
|
| + len = filelines[i].len;
|
| + filelines_[i].name = new UChar[len];
|
| + filelines_[i].len = len;
|
| + memcpy(filelines_[i].name, filelines[i].name, len * U_SIZEOF_UCHAR);
|
| + }
|
| +
|
| + }else if(bulk_mode){
|
| + int32_t srcLen = 0;
|
| + const UChar* src = getBuffer(srcLen,status);
|
| + if(U_FAILURE(status)){
|
| + fprintf(stderr, "FAILED to read buffer from file and create UPerfTest object. Error: %s\n", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| + StrBuffer = new UChar[srcLen];
|
| + StrBufferLen = srcLen;
|
| + memcpy(StrBuffer, src, srcLen * U_SIZEOF_UCHAR);
|
| +
|
| + }
|
| +}
|
| +
|
| +StringPerformanceTest::~StringPerformanceTest()
|
| +{
|
| + delete[] filelines_;
|
| + delete[] StrBuffer;
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::runIndexedTest(int32_t index, UBool exec,
|
| + const char *&name,
|
| + char* par)
|
| +{
|
| + switch (index) {
|
| + TESTCASE(0, TestCtor);
|
| + TESTCASE(1, TestCtor1);
|
| + TESTCASE(2, TestCtor2);
|
| + TESTCASE(3, TestCtor3);
|
| + TESTCASE(4, TestAssign);
|
| + TESTCASE(5, TestAssign1);
|
| + TESTCASE(6, TestAssign2);
|
| + TESTCASE(7, TestGetch);
|
| + TESTCASE(8, TestCatenate);
|
| + TESTCASE(9, TestScan);
|
| + TESTCASE(10, TestScan1);
|
| + TESTCASE(11, TestScan2);
|
| +
|
| + TESTCASE(12, TestStdLibCtor);
|
| + TESTCASE(13, TestStdLibCtor1);
|
| + TESTCASE(14, TestStdLibCtor2);
|
| + TESTCASE(15, TestStdLibCtor3);
|
| + TESTCASE(16, TestStdLibAssign);
|
| + TESTCASE(17, TestStdLibAssign1);
|
| + TESTCASE(18, TestStdLibAssign2);
|
| + TESTCASE(19, TestStdLibGetch);
|
| + TESTCASE(20, TestStdLibCatenate);
|
| + TESTCASE(21, TestStdLibScan);
|
| + TESTCASE(22, TestStdLibScan1);
|
| + TESTCASE(23, TestStdLibScan2);
|
| +
|
| + default:
|
| + name = "";
|
| + return NULL;
|
| + }
|
| + return NULL;
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestCtor()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(ctor, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(ctor, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestCtor1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(ctor1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(ctor1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestCtor2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(ctor2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(ctor2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestCtor3()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(ctor3, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(ctor3, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestAssign()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(assign, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(assign, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestAssign1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(assign1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(assign1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestAssign2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(assign2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(assign2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestGetch()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(getch, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(getch, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestCatenate()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(catenate, filelines_, numLines, uselen);
|
| + } else {
|
| + //return new StringPerfFunction(catenate, buffer, bufferLen, uselen);
|
| + return new StringPerfFunction(catenate, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestScan()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(scan, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(scan, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestScan1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(scan1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(scan1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestScan2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(scan2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(scan2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibCtor()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibCtor, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibCtor, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibCtor1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibCtor1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibCtor1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibCtor2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibCtor2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibCtor2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibCtor3()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibCtor3, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibCtor3, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibAssign()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibAssign, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibAssign, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibAssign1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibAssign1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibAssign1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibAssign2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibAssign2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibAssign2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibGetch()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibGetch, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibGetch, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibCatenate()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibCatenate, filelines_, numLines, uselen);
|
| + } else {
|
| + //return new StringPerfFunction(StdLibCatenate, buffer, bufferLen, uselen);
|
| + return new StringPerfFunction(StdLibCatenate, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibScan()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibScan, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibScan, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibScan1()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibScan1, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibScan1, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +UPerfFunction* StringPerformanceTest::TestStdLibScan2()
|
| +{
|
| + if (line_mode) {
|
| + return new StringPerfFunction(StdLibScan2, filelines_, numLines, uselen);
|
| + } else {
|
| + return new StringPerfFunction(StdLibScan2, StrBuffer, StrBufferLen, uselen);
|
| + }
|
| +}
|
| +
|
| +
|
|
|
| Property changes on: icu46/source/test/perf/ustrperf/stringperf.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|