]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/perf/ustrperf/stringperf.cpp
ICU-6.2.4.tar.gz
[apple/icu.git] / icuSources / test / perf / ustrperf / stringperf.cpp
diff --git a/icuSources/test/perf/ustrperf/stringperf.cpp b/icuSources/test/perf/ustrperf/stringperf.cpp
new file mode 100644 (file)
index 0000000..653e1a0
--- /dev/null
@@ -0,0 +1,375 @@
+/********************************************************************
+ * COPYRIGHT:
+ * Copyright (C) 2002-2004 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);
+       }
+}
\ No newline at end of file