Copyright (C) 2016 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html#License

Copyright (C) 2008-2013, International Business Machines
Corporation and others.  All Rights Reserved.

README for ICU4C Performance Test

Introduction:
The performance tests in ICU4C compares various aspects of ICU against previous versions of ICU,
Posix, and/or Windows.  Some tests only run on Windows and are labeled accordingly.All of the 
performance tests are driven by a perl-based script which calls the underlying C program and 
displays the statistical analysis of the test in an easy to read HTML web page.  Each test will
have its own web page.


Requirements:
The most up to date tests are in ICU 4.0 and later. In addition, most tests depend on data which are 
in a separate repository.

Data repository:
http://source.icu-project.org/repos/icu/data/trunk/test/perf
There are 3 folders in here: collation, conversion, and udr.


Running Performance Test:

1) Checkout the current ICU and 2 previous versions (for proper regression testing) and the data
   into your local system.

2) Do a general build on all the ICUs either through Visual Studios or with the Makefile.

3) Build the ICU performance tests either through Visual Studios or with the Makefile.
   (The location of the performance test is: icu/source/test/perf)

4) Go to perf/perldriver, copy Common.pl.template to Common.pl.
   In this file, you will need to set a few variables:
   a) ICU version numbers
   b) Path to the performance test data
   c) Path to the root directory of the different versions of ICU
   d) Whether or not you are running the test on Windows
   * The Path needs to be absolute
   * All other variables should be left as is

5) Create a directory pref/results. All of the test result web pages will be
   stored in this directory.

6) In the perf directory, there are several other directories for the various tests that can be run.
   (e.g. convperf (Conversion tests)). Go to each directory and execute the perl script for each test
   you want to run. (e.g. CharPerf_r.pl in CharPerf directory)
   * You only need to run the perl script from the latest ICU version.  The corresponding perl script 
     in the previous versions of ICU do not need to be run seperately.


Note: When running on Windows, cygwin is preferred.
Note: If a test needs to be run on Windows, a message will be displayed.
Note: After building the performance tests, it is a good idea to execute each C program to ensure that each
      test can run. (e.g. convperf.exe)
Note: To run the actual performance test, you will need to setup Perl with the following modules:
      a) Statistics/Distribution.pm
      b) Statistics/Descriptive.pm 
Note: Some tests take a while depending on the machine it is running on so a script to run each performance test's
      perl script might be helpful.
Note: The perl script is only used in one version of ICU. When you run regression tests,
      it is recommended to run the tests from the later version of ICU.
