DateFmtPerf.cpp revision 27f654740f2a26ad62a5c155af9199af9e69b889
127f654740f2a26ad62a5c155af9199af9e69b889claireho/* 227f654740f2a26ad62a5c155af9199af9e69b889claireho********************************************************************** 327f654740f2a26ad62a5c155af9199af9e69b889claireho* Copyright (c) 2002-2010,International Business Machines 427f654740f2a26ad62a5c155af9199af9e69b889claireho* Corporation and others. All Rights Reserved. 527f654740f2a26ad62a5c155af9199af9e69b889claireho********************************************************************** 627f654740f2a26ad62a5c155af9199af9e69b889claireho********************************************************************** 727f654740f2a26ad62a5c155af9199af9e69b889claireho*/ 827f654740f2a26ad62a5c155af9199af9e69b889claireho 927f654740f2a26ad62a5c155af9199af9e69b889claireho#include "DateFmtPerf.h" 1027f654740f2a26ad62a5c155af9199af9e69b889claireho#include "uoptions.h" 1127f654740f2a26ad62a5c155af9199af9e69b889claireho#include <stdio.h> 1227f654740f2a26ad62a5c155af9199af9e69b889claireho#include <fstream> 1327f654740f2a26ad62a5c155af9199af9e69b889claireho 1427f654740f2a26ad62a5c155af9199af9e69b889claireho#include <iostream> 1527f654740f2a26ad62a5c155af9199af9e69b889clairehousing namespace std; 1627f654740f2a26ad62a5c155af9199af9e69b889claireho 1727f654740f2a26ad62a5c155af9199af9e69b889clairehoDateFormatPerfTest::DateFormatPerfTest(int32_t argc, const char* argv[], UErrorCode& status) 1827f654740f2a26ad62a5c155af9199af9e69b889claireho: UPerfTest(argc,argv,status) { 1927f654740f2a26ad62a5c155af9199af9e69b889claireho 2027f654740f2a26ad62a5c155af9199af9e69b889claireho if (locale == NULL){ 2127f654740f2a26ad62a5c155af9199af9e69b889claireho locale = "en_US"; // set default locale 2227f654740f2a26ad62a5c155af9199af9e69b889claireho } 2327f654740f2a26ad62a5c155af9199af9e69b889claireho} 2427f654740f2a26ad62a5c155af9199af9e69b889claireho 2527f654740f2a26ad62a5c155af9199af9e69b889clairehoDateFormatPerfTest::~DateFormatPerfTest() 2627f654740f2a26ad62a5c155af9199af9e69b889claireho{ 2727f654740f2a26ad62a5c155af9199af9e69b889claireho} 2827f654740f2a26ad62a5c155af9199af9e69b889claireho 2927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::runIndexedTest(int32_t index, UBool exec,const char* &name, char* par) { 3027f654740f2a26ad62a5c155af9199af9e69b889claireho 3127f654740f2a26ad62a5c155af9199af9e69b889claireho //exec = true; 3227f654740f2a26ad62a5c155af9199af9e69b889claireho 3327f654740f2a26ad62a5c155af9199af9e69b889claireho switch (index) { 3427f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(0,DateFmt250); 3527f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(1,DateFmt10000); 3627f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(2,DateFmt100000); 3727f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(3,BreakItWord250); 3827f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(4,BreakItWord10000); 3927f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(5,BreakItChar250); 4027f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(6,BreakItChar10000); 4127f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(7,NumFmt10000); 4227f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(8,NumFmt100000); 4327f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(9,Collation10000); 4427f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(10,Collation100000); 4527f654740f2a26ad62a5c155af9199af9e69b889claireho 4627f654740f2a26ad62a5c155af9199af9e69b889claireho default: 4727f654740f2a26ad62a5c155af9199af9e69b889claireho name = ""; 4827f654740f2a26ad62a5c155af9199af9e69b889claireho return NULL; 4927f654740f2a26ad62a5c155af9199af9e69b889claireho } 5027f654740f2a26ad62a5c155af9199af9e69b889claireho return NULL; 5127f654740f2a26ad62a5c155af9199af9e69b889claireho} 5227f654740f2a26ad62a5c155af9199af9e69b889claireho 5327f654740f2a26ad62a5c155af9199af9e69b889claireho 5427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::DateFmt250(){ 5527f654740f2a26ad62a5c155af9199af9e69b889claireho DateFmtFunction* func= new DateFmtFunction(1, locale); 5627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 5727f654740f2a26ad62a5c155af9199af9e69b889claireho} 5827f654740f2a26ad62a5c155af9199af9e69b889claireho 5927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::DateFmt10000(){ 6027f654740f2a26ad62a5c155af9199af9e69b889claireho DateFmtFunction* func= new DateFmtFunction(40, locale); 6127f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 6227f654740f2a26ad62a5c155af9199af9e69b889claireho} 6327f654740f2a26ad62a5c155af9199af9e69b889claireho 6427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::DateFmt100000(){ 6527f654740f2a26ad62a5c155af9199af9e69b889claireho DateFmtFunction* func= new DateFmtFunction(400, locale); 6627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 6727f654740f2a26ad62a5c155af9199af9e69b889claireho} 6827f654740f2a26ad62a5c155af9199af9e69b889claireho 6927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::BreakItWord250(){ 7027f654740f2a26ad62a5c155af9199af9e69b889claireho BreakItFunction* func= new BreakItFunction(250, true); 7127f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 7227f654740f2a26ad62a5c155af9199af9e69b889claireho} 7327f654740f2a26ad62a5c155af9199af9e69b889claireho 7427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::BreakItWord10000(){ 7527f654740f2a26ad62a5c155af9199af9e69b889claireho BreakItFunction* func= new BreakItFunction(10000, true); 7627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 7727f654740f2a26ad62a5c155af9199af9e69b889claireho} 7827f654740f2a26ad62a5c155af9199af9e69b889claireho 7927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::BreakItChar250(){ 8027f654740f2a26ad62a5c155af9199af9e69b889claireho BreakItFunction* func= new BreakItFunction(250, false); 8127f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 8227f654740f2a26ad62a5c155af9199af9e69b889claireho} 8327f654740f2a26ad62a5c155af9199af9e69b889claireho 8427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::BreakItChar10000(){ 8527f654740f2a26ad62a5c155af9199af9e69b889claireho BreakItFunction* func= new BreakItFunction(10000, false); 8627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 8727f654740f2a26ad62a5c155af9199af9e69b889claireho} 8827f654740f2a26ad62a5c155af9199af9e69b889claireho 8927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::NumFmt10000(){ 9027f654740f2a26ad62a5c155af9199af9e69b889claireho NumFmtFunction* func= new NumFmtFunction(10000, locale); 9127f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 9227f654740f2a26ad62a5c155af9199af9e69b889claireho} 9327f654740f2a26ad62a5c155af9199af9e69b889claireho 9427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::NumFmt100000(){ 9527f654740f2a26ad62a5c155af9199af9e69b889claireho NumFmtFunction* func= new NumFmtFunction(100000, locale); 9627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 9727f654740f2a26ad62a5c155af9199af9e69b889claireho} 9827f654740f2a26ad62a5c155af9199af9e69b889claireho 9927f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::Collation10000(){ 10027f654740f2a26ad62a5c155af9199af9e69b889claireho CollationFunction* func= new CollationFunction(40, locale); 10127f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 10227f654740f2a26ad62a5c155af9199af9e69b889claireho} 10327f654740f2a26ad62a5c155af9199af9e69b889claireho 10427f654740f2a26ad62a5c155af9199af9e69b889clairehoUPerfFunction* DateFormatPerfTest::Collation100000(){ 10527f654740f2a26ad62a5c155af9199af9e69b889claireho CollationFunction* func= new CollationFunction(400, locale); 10627f654740f2a26ad62a5c155af9199af9e69b889claireho return func; 10727f654740f2a26ad62a5c155af9199af9e69b889claireho} 10827f654740f2a26ad62a5c155af9199af9e69b889claireho 10927f654740f2a26ad62a5c155af9199af9e69b889claireho 11027f654740f2a26ad62a5c155af9199af9e69b889claireho 11127f654740f2a26ad62a5c155af9199af9e69b889clairehoint main(int argc, const char* argv[]){ 11227f654740f2a26ad62a5c155af9199af9e69b889claireho 11327f654740f2a26ad62a5c155af9199af9e69b889claireho // -x Filename.xml 11427f654740f2a26ad62a5c155af9199af9e69b889claireho if((argc>1)&&(strcmp(argv[1],"-x") == 0)) 11527f654740f2a26ad62a5c155af9199af9e69b889claireho { 11627f654740f2a26ad62a5c155af9199af9e69b889claireho if(argc < 3) { 11727f654740f2a26ad62a5c155af9199af9e69b889claireho fprintf(stderr, "Usage: %s -x <outfile>.xml\n", argv[0]); 11827f654740f2a26ad62a5c155af9199af9e69b889claireho return 1; 11927f654740f2a26ad62a5c155af9199af9e69b889claireho // not enough arguments 12027f654740f2a26ad62a5c155af9199af9e69b889claireho } 12127f654740f2a26ad62a5c155af9199af9e69b889claireho 12227f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "ICU version - " << U_ICU_VERSION << endl; 12327f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 12427f654740f2a26ad62a5c155af9199af9e69b889claireho 12527f654740f2a26ad62a5c155af9199af9e69b889claireho // Declare functions 12627f654740f2a26ad62a5c155af9199af9e69b889claireho UPerfFunction *functions[5]; 12727f654740f2a26ad62a5c155af9199af9e69b889claireho functions[0] = new DateFmtFunction(40, "en"); 12827f654740f2a26ad62a5c155af9199af9e69b889claireho functions[1] = new BreakItFunction(10000, true); // breakIterator word 12927f654740f2a26ad62a5c155af9199af9e69b889claireho functions[2] = new BreakItFunction(10000, false); // breakIterator char 13027f654740f2a26ad62a5c155af9199af9e69b889claireho functions[3] = new NumFmtFunction(100000, "en"); 13127f654740f2a26ad62a5c155af9199af9e69b889claireho functions[4] = new CollationFunction(400, "en"); 13227f654740f2a26ad62a5c155af9199af9e69b889claireho 13327f654740f2a26ad62a5c155af9199af9e69b889claireho // Perform time recording 13427f654740f2a26ad62a5c155af9199af9e69b889claireho double t[5]; 13527f654740f2a26ad62a5c155af9199af9e69b889claireho for(int i = 0; i < 5; i++) t[i] = 0; 13627f654740f2a26ad62a5c155af9199af9e69b889claireho 13727f654740f2a26ad62a5c155af9199af9e69b889claireho for(int i = 0; i < 10; i++) 13827f654740f2a26ad62a5c155af9199af9e69b889claireho for(int j = 0; j < 5; j++) 13927f654740f2a26ad62a5c155af9199af9e69b889claireho t[j] += (functions[j]->time(1, &status) / 10); 14027f654740f2a26ad62a5c155af9199af9e69b889claireho 14127f654740f2a26ad62a5c155af9199af9e69b889claireho 14227f654740f2a26ad62a5c155af9199af9e69b889claireho // Output results as .xml 14327f654740f2a26ad62a5c155af9199af9e69b889claireho ofstream out; 14427f654740f2a26ad62a5c155af9199af9e69b889claireho out.open(argv[2]); 14527f654740f2a26ad62a5c155af9199af9e69b889claireho 14627f654740f2a26ad62a5c155af9199af9e69b889claireho out << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl; 14727f654740f2a26ad62a5c155af9199af9e69b889claireho 14827f654740f2a26ad62a5c155af9199af9e69b889claireho for(int i = 0; i < 5; i++) 14927f654740f2a26ad62a5c155af9199af9e69b889claireho { 15027f654740f2a26ad62a5c155af9199af9e69b889claireho out << " <perfTestResult" << endl; 15127f654740f2a26ad62a5c155af9199af9e69b889claireho out << " test=\""; 15227f654740f2a26ad62a5c155af9199af9e69b889claireho switch(i) 15327f654740f2a26ad62a5c155af9199af9e69b889claireho { 15427f654740f2a26ad62a5c155af9199af9e69b889claireho case 0: out << "DateFormat"; break; 15527f654740f2a26ad62a5c155af9199af9e69b889claireho case 1: out << "BreakIterator Word"; break; 15627f654740f2a26ad62a5c155af9199af9e69b889claireho case 2: out << "BreakIterator Char"; break; 15727f654740f2a26ad62a5c155af9199af9e69b889claireho case 3: out << "NumbFormat"; break; 15827f654740f2a26ad62a5c155af9199af9e69b889claireho case 4: out << "Collation"; break; 15927f654740f2a26ad62a5c155af9199af9e69b889claireho } 16027f654740f2a26ad62a5c155af9199af9e69b889claireho out << "\"" << endl; 16127f654740f2a26ad62a5c155af9199af9e69b889claireho int iter = 10000; 16227f654740f2a26ad62a5c155af9199af9e69b889claireho if(i > 2) iter = 100000; 16327f654740f2a26ad62a5c155af9199af9e69b889claireho out << " iterations=\"" << iter << "\"" << endl; 16427f654740f2a26ad62a5c155af9199af9e69b889claireho out << " time=\"" << t[i] << "\" />" << endl; 16527f654740f2a26ad62a5c155af9199af9e69b889claireho } 16627f654740f2a26ad62a5c155af9199af9e69b889claireho out << "</perfTestResults>" << endl; 16727f654740f2a26ad62a5c155af9199af9e69b889claireho out.close(); 16827f654740f2a26ad62a5c155af9199af9e69b889claireho 16927f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 17027f654740f2a26ad62a5c155af9199af9e69b889claireho } 17127f654740f2a26ad62a5c155af9199af9e69b889claireho 17227f654740f2a26ad62a5c155af9199af9e69b889claireho 17327f654740f2a26ad62a5c155af9199af9e69b889claireho // Normal performance test mode 17427f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 17527f654740f2a26ad62a5c155af9199af9e69b889claireho 17627f654740f2a26ad62a5c155af9199af9e69b889claireho DateFormatPerfTest test(argc, argv, status); 17727f654740f2a26ad62a5c155af9199af9e69b889claireho 17827f654740f2a26ad62a5c155af9199af9e69b889claireho 17927f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)){ // ERROR HERE!!! 18027f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "initialize failed! " << status << endl; 18127f654740f2a26ad62a5c155af9199af9e69b889claireho return status; 18227f654740f2a26ad62a5c155af9199af9e69b889claireho } 18327f654740f2a26ad62a5c155af9199af9e69b889claireho //cout << "Done initializing!\n" << endl; 18427f654740f2a26ad62a5c155af9199af9e69b889claireho 18527f654740f2a26ad62a5c155af9199af9e69b889claireho if(test.run()==FALSE){ 18627f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "run failed!" << endl; 18727f654740f2a26ad62a5c155af9199af9e69b889claireho fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); 18827f654740f2a26ad62a5c155af9199af9e69b889claireho return -1; 18927f654740f2a26ad62a5c155af9199af9e69b889claireho } 19027f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "done!" << endl; 19127f654740f2a26ad62a5c155af9199af9e69b889claireho 19227f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 19327f654740f2a26ad62a5c155af9199af9e69b889claireho}