#!/usr/bin/perl
#  ********************************************************************
#  * COPYRIGHT:
#  * Copyright (c) 2005-2013, International Business Machines Corporation and
#  * others. All Rights Reserved.
#  ********************************************************************

#use strict;

use lib '../perldriver';

require "../perldriver/Common.pl";

use PerfFramework;

my $options = {
    "title"=>"Collation performance: ICU,POSIX,and Win",
    "headers"=>"ICU POSIX WIN",
    "operationIs"=>"unicode String",
    "passes"=>"1",
    "time"=>"2",
    #"outputType"=>"HTML",
    "dataDir"=>$CollationDataPath,
    "outputDir"=>"../results"
};

my $p;
if ($OnWindows) {
    $p = "cd ".$ICULatest."/bin && ".$ICUPathLatest."/collperf/$WindowsPlatform/Release/collperf.exe";
} else {
    $p = "LD_LIBRARY_PATH=".$ICULatest."/source/lib:".$ICULatest."/source/tools/ctestfw ".$ICUPathLatest."/collperf/collperf";
}

# programs
# tests will be done for all the programs. Results will be stored and connected
my $test;
if ($OnWindows) {
    $tests = {
        "Key Gen null",  ["$p,TestIcu_KeyGen_null", "$p,TestPosix_KeyGen_null", "$p,TestWin_KeyGen_null"],
        "qsort strcoll null",  ["$p,TestIcu_qsort_strcoll_null", "$p,TestPosix_qsort_strcoll_null", "$p,TestWin_qsort_CompareStringW_null"],
        "qsort use key",  ["$p,TestIcu_qsort_usekey", "$p,TestPosix_qsort_usekey", "$p,TestWin_qsort_usekey"],
        "Binary Search icu strcoll null",  ["$p,TestIcu_BinarySearch_strcoll_null", "$p,TestPosix_BinarySearch_strcoll_null", "$p,TestWin_BinarySearch_CompareStringW_null"],
        "Binary Search icu use key",  ["$p,TestIcu_BinarySearch_usekey", "$p,TestPosix_BinarySearch_usekey", "$p,TestWin_BinarySearch_usekey"],
        # These are the original test. They are commented out to so that the above test can run and compare certain aspects of collation.
        #"Key Gen ICU null",  ["$p,TestIcu_KeyGen_null"],
        #"Key Gen ICU len",  ["$p,TestIcu_KeyGen_len"],
        #"Key Gen POSIX",  ["$p,TestPosix_KeyGen_null"],
        #"Key Gen Win",  ["$p,TestWin_KeyGen_null"],
        #"Iteration icu forward null",  ["$p,TestIcu_ForwardIter_null"],
        #"Iteration icu forward len",  ["$p,TestIcu_ForwardIter_len"],
        #"Iteration icu backward null",  ["$p,TestIcu_BackwardIter_null"],
        #"Iteration icu backward len",  ["$p,TestIcu_BackwardIter_len"],
        #"Iteration/all icu forward null",  ["$p,TestIcu_ForwardIter_all_null"],
        #"Iteration/all icu forward len",  ["$p,TestIcu_ForwardIter_all_len"],
        #"Iteration/all icu backward null",  ["$p,TestIcu_BackwardIter_all_null"],
        #"Iteration/all icu backward len",  ["$p,TestIcu_BackwardIter_all_len"],
        #"qsort icu strcoll null",  ["$p,TestIcu_qsort_strcoll_null"],
        #"qsort icu strcoll len",  ["$p,TestIcu_qsort_strcoll_len"],
        #"qsort icu use key",  ["$p,TestIcu_qsort_usekey"],
        #"qsort posix strcoll null",  ["$p,TestPosix_qsort_strcoll_null"],
        #"qsort posix use key",  ["$p,TestPosix_qsort_usekey"],
        #"qsort win CompareStringW null",  ["$p,TestWin_qsort_CompareStringW_null"],
        #"qsort win CompareStringW len",  ["$p,TestWin_qsort_CompareStringW_len"],
        #"qsort win use key",  ["$p,TestWin_qsort_usekey"],
        #"Binary Search icu strcoll null",  ["$p,TestIcu_BinarySearch_strcoll_null"],
        #"Binary Search icu strcoll len",  ["$p,TestIcu_BinarySearch_strcoll_len"],
        #"Binary Search icu use key",  ["$p,TestIcu_BinarySearch_usekey"],
        #"Binary Search icu u_strcmp",  ["$p,TestIcu_BinarySearch_strcmp"],
        #"Binary Search icu cmpCPO",  ["$p,TestIcu_BinarySearch_cmpCPO"],
        #"Binary Search posix strcoll null",  ["$p,TestPosix_BinarySearch_strcoll_null"],
        #"Binary Search posix use key",  ["$p,TestPosix_BinarySearch_usekey"],
        #"Binary Search win CompareStringW null",  ["$p,TestWin_BinarySearch_CompareStringW_null"],
        #"Binary Search win CompareStringW len",  ["$p,TestWin_BinarySearch_CompareStringW_len"],
        #"Binary Search win use key",  ["$p,TestWin_BinarySearch_usekey"],
        #"Binary Search win wcscmp",  ["$p,TestWin_BinarySearch_wcscmp"],
    };
} else {
    $tests = {
        "Key Gen null",  ["$p,TestIcu_KeyGen_null", "$p,TestPosix_KeyGen_null"],
        "qsort strcoll null",  ["$p,TestIcu_qsort_strcoll_null", "$p,TestPosix_qsort_strcoll_null"],
        "qsort use key",  ["$p,TestIcu_qsort_usekey", "$p,TestPosix_qsort_usekey"],
        "Binary Search icu strcoll null",  ["$p,TestIcu_BinarySearch_strcoll_null", "$p,TestPosix_BinarySearch_strcoll_null"],
        "Binary Search icu use key",  ["$p,TestIcu_BinarySearch_usekey", "$p,TestPosix_BinarySearch_usekey"],
    };
}

my $dataFiles = {
    "",
    [
        "TestNames_Asian.txt",
        "TestNames_Chinese.txt",
        "TestNames_Japanese.txt",
        "TestNames_Japanese_h.txt",
        "TestNames_Japanese_k.txt",
        "TestNames_Korean.txt",
        "TestNames_Latin.txt",
        "TestNames_Russian.txt",
        "TestNames_SerbianSH.txt",
        "TestNames_SerbianSR.txt",
        "TestNames_Simplified_Chinese.txt",
        "TestNames_Thai.txt"
    ]
};

runTests($options, $tests, $dataFiles);
