/*
**********************************************************************
-* Copyright (c) 2002-2010,International Business Machines
+* Copyright (c) 2002-2011,International Business Machines
* Corporation and others. All Rights Reserved.
**********************************************************************
**********************************************************************
switch (index) {
TESTCASE(0,DateFmt250);
TESTCASE(1,DateFmt10000);
- TESTCASE(2,DateFmt100000);
+ TESTCASE(2,DateFmt100000);
TESTCASE(3,BreakItWord250);
- TESTCASE(4,BreakItWord10000);
- TESTCASE(5,BreakItChar250);
- TESTCASE(6,BreakItChar10000);
+ TESTCASE(4,BreakItWord10000);
+ TESTCASE(5,BreakItChar250);
+ TESTCASE(6,BreakItChar10000);
TESTCASE(7,NumFmt10000);
TESTCASE(8,NumFmt100000);
TESTCASE(9,Collation10000);
cout << "ICU version - " << U_ICU_VERSION << endl;
UErrorCode status = U_ZERO_ERROR;
+#define FUNCTION_COUNT 6
// Declare functions
- UPerfFunction *functions[5];
+ UPerfFunction *functions[FUNCTION_COUNT];
+
functions[0] = new DateFmtFunction(40, "en");
functions[1] = new BreakItFunction(10000, true); // breakIterator word
functions[2] = new BreakItFunction(10000, false); // breakIterator char
functions[3] = new NumFmtFunction(100000, "en");
functions[4] = new CollationFunction(400, "en");
-
- // Perform time recording
- double t[5];
- for(int i = 0; i < 5; i++) t[i] = 0;
+ functions[5] = new StdioNumFmtFunction(100000, "en");
- for(int i = 0; i < 10; i++)
- for(int j = 0; j < 5; j++)
- t[j] += (functions[j]->time(1, &status) / 10);
+ // Perform time recording
+ double t[FUNCTION_COUNT];
+ for(int i = 0; i < FUNCTION_COUNT; i++) t[i] = 0;
+
+#define ITER_COUNT 10
+#ifdef U_DEBUG
+ cout << "Doing " << ITER_COUNT << " iterations:" << endl;
+ cout << "__________| Running...\r";
+ cout.flush();
+#endif
+ for(int i = 0; i < ITER_COUNT; i++) {
+#ifdef U_DEBUG
+ cout << '*' << flush;
+#endif
+ for(int j = 0; U_SUCCESS(status)&& j < FUNCTION_COUNT; j++)
+ t[j] += (functions[j]->time(1, &status) / ITER_COUNT);
+ }
+#ifdef U_DEBUG
+ cout << " Done " << endl;
+#endif
+ if(U_SUCCESS(status)) {
- // Output results as .xml
- ofstream out;
- out.open(argv[2]);
+ // Output results as .xml
+ ofstream out;
+ out.open(argv[2]);
- out << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl;
+ out << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl;
- for(int i = 0; i < 5; i++)
- {
- out << " <perfTestResult" << endl;
- out << " test=\"";
- switch(i)
+ for(int i = 0; i < FUNCTION_COUNT; i++)
{
+ out << " <perfTestResult" << endl;
+ out << " test=\"";
+ switch(i)
+ {
case 0: out << "DateFormat"; break;
case 1: out << "BreakIterator Word"; break;
case 2: out << "BreakIterator Char"; break;
case 3: out << "NumbFormat"; break;
case 4: out << "Collation"; break;
+ case 5: out << "StdioNumbFormat"; break;
+ default: out << "Unknown " << i; break;
+ }
+ out << "\"" << endl;
+ out << " iterations=\"" << functions[i]->getOperationsPerIteration() << "\"" << endl;
+ out << " time=\"" << t[i] << "\" />" << endl;
}
- out << "\"" << endl;
- int iter = 10000;
- if(i > 2) iter = 100000;
- out << " iterations=\"" << iter << "\"" << endl;
- out << " time=\"" << t[i] << "\" />" << endl;
+ out << "</perfTestResults>" << endl;
+ out.close();
+ cout << " Wrote to " << argv[2] << endl;
+ }
+
+ if(U_FAILURE(status)) {
+ cout << "Error! " << u_errorName(status) << endl;
+ return 1;
}
- out << "</perfTestResults>" << endl;
- out.close();
return 0;
}
cout << "done!" << endl;
return 0;
-}
\ No newline at end of file
+}