/* *********************************************************************** * © 2016 and later: Unicode, Inc. and others. * License & terms of use: http://www.unicode.org/copyright.html *********************************************************************** *********************************************************************** * Copyright (c) 2002-2014,International Business Machines * Corporation and others. All Rights Reserved. *********************************************************************** *********************************************************************** */ #include "DateFmtPerf.h" #include "uoptions.h" #include #include #include using namespace std; DateFormatPerfTest::DateFormatPerfTest(int32_t argc, const char* argv[], UErrorCode& status) : UPerfTest(argc,argv,status) { if (locale == NULL){ locale = "en_US"; // set default locale } } DateFormatPerfTest::~DateFormatPerfTest() { } UPerfFunction* DateFormatPerfTest::runIndexedTest(int32_t index, UBool exec,const char* &name, char* par) { //exec = true; switch (index) { TESTCASE(0,DateFmt250); TESTCASE(1,DateFmt10000); TESTCASE(2,DateFmt100000); TESTCASE(3,BreakItWord250); TESTCASE(4,BreakItWord10000); TESTCASE(5,BreakItChar250); TESTCASE(6,BreakItChar10000); TESTCASE(7,NumFmt10000); TESTCASE(8,NumFmt100000); TESTCASE(9,Collation10000); TESTCASE(10,Collation100000); TESTCASE(11, DIFCreate250); TESTCASE(12, DIFCreate10000); TESTCASE(13, TimeZoneCreate250); TESTCASE(14, TimeZoneCreate10000); TESTCASE(15, DTPatternGeneratorCreate250); TESTCASE(16, DTPatternGeneratorCreate10000); TESTCASE(17, DTPatternGeneratorCopy250); TESTCASE(18, DTPatternGeneratorCopy10000); TESTCASE(19, DTPatternGeneratorBestValue250); TESTCASE(20, DTPatternGeneratorBestValue10000); TESTCASE(21,DateFmtCopy250); TESTCASE(22,DateFmtCopy10000); TESTCASE(23,DateFmtCreate250); TESTCASE(24,DateFmtCreate10000); default: name = ""; return NULL; } return NULL; } UPerfFunction* DateFormatPerfTest::DateFmt250(){ DateFmtFunction* func= new DateFmtFunction(1, locale); return func; } UPerfFunction* DateFormatPerfTest::DateFmt10000(){ DateFmtFunction* func= new DateFmtFunction(40, locale); return func; } UPerfFunction* DateFormatPerfTest::DateFmt100000(){ DateFmtFunction* func= new DateFmtFunction(400, locale); return func; } UPerfFunction* DateFormatPerfTest::BreakItWord250(){ BreakItFunction* func= new BreakItFunction(250, true); return func; } UPerfFunction* DateFormatPerfTest::BreakItWord10000(){ BreakItFunction* func= new BreakItFunction(10000, true); return func; } UPerfFunction* DateFormatPerfTest::BreakItChar250(){ BreakItFunction* func= new BreakItFunction(250, false); return func; } UPerfFunction* DateFormatPerfTest::BreakItChar10000(){ BreakItFunction* func= new BreakItFunction(10000, false); return func; } UPerfFunction* DateFormatPerfTest::NumFmt10000(){ NumFmtFunction* func= new NumFmtFunction(10000, locale); return func; } UPerfFunction* DateFormatPerfTest::NumFmt100000(){ NumFmtFunction* func= new NumFmtFunction(100000, locale); return func; } UPerfFunction* DateFormatPerfTest::Collation10000(){ CollationFunction* func= new CollationFunction(40, locale); return func; } UPerfFunction* DateFormatPerfTest::Collation100000(){ CollationFunction* func= new CollationFunction(400, locale); return func; } UPerfFunction *DateFormatPerfTest::DIFCreate250() { DIFCreateFunction* func = new DIFCreateFunction(250, locale); return func; } UPerfFunction *DateFormatPerfTest::DIFCreate10000() { DIFCreateFunction* func = new DIFCreateFunction(10000, locale); return func; } UPerfFunction *DateFormatPerfTest::TimeZoneCreate250() { return new TimeZoneCreateFunction(250, locale); } UPerfFunction *DateFormatPerfTest::TimeZoneCreate10000() { return new TimeZoneCreateFunction(10000, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCreate250() { return new DTPatternGeneratorCreateFunction(250, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCreate10000() { return new DTPatternGeneratorCreateFunction(10000, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCopy250() { return new DTPatternGeneratorCopyFunction(250, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorCopy10000() { return new DTPatternGeneratorCopyFunction(10000, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorBestValue250() { return new DTPatternGeneratorBestValueFunction(250, locale); } UPerfFunction *DateFormatPerfTest::DTPatternGeneratorBestValue10000() { return new DTPatternGeneratorBestValueFunction(10000, locale); } UPerfFunction* DateFormatPerfTest::DateFmtCopy250(){ return new DateFmtCopyFunction(250, locale); } UPerfFunction* DateFormatPerfTest::DateFmtCopy10000(){ return new DateFmtCopyFunction(10000, locale); } UPerfFunction* DateFormatPerfTest::DateFmtCreate250(){ return new DateFmtCreateFunction(250, locale); } UPerfFunction* DateFormatPerfTest::DateFmtCreate10000(){ return new DateFmtCreateFunction(10000, locale); } int main(int argc, const char* argv[]){ // -x Filename.xml if((argc>1)&&(strcmp(argv[1],"-x") == 0)) { if(argc < 3) { fprintf(stderr, "Usage: %s -x .xml\n", argv[0]); return 1; // not enough arguments } cout << "ICU version - " << U_ICU_VERSION << endl; UErrorCode status = U_ZERO_ERROR; #define FUNCTION_COUNT 6 // Declare functions 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"); functions[5] = new StdioNumFmtFunction(100000, "en"); // 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]); out << "" << endl; for(int i = 0; i < FUNCTION_COUNT; i++) { out << " getOperationsPerIteration() << "\"" << endl; out << " time=\"" << t[i] << "\" />" << endl; } out << "" << endl; out.close(); cout << " Wrote to " << argv[2] << endl; } if(U_FAILURE(status)) { cout << "Error! " << u_errorName(status) << endl; return 1; } return 0; } // Normal performance test mode UErrorCode status = U_ZERO_ERROR; DateFormatPerfTest test(argc, argv, status); if(U_FAILURE(status)){ // ERROR HERE!!! cout << "initialize failed! " << u_errorName(status) << endl; return status; } //cout << "Done initializing!\n" << endl; if(test.run()==FALSE){ cout << "run failed!" << endl; fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); return -1; } cout << "done!" << endl; return 0; }