#!/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) 2002-2013, International Business Machines
#  * Corporation and others. All Rights Reserved.
#  ********************************************************************

#use strict;

use lib '../perldriver';

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

use PerfFramework;

my $options = {
    "title"=>"Unicode String performance regression: ICU (".$ICUPreviousVersion." and ".$ICULatestVersion.")",
    "headers"=>"ICU".$ICUPreviousVersion." ICU".$ICULatestVersion,
    "operationIs"=>"Unicode String",
    "passes"=>"10",
    "time"=>"5",
    #"outputType"=>"HTML",
    "dataDir"=>$CollationDataPath,
    "outputDir"=>"../results"
};

# programs

my $p1; # Previous
my $p2; # Latest

if ($OnWindows) {
    $p1 = "cd ".$ICUPrevious."/bin && ".$ICUPathPrevious."/ustrperf/$WindowsPlatform/Release/stringperf.exe -b -u"; # Previous
    $p2 = "cd ".$ICULatest."/bin && ".$ICUPathLatest."/ustrperf/$WindowsPlatform/Release/stringperf.exe -b -u"; # Latest
} else {
    $p1 = "LD_LIBRARY_PATH=".$ICUPrevious."/source/lib:".$ICUPrevious."/source/tools/ctestfw ".$ICUPathPrevious."/ustrperf/stringperf -b -u"; # Previous
    $p2 = "LD_LIBRARY_PATH=".$ICULatest."/source/lib:".$ICULatest."/source/tools/ctestfw ".$ICUPathLatest."/ustrperf/stringperf -b -u"; # Latest
}

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_SerbianSH.txt",
        "TestNames_SerbianSR.txt",
        "TestNames_Thai.txt",
        "TestNames_Russian.txt",
        "th18057.txt",
        "thesis.txt",
        "vfear11a.txt",
    ]
};


my $tests = { 
    "Object Construction(empty string)",      ["$p1,TestCtor"         , "$p2,TestCtor"         ],
    "Object Construction(single char)",       ["$p1,TestCtor1"        , "$p2,TestCtor1"        ],
    "Object Construction(another string)",    ["$p1,TestCtor2"        , "$p2,TestCtor2"        ],
    "Object Construction(string literal)",    ["$p1,TestCtor3"        , "$p2,TestCtor3"        ],
    "String Assignment(helper)",              ["$p1,TestAssign"       , "$p2,TestAssign"       ],
    "String Assignment(string literal)",      ["$p1,TestAssign1"      , "$p2,TestAssign1"      ],
    "String Assignment(another string)",      ["$p1,TestAssign2"      , "$p2,TestAssign2"      ],
    "Get String or Character",                ["$p1,TestGetch"        , "$p2,TestGetch"        ],
    "Concatenation",                          ["$p1,TestCatenate"     , "$p2,TestCatenate"     ],
    "String Scanning(char)",                  ["$p1,TestScan"         , "$p2,TestScan"         ],
    "String Scanning(string)",                ["$p1,TestScan1"        , "$p2,TestScan1"        ],
    "String Scanning(char set)",              ["$p1,TestScan2"        , "$p2,TestScan2"        ],
};


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


