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}