| #/** |
| # * © 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 |
| . |