127f654740f2a26ad62a5c155af9199af9e69b889claireho/* 227f654740f2a26ad62a5c155af9199af9e69b889claireho********************************************************************** 383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (c) 2002-2011,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); 3683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE(2,DateFmt100000); 3727f654740f2a26ad62a5c155af9199af9e69b889claireho TESTCASE(3,BreakItWord250); 3883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE(4,BreakItWord10000); 3983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius TESTCASE(5,BreakItChar250); 4083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 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 12583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#define FUNCTION_COUNT 6 12627f654740f2a26ad62a5c155af9199af9e69b889claireho // Declare functions 12783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius UPerfFunction *functions[FUNCTION_COUNT]; 12883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 12927f654740f2a26ad62a5c155af9199af9e69b889claireho functions[0] = new DateFmtFunction(40, "en"); 13027f654740f2a26ad62a5c155af9199af9e69b889claireho functions[1] = new BreakItFunction(10000, true); // breakIterator word 13127f654740f2a26ad62a5c155af9199af9e69b889claireho functions[2] = new BreakItFunction(10000, false); // breakIterator char 13227f654740f2a26ad62a5c155af9199af9e69b889claireho functions[3] = new NumFmtFunction(100000, "en"); 13327f654740f2a26ad62a5c155af9199af9e69b889claireho functions[4] = new CollationFunction(400, "en"); 13483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius functions[5] = new StdioNumFmtFunction(100000, "en"); 13527f654740f2a26ad62a5c155af9199af9e69b889claireho 13683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Perform time recording 13783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius double t[FUNCTION_COUNT]; 13883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius for(int i = 0; i < FUNCTION_COUNT; i++) t[i] = 0; 13983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 14083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#define ITER_COUNT 10 14183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifdef U_DEBUG 14283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << "Doing " << ITER_COUNT << " iterations:" << endl; 14383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << "__________| Running...\r"; 14483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout.flush(); 14583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif 14683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius for(int i = 0; i < ITER_COUNT; i++) { 14783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifdef U_DEBUG 14883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << '*' << flush; 14983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif 15083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius for(int j = 0; U_SUCCESS(status)&& j < FUNCTION_COUNT; j++) 15183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius t[j] += (functions[j]->time(1, &status) / ITER_COUNT); 15283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 15383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifdef U_DEBUG 15483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << " Done " << endl; 15583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif 15627f654740f2a26ad62a5c155af9199af9e69b889claireho 15783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(U_SUCCESS(status)) { 15827f654740f2a26ad62a5c155af9199af9e69b889claireho 15983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius // Output results as .xml 16083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius ofstream out; 16183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out.open(argv[2]); 16227f654740f2a26ad62a5c155af9199af9e69b889claireho 16383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl; 16427f654740f2a26ad62a5c155af9199af9e69b889claireho 16583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius for(int i = 0; i < FUNCTION_COUNT; i++) 16627f654740f2a26ad62a5c155af9199af9e69b889claireho { 16783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << " <perfTestResult" << endl; 16883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << " test=\""; 16983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius switch(i) 17083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius { 17127f654740f2a26ad62a5c155af9199af9e69b889claireho case 0: out << "DateFormat"; break; 17227f654740f2a26ad62a5c155af9199af9e69b889claireho case 1: out << "BreakIterator Word"; break; 17327f654740f2a26ad62a5c155af9199af9e69b889claireho case 2: out << "BreakIterator Char"; break; 17427f654740f2a26ad62a5c155af9199af9e69b889claireho case 3: out << "NumbFormat"; break; 17527f654740f2a26ad62a5c155af9199af9e69b889claireho case 4: out << "Collation"; break; 17683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius case 5: out << "StdioNumbFormat"; break; 17783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius default: out << "Unknown " << i; break; 17883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 17983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << "\"" << endl; 18083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << " iterations=\"" << functions[i]->getOperationsPerIteration() << "\"" << endl; 18183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << " time=\"" << t[i] << "\" />" << endl; 18227f654740f2a26ad62a5c155af9199af9e69b889claireho } 18383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out << "</perfTestResults>" << endl; 18483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius out.close(); 18583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << " Wrote to " << argv[2] << endl; 18683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius } 18783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius 18883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius if(U_FAILURE(status)) { 18983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius cout << "Error! " << u_errorName(status) << endl; 19083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius return 1; 19127f654740f2a26ad62a5c155af9199af9e69b889claireho } 19227f654740f2a26ad62a5c155af9199af9e69b889claireho 19327f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 19427f654740f2a26ad62a5c155af9199af9e69b889claireho } 19527f654740f2a26ad62a5c155af9199af9e69b889claireho 19627f654740f2a26ad62a5c155af9199af9e69b889claireho 19727f654740f2a26ad62a5c155af9199af9e69b889claireho // Normal performance test mode 19827f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 19927f654740f2a26ad62a5c155af9199af9e69b889claireho 20027f654740f2a26ad62a5c155af9199af9e69b889claireho DateFormatPerfTest test(argc, argv, status); 20127f654740f2a26ad62a5c155af9199af9e69b889claireho 20227f654740f2a26ad62a5c155af9199af9e69b889claireho 20327f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)){ // ERROR HERE!!! 20427f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "initialize failed! " << status << endl; 20527f654740f2a26ad62a5c155af9199af9e69b889claireho return status; 20627f654740f2a26ad62a5c155af9199af9e69b889claireho } 20727f654740f2a26ad62a5c155af9199af9e69b889claireho //cout << "Done initializing!\n" << endl; 20827f654740f2a26ad62a5c155af9199af9e69b889claireho 20927f654740f2a26ad62a5c155af9199af9e69b889claireho if(test.run()==FALSE){ 21027f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "run failed!" << endl; 21127f654740f2a26ad62a5c155af9199af9e69b889claireho fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); 21227f654740f2a26ad62a5c155af9199af9e69b889claireho return -1; 21327f654740f2a26ad62a5c155af9199af9e69b889claireho } 21427f654740f2a26ad62a5c155af9199af9e69b889claireho cout << "done!" << endl; 21527f654740f2a26ad62a5c155af9199af9e69b889claireho 21627f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 21783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius} 218