/*
***********************************************************************
* © 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html#License
***********************************************************************
***********************************************************************
* Copyright (c) 2002-2014,International Business Machines
* Corporation and others.  All Rights Reserved.
***********************************************************************
***********************************************************************
*/

#include "DateFmtPerf.h"
#include "uoptions.h"
#include <stdio.h>
#include <fstream>

#include <iostream>
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 <outfile>.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 << "<perfTestResults icu=\"c\" version=\"" << U_ICU_VERSION << "\">" << endl;

          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 << "</perfTestResults>" << 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;
}
