lit - LLVM Integrated Tester
============================

.. program:: lit

SYNOPSIS
--------

:program:`lit` [*options*] [*tests*]

DESCRIPTION
-----------

:program:`lit` is a portable tool for executing LLVM and Clang style test
suites, summarizing their results, and providing indication of failures.
:program:`lit` is designed to be a lightweight testing tool with as simple a
user interface as possible.

:program:`lit` should be run with one or more *tests* to run specified on the
command line.  Tests can be either individual test files or directories to
search for tests (see :ref:`test-discovery`).

Each specified test will be executed (potentially concurrently) and once all
tests have been run :program:`lit` will print summary information on the number
of tests which passed or failed (see :ref:`test-status-results`).  The
:program:`lit` program will execute with a non-zero exit code if any tests
fail.

By default :program:`lit` will use a succinct progress display and will only
print summary information for test failures.  See :ref:`output-options` for
options controlling the :program:`lit` progress display and output.

:program:`lit` also includes a number of options for controlling how tests are
executed (specific features may depend on the particular test format).  See
:ref:`execution-options` for more information.

Finally, :program:`lit` also supports additional options for only running a
subset of the options specified on the command line, see
:ref:`selection-options` for more information.

:program:`lit` parses options from the environment variable ``LIT_OPTS`` after
parsing options from the command line.  ``LIT_OPTS`` is primarily useful for
supplementing or overriding the command-line options supplied to :program:`lit`
by ``check`` targets defined by a project's build system.

:program:`lit` can also read options from response files which are specified as
inputs using the ``@path/to/file.rsp`` syntax. Arguments read from a file must
be one per line and are treated as if they were in the same place as the
original file referencing argument on the command line. A response file can
reference other response files.

Users interested in the :program:`lit` architecture or designing a
:program:`lit` testing implementation should see :ref:`lit-infrastructure`.

GENERAL OPTIONS
---------------

.. option:: -h, --help

 Show the :program:`lit` help message and exit.

.. option:: --version

 Show :program:`lit`'s version number and exit.

.. option:: -j N, --workers=N

 Run ``N`` tests in parallel.  By default, this is automatically chosen to
 match the number of detected available CPUs.

.. option:: --config-prefix=NAME

 Search for :file:`{NAME}.cfg` and :file:`{NAME}.site.cfg` when searching for
 test suites, instead of :file:`lit.cfg` and :file:`lit.site.cfg`.

.. option:: -D NAME[=VALUE], --param NAME[=VALUE]

 Add a user defined parameter ``NAME`` with the given ``VALUE`` (or the empty
 string if not given).  The meaning and use of these parameters is test suite
 dependent.

.. _output-options:

OUTPUT OPTIONS
--------------

.. option:: -q, --quiet

 Suppress any output except for test failures.

.. option:: -s, --succinct

 Show less output, for example don't show information on tests that pass.
 Also show a progress bar, unless ``--no-progress-bar`` is specified.

.. option:: -v, --verbose

 Show more information on test failures, for example the entire test output
 instead of just the test result.

 Each command is printed before it is executed. This can be valuable for
 debugging test failures, as the last printed command is the one that failed.
 Moreover, :program:`lit` inserts ``'RUN: at line N'`` after each
 command pipeline in the output to help you locate the source line of
 the failed command.

.. option:: -vv, --echo-all-commands

 Deprecated alias for -v.

.. option:: -a, --show-all

 Enable -v, but for all tests not just failed tests.

.. option:: -o PATH, --output PATH

 Write test results to the provided path.

.. option:: --no-progress-bar

 Do not use curses based progress bar.

.. option:: --show-excluded

 Show excluded tests.

.. option:: --show-skipped

 Show skipped tests.

.. option:: --show-unsupported

 Show unsupported tests.

.. option:: --show-pass

 Show passed tests.

.. option:: --show-flakypass

 Show passed with retry tests.

.. option:: --show-xfail

 Show expectedly failed tests.

.. _execution-options:

EXECUTION OPTIONS
-----------------

.. option:: --gtest-sharding

 Enable sharding for GoogleTest format.

.. option:: --no-gtest-sharding

 Disable sharding for GoogleTest format.

.. option:: --path=PATH

 Specify an additional ``PATH`` to use when searching for executables in tests.

.. option:: --vg

 Run individual tests under valgrind (using the memcheck tool).  The
 ``--error-exitcode`` argument for valgrind is used so that valgrind failures
 will cause the program to exit with a non-zero status.

 When this option is enabled, :program:`lit` will also automatically provide a
 "``valgrind``" feature that can be used to conditionally disable (or expect
 failure in) certain tests.

.. option:: --vg-leak

 When :option:`--vg` is used, enable memory leak checks.  When this option is
 enabled, :program:`lit` will also automatically provide a "``vg_leak``"
 feature that can be used to conditionally disable (or expect failure in)
 certain tests.

.. option:: --vg-arg=ARG

 When :option:`--vg` is used, specify an additional argument to pass to
 :program:`valgrind` itself.

.. option:: --no-execute

 Don't execute any tests (assume that they pass).

.. option:: --xunit-xml-output XUNIT_XML_OUTPUT

 Write XUnit-compatible XML test reports to the specified file.

.. option:: --report-failures-only

 Only include failures (see :ref:`test-status-results`) in the report.

.. option:: --resultdb-output RESULTDB_OUTPUT

 Write LuCI ResultDB compatible JSON to the specified file.

.. option:: --time-trace-output TIME_TRACE_OUTPUT

 Write Chrome tracing compatible JSON to the specified file

.. option:: --timeout MAXINDIVIDUALTESTTIME

 Maximum time to spend running a single test (in seconds). 0 means no time
 limit. [Default: 0]

.. option:: --timeout=N

 Spend at most ``N`` seconds (approximately) running each individual test.
 ``0`` means no time limit, and ``0`` is the default. Note that this is not an
 alias for :option:`--max-time`; the two are different kinds of maximums.

.. option:: --max-failures MAX_FAILURES

 Stop execution after the given number of failures.

.. option:: --allow-empty-runs

 Do not fail the run if all tests are filtered out.

.. option:: --per-test-coverage

 Emit the necessary test coverage data, divided per test case (involves
 setting a unique value to LLVM_PROFILE_FILE for each RUN). The coverage
 data files will be emitted in the directory specified by ``config.test_exec_root``.

.. option:: --ignore-fail

 Exit with status zero even if some tests fail.

.. option:: --skip-test-time-recording

 Do not track elapsed wall time for each test.

.. option:: --time-tests

 Track the wall time individual tests take to execute and includes the results
 in the summary output.  This is useful for determining which tests in a test
 suite take the most time to execute.

.. _selection-options:

SELECTION OPTIONS
-----------------

By default, `lit` will run failing tests first, then run tests in descending
execution time order to optimize concurrency.  The execution order can be
changed using the :option:`--order` option.

The timing data is stored in the `test_exec_root` in a file named
`.lit_test_times.txt`. If this file does not exist, then `lit` checks the
`test_source_root` for the file to optionally accelerate clean builds.

.. option:: --max-tests=N

 Run at most ``N`` tests and then terminate.

.. option:: --max-time=N

 Spend at most ``N`` seconds (approximately) running tests and then terminate.
 Note that this is not an alias for :option:`--timeout`; the two are
 different kinds of maximums.

.. option:: --order={lexical,random,smart}

 Define the order in which tests are run. The supported values are:

 - lexical - tests will be run in lexical order according to the test file
   path. This option is useful when predictable test order is desired.

 - random - tests will be run in random order.

 - smart - tests that failed previously will be run first, then the remaining
   tests, all in descending execution time order. This is the default as it
   optimizes concurrency.

.. option:: --shuffle

 Run the tests in a random order, not failing/slowest first. Deprecated,
 use :option:`--order` instead.

.. option:: -i, --incremental

 Run failed tests first (DEPRECATED: use ``--order=smart``).

.. option:: --filter=REGEXP

  Run only those tests whose name matches the regular expression specified in
  ``REGEXP``. The environment variable ``LIT_FILTER`` can be also used in place
  of this option, which is especially useful in environments where the call
  to ``lit`` is issued indirectly.

.. option:: --filter-out=REGEXP

  Filter out those tests whose name matches the regular expression specified in
  ``REGEXP``. The environment variable ``LIT_FILTER_OUT`` can be also used in
  place of this option, which is especially useful in environments where the
  call to ``lit`` is issued indirectly.

.. option:: --xfail=LIST

  Treat those tests whose name is in the semicolon separated list ``LIST`` as
  ``XFAIL``. This can be helpful when one does not want to modify the test
  suite. The environment variable ``LIT_XFAIL`` can be also used in place of
  this option, which is especially useful in environments where the call to
  ``lit`` is issued indirectly.

  A test name can specified as a file name relative to the test suite directory.
  For example:

  .. code-block:: none

    LIT_XFAIL="affinity/kmp-hw-subset.c;offloading/memory_manager.cpp"

  In this case, all of the following tests are treated as ``XFAIL``:

  .. code-block:: none

    libomp :: affinity/kmp-hw-subset.c
    libomptarget :: nvptx64-nvidia-cuda :: offloading/memory_manager.cpp
    libomptarget :: x86_64-pc-linux-gnu :: offloading/memory_manager.cpp

  Alternatively, a test name can be specified as the full test name
  reported in LIT output.  For example, we can adjust the previous
  example not to treat the ``nvptx64-nvidia-cuda`` version of
  ``offloading/memory_manager.cpp`` as XFAIL:

  .. code-block:: none

    LIT_XFAIL="affinity/kmp-hw-subset.c;libomptarget :: x86_64-pc-linux-gnu :: offloading/memory_manager.cpp"

.. option:: --xfail-not=LIST

  Do not treat the specified tests as ``XFAIL``.  The environment variable
  ``LIT_XFAIL_NOT`` can also be used in place of this option.  The syntax is the
  same as for :option:`--xfail` and ``LIT_XFAIL``.  :option:`--xfail-not` and
  ``LIT_XFAIL_NOT`` always override all other ``XFAIL`` specifications,
  including an :option:`--xfail` appearing later on the command line.  The
  primary purpose is to suppress an ``XPASS`` result without modifying a test
  case that uses the ``XFAIL`` directive.

.. option:: --num-shards=M

 Divide the set of selected tests into ``M`` equal-sized subsets or
 "shards", and run only one of them.  Must be used with the
 ``--run-shard=N`` option, which selects the shard to run. The environment
 variable ``LIT_NUM_SHARDS`` can also be used in place of this
 option. These two options provide a coarse mechanism for partitioning large
 testsuites, for parallel execution on separate machines (say in a large
 testing farm).

.. option:: --run-shard=N

 Select which shard to run, assuming the ``--num-shards=M`` option was
 provided. The two options must be used together, and the value of ``N``
 must be in the range ``1..M``. The environment variable
 ``LIT_RUN_SHARD`` can also be used in place of this option.

ADDITIONAL OPTIONS
------------------

.. option:: --debug

 Run :program:`lit` in debug mode, for debugging configuration issues and
 :program:`lit` itself.

.. option:: --show-suites

 List the discovered test suites and exit.

.. option:: --show-tests

 List all of the discovered tests and exit.

.. option:: --show-used-features

 Show all features used in the test suite (in ``XFAIL``, ``UNSUPPORTED`` and
 ``REQUIRES``) and exit.

EXIT STATUS
-----------

:program:`lit` will exit with an exit code of 1 if there are any failures
(see :ref:`test-status-results`) and :option:`--ignore-fail` has not been
passed.  Otherwise, it will exit with the status 0.  Other exit codes are used
for non-test related failures (for example a user error or an internal program
error).

.. _test-discovery:

TEST DISCOVERY
--------------

The inputs passed to :program:`lit` can be either individual tests, or entire
directories or hierarchies of tests to run.  When :program:`lit` starts up, the
first thing it does is convert the inputs into a complete list of tests to run
as part of *test discovery*.

In the :program:`lit` model, every test must exist inside some *test suite*.
:program:`lit` resolves the inputs specified on the command line to test suites
by searching upwards from the input path until it finds a :file:`lit.cfg` or
:file:`lit.site.cfg` file.  These files serve as both a marker of test suites
and as configuration files which :program:`lit` loads in order to understand
how to find and run the tests inside the test suite.

Once :program:`lit` has mapped the inputs into test suites it traverses the
list of inputs adding tests for individual files and recursively searching for
tests in directories.

This behavior makes it easy to specify a subset of tests to run, while still
allowing the test suite configuration to control exactly how tests are
interpreted.  In addition, :program:`lit` always identifies tests by the test
suite they are in, and their relative path inside the test suite.  For
appropriately configured projects, this allows :program:`lit` to provide
convenient and flexible support for out-of-tree builds.

.. _test-status-results:

TEST STATUS RESULTS
-------------------

Each test ultimately produces one of the following eight results:

**PASS**

 The test succeeded.

**FLAKYPASS**

 The test succeeded after being re-run more than once. This only applies to
 tests containing an ``ALLOW_RETRIES:`` annotation.

**XFAIL**

 The test failed, but that is expected.  This is used for test formats which allow
 specifying that a test does not currently work, but wish to leave it in the test
 suite.

**XPASS**

 The test succeeded, but it was expected to fail.  This is used for tests which
 were specified as expected to fail, but are now succeeding (generally because
 the feature they test was broken and has been fixed).

**FAIL**

 The test failed.

**UNRESOLVED**

 The test result could not be determined.  For example, this occurs when the test
 could not be run, the test itself is invalid, or the test was interrupted.

**UNSUPPORTED**

 The test is not supported in this environment.  This is used by test formats
 which can report unsupported tests.

**TIMEOUT**

 The test was run, but it timed out before it was able to complete.

Unresolved (**UNRESOLVED**), timed out (**TIMEOUT**), failed (**FAIL**) and
unexpectedly passed (**XPASS**) tests are considered failures.

Depending on the test format tests may produce additional information about
their status (generally only for failures).  See the :ref:`output-options`
section for more information.

.. _lit-infrastructure:

LIT INFRASTRUCTURE
------------------

This section describes the :program:`lit` testing architecture for users interested in
creating a new :program:`lit` testing implementation, or extending an existing one.

:program:`lit` proper is primarily an infrastructure for discovering and running
arbitrary tests, and to expose a single convenient interface to these
tests. :program:`lit` itself doesn't know how to run tests, rather this logic is
defined by *test suites*.

TEST SUITES
~~~~~~~~~~~

As described in :ref:`test-discovery`, tests are always located inside a *test
suite*.  Test suites serve to define the format of the tests they contain, the
logic for finding those tests, and any additional information to run the tests.

:program:`lit` identifies test suites as directories containing ``lit.cfg`` or
``lit.site.cfg`` files (see also :option:`--config-prefix`).  Test suites are
initially discovered by recursively searching up the directory hierarchy for
all the input files passed on the command line.  You can use
:option:`--show-suites` to display the discovered test suites at startup.

Once a test suite is discovered, its config file is loaded.  Config files
themselves are Python modules which will be executed.  When the config file is
executed, two important global variables are predefined:

**lit_config**

 The global **lit** configuration object (a *LitConfig* instance), which defines
 the builtin test formats, global configuration parameters, and other helper
 routines for implementing test configurations.

**config**

 This is the config object (a *TestingConfig* instance) for the test suite,
 which the config file is expected to populate.  The following variables are also
 available on the *config* object, some of which must be set by the config and
 others are optional or predefined:

 **name** *[required]* The name of the test suite, for use in reports and
 diagnostics.

 **test_format** *[required]* The test format object which will be used to
 discover and run tests in the test suite.  Generally this will be a builtin test
 format available from the *lit.formats* module.

 **test_source_root** The filesystem path to the test suite root.  For out-of-dir
 builds this is the directory that will be scanned for tests.

 **test_exec_root** For out-of-dir builds, the path to the test suite root inside
 the object directory.  This is where tests will be run and temporary output files
 placed.

 **environment** A dictionary representing the environment to use when executing
 tests in the suite.

 **standalone_tests** When true, mark a directory with tests expected to be run
 standalone. Test discovery is disabled for that directory. *lit.suffixes* and
 *lit.excludes* must be empty when this variable is true.

 **suffixes** For **lit** test formats which scan directories for tests, this
 variable is a list of suffixes to identify test files.  Used by: *ShTest*.

 **substitutions** For **lit** test formats which substitute variables into a test
 script, the list of substitutions to perform.  Used by: *ShTest*.

 **unsupported** Mark an unsupported directory, all tests within it will be
 reported as unsupported.  Used by: *ShTest*.

 **parent** The parent configuration, this is the config object for the directory
 containing the test suite, or None.

 **root** The root configuration.  This is the top-most :program:`lit` configuration in
 the project.

 **pipefail** Normally a test using a shell pipe fails if any of the commands
 on the pipe fail. If this is not desired, setting this variable to false
 makes the test fail only if the last command in the pipe fails.

 **available_features** A set of features that can be used in `XFAIL`,
 `REQUIRES`, and `UNSUPPORTED` directives.

TEST DISCOVERY
~~~~~~~~~~~~~~

Once test suites are located, :program:`lit` recursively traverses the source
directory (following *test_source_root*) looking for tests.  When :program:`lit`
enters a sub-directory, it first checks to see if a nested test suite is
defined in that directory.  If so, it loads that test suite recursively,
otherwise it instantiates a local test config for the directory (see
:ref:`local-configuration-files`).

Tests are identified by the test suite they are contained within, and the
relative path inside that suite.  Note that the relative path may not refer to
an actual file on disk; some test formats (such as *GoogleTest*) define
"virtual tests" which have a path that contains both the path to the actual
test file and a subpath to identify the virtual test.

.. _local-configuration-files:

LOCAL CONFIGURATION FILES
~~~~~~~~~~~~~~~~~~~~~~~~~

When :program:`lit` loads a subdirectory in a test suite, it instantiates a
local test configuration by cloning the configuration for the parent directory
--- the root of this configuration chain will always be a test suite.  Once the
test configuration is cloned :program:`lit` checks for a *lit.local.cfg* file
in the subdirectory.  If present, this file will be loaded and can be used to
specialize the configuration for each individual directory.  This facility can
be used to define subdirectories of optional tests, or to change other
configuration parameters --- for example, to change the test format, or the
suffixes which identify test files.

SUBSTITUTIONS
~~~~~~~~~~~~~

:program:`lit` allows patterns to be substituted inside RUN commands. It also
provides the following base set of substitutions, which are defined in
TestRunner.py:

 ======================= ==============
  Macro                   Substitution
 ======================= ==============
 %s                      source path (path to the file currently being run)
 %S                      source dir (directory of the file currently being run)
 %p                      same as %S
 %{pathsep}              path separator
 %{fs-src-root}          root component of file system paths pointing to the LLVM checkout
 %{fs-tmp-root}          root component of file system paths pointing to the test's temporary directory
 %{fs-sep}               file system path separator
 %t                      temporary file name unique to the test
 %basename_t             The last path component of %t but without the ``.tmp`` extension (deprecated, use ``%{t:stem}`` instead)
 %T                      parent directory of %t (not unique, deprecated, do not use)
 %%                      %
 %/s                     %s but ``\`` is replaced by ``/``
 %/S                     %S but ``\`` is replaced by ``/``
 %/p                     %p but ``\`` is replaced by ``/``
 %/t                     %t but ``\`` is replaced by ``/``
 %/T                     %T but ``\`` is replaced by ``/``
 %{s:basename}           The last path component of %s
 %{t:stem}               The last path component of %t but without the ``.tmp`` extension (alias for %basename_t)
 %{s:real}               %s after expanding all symbolic links and substitute drives
 %{S:real}               %S after expanding all symbolic links and substitute drives
 %{p:real}               %p after expanding all symbolic links and substitute drives
 %{t:real}               %t after expanding all symbolic links and substitute drives
 %{T:real}               %T after expanding all symbolic links and substitute drives
 %{/s:real}              %/s after expanding all symbolic links and substitute drives
 %{/S:real}              %/S after expanding all symbolic links and substitute drives
 %{/p:real}              %/p after expanding all symbolic links and substitute drives
 %{/t:real}              %/t after expanding all symbolic links and substitute drives
 %{/T:real}              %/T after expanding all symbolic links and substitute drives
 %{/s:regex_replacement} %/s but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/S:regex_replacement} %/S but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/p:regex_replacement} %/p but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/t:regex_replacement} %/t but escaped for use in the replacement of a ``s@@@`` command in sed
 %{/T:regex_replacement} %/T but escaped for use in the replacement of a ``s@@@`` command in sed
 %:s                     On Windows, %/s but a ``:`` is removed if its the second character.
                         Otherwise, %s but with a single leading ``/`` removed.
 %:S                     On Windows, %/S but a ``:`` is removed if its the second character.
                         Otherwise, %S but with a single leading ``/`` removed.
 %:p                     On Windows, %/p but a ``:`` is removed if its the second character.
                         Otherwise, %p but with a single leading ``/`` removed.
 %:t                     On Windows, %/t but a ``:`` is removed if its the second character.
                         Otherwise, %t but with a single leading ``/`` removed.
 %:T                     On Windows, %/T but a ``:`` is removed if its the second character.
                         Otherwise, %T but with a single leading ``/`` removed.
 ======================= ==============

Other substitutions are provided that are variations on this base set and
further substitution patterns can be defined by each test module. See the
modules :ref:`local-configuration-files`.

More detailed information on substitutions can be found in the
:doc:`../TestingGuide`.

TEST RUN OUTPUT FORMAT
~~~~~~~~~~~~~~~~~~~~~~

The :program:`lit` output for a test run conforms to the following schema, in
both short and verbose modes (although in short mode no PASS lines will be
shown).  This schema has been chosen to be relatively easy to reliably parse by
a machine (for example in buildbot log scraping), and for other tools to
generate.

Each test result is expected to appear on a line that matches:

.. code-block:: none

  <result code>: <test name> (<progress info>)

where ``<result-code>`` is a standard test result such as PASS, FAIL, XFAIL,
XPASS, UNRESOLVED, or UNSUPPORTED.  The performance result codes of IMPROVED and
REGRESSED are also allowed.

The ``<test name>`` field can consist of an arbitrary string containing no
newline.

The ``<progress info>`` field can be used to report progress information such
as (1/300) or can be empty, but even when empty the parentheses are required.

Each test result may include additional (multiline) log information in the
following format:

.. code-block:: none

  <log delineator> TEST '(<test name>)' <trailing delineator>
  ... log message ...
  <log delineator>

where ``<test name>`` should be the name of a preceding reported test, ``<log
delineator>`` is a string of "*" characters *at least* four characters long
(the recommended length is 20), and ``<trailing delineator>`` is an arbitrary
(unparsed) string.

The following is an example of a test run output which consists of four tests A,
B, C, and D, and a log message for the failing test C:

.. code-block:: none

  PASS: A (1 of 4)
  PASS: B (2 of 4)
  FAIL: C (3 of 4)
  ******************** TEST 'C' FAILED ********************
  Test 'C' failed as a result of exit code 1.
  ********************
  PASS: D (4 of 4)

DEFAULT FEATURES
~~~~~~~~~~~~~~~~~

For convenience :program:`lit` automatically adds **available_features** for
some common use cases.

:program:`lit` adds a feature based on the operating system being built on, for
example: `system-darwin`, `system-linux`, etc. :program:`lit` also
automatically adds a feature based on the current architecture, for example
`target-x86_64`, `target-aarch64`, etc.

When building with sanitizers enabled, :program:`lit` automatically adds the
short name of the sanitizer, for example: `asan`, `tsan`, etc.

To see the full list of features that can be added, see
*llvm/utils/lit/lit/llvm/config.py*.

LIT EXAMPLE TESTS
~~~~~~~~~~~~~~~~~

The :program:`lit` distribution contains several example implementations of
test suites in the *ExampleTests* directory.

SEE ALSO
--------

valgrind(1)
