#/**
# * © 2016 and later: Unicode, Inc. and others.
# * License & terms of use: http://www.unicode.org/copyright.html
# *******************************************************************************
# * Copyright (C) 2002-2014, International Business Machines Corporation and    *
# * others. All Rights Reserved.                                                *
# *******************************************************************************
# */
#
#  ICU and Windows Collation performance test script
#      Used in conjunction with the collperf test program.
#      This script defines the locales and data files to be tested,
#        runs the collperf program, and formats and prints the results.
#
#        7 June 2001   Andy Heninger
#
#  ICU4J and Java Collator performance test script
#  2002-09-25 modified by Richard Liang

print "To run this performance test\n";
print "run perl collationperf.pl\n";
print "Running performance tests...\n";

#
# Map defines the set of data files to run in each locale
#
%dataFiles = (
   "en_US",         "TestNames_Latin.txt",
   "da_DK",         "TestNames_Latin.txt",
   "de_DE",         "TestNames_Latin.txt",
   "de__PHONEBOOK", "TestNames_Latin.txt",
   "fr_FR",         "TestNames_Latin.txt",
   "ja_JP",         "TestNames_Latin.txt TestNames_Japanese_h.txt TestNames_Japanese_k.txt TestNames_Asian.txt",
   "zh_CN",         "TestNames_Latin.txt TestNames_Chinese.txt",
   "zh_TW",         "TestNames_Latin.txt TestNames_Chinese.txt",
   "zh__PINYIN",    "TestNames_Latin.txt TestNames_Chinese.txt",
   "ru_RU", 	    "TestNames_Latin.txt TestNames_Russian.txt",
   "th",            "TestNames_Latin.txt TestNames_Thai.txt",
   "ko_KR",         "TestNames_Latin.txt TestNames_Korean.txt",
   );

if ($^O eq "MSWin32") {
    $classPath = "out\\lib\\icu4j-perf-tests.jar;..\\icu4j.jar";
} else {
    $classPath = "out/lib/icu4j-perf-tests.jar:../icu4j.jar";
}

#
#  Outer loop runs through the locales to test
#     (Edit this list directly to make changes)
#
   foreach $locale (
       "en_US",
       "da_DK",
       "de_DE",
       "de__PHONEBOOK",
       "fr_FR",
       "ja_JP",
       "zh_CN",
       "zh_TW",
       "zh__PINYIN",
       "ko_KR",
       "ru_RU",
       "th",
                   )
       {
       #
       # Inner loop runs over the set of data files specified for each locale.
       #    (Edit the %datafiles initialization, above, to make changes.
       #
       $ff = $dataFiles{$locale};
       @ff = split(/[\s]+/, $ff);
       foreach $data (@ff) {

          #
          # Run ICU Test for this (locale, data file) pair.
          #
          $iStrCol = `java -classpath $classPath com.ibm.icu.dev.test.perf.CollationPerformanceTest -terse -file data/collation/$data -locale $locale -loop 1000 -binsearch`;
          $iStrCol =~s/[,\s]*//g;  # whack off the leading "  ," in the returned result.
          doKeyTimes("java -classpath $classPath com.ibm.icu.dev.test.perf.CollationPerformanceTest -terse -file data/collation/$data -locale $locale -loop 1000 -keygen",
                     $iKeyGen, $iKeyLen);


          #
          # Run Windows test for this (locale, data file) pair.  Only do if
          #    we are not on Windows 98/ME and we hava a windows langID
          #    for the locale.
          #
          $wStrCol = $wKeyGen = $wKeyLen = 0;
          $wStrCol = `java -classpath $classPath com.ibm.icu.dev.test.perf.CollationPerformanceTest -terse -file data/collation/$data -locale $locale -loop 1000 -binsearch -java`;
          $wStrCol =~s/[,\s]*//g;  # whack off the leading "  ," in the returned result.
          doKeyTimes("java -classpath $classPath com.ibm.icu.dev.test.perf.CollationPerformanceTest -terse -file data/collation/$data -locale $locale -loop 1000 -keygen -java",
                     $wKeyGen, $wKeyLen);
                     
          $collDiff = $keyGenDiff = $keyLenDiff = 0;
          if ($wKeyLen > 0) {
              $collDiff   = (($wStrCol - $iStrCol) / $iStrCol) * 100;
              $keyGenDiff = (($wKeyGen - $iKeyGen) / $iKeyGen) * 100;
              $keyLenDiff = (($wKeyLen - $iKeyLen) / $iKeyLen) * 100;
          }

         #
         #  Write the line of results for this (locale, data file).
         #
         write;
    }
 }

#
#  doKeyGenTimes($Command_to_run, $time, $key_length)
#       Do a key-generation test and return the time and key length/char values.
#
sub doKeyTimes($$$) {
   # print "$_[0]\n";
   local($x) = `$_[0]`;                  # execute the collperf command.
   ($_[1], $_[2]) = split(/\,/, $x);     # collperf returns "time, keylength" string.
}


#
#  Output Formats ...
#
#
format STDOUT_TOP =
                                      -------- ICU --------   ------ JAVA -------      (JAVA - ICU)/ICU
Locale     Data file                  strcoll keygen  keylen  strcoll keygen  keylen    coll  keygen  keylen
------------------------------------------------------------------------------------------------------------
.

format STDOUT =
@<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<| @######  @####   @#.##  |@##### @#####   @#.## | @###%  @###%   @###%
$locale, $data, $iStrCol, $iKeyGen, $iKeyLen, $wStrCol, $wKeyGen, $wKeyLen, $collDiff, $keyGenDiff, $keyLenDiff
.
