#!/usr/bin/perl
#  ********************************************************************
#  * Copyright (C) 2016 and later: Unicode, Inc. and others.
#  * License & terms of use: http://www.unicode.org/copyright.html
#  ********************************************************************
#  ********************************************************************
#  * 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);
