| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 1 | lit - LLVM Integrated Tester | 
|  | 2 | ============================ | 
|  | 3 |  | 
| James Henderson | a056684 | 2019-06-27 13:24:46 +0000 | [diff] [blame] | 4 | .. program:: lit | 
|  | 5 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 6 | SYNOPSIS | 
|  | 7 | -------- | 
|  | 8 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 9 | :program:`lit` [*options*] [*tests*] | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 10 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 11 | DESCRIPTION | 
|  | 12 | ----------- | 
|  | 13 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 14 | :program:`lit` is a portable tool for executing LLVM and Clang style test | 
|  | 15 | suites, summarizing their results, and providing indication of failures. | 
|  | 16 | :program:`lit` is designed to be a lightweight testing tool with as simple a | 
|  | 17 | user interface as possible. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 18 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 19 | :program:`lit` should be run with one or more *tests* to run specified on the | 
|  | 20 | command line.  Tests can be either individual test files or directories to | 
|  | 21 | search for tests (see :ref:`test-discovery`). | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 22 |  | 
|  | 23 | Each specified test will be executed (potentially in parallel) and once all | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 24 | tests have been run :program:`lit` will print summary information on the number | 
|  | 25 | of tests which passed or failed (see :ref:`test-status-results`).  The | 
|  | 26 | :program:`lit` program will execute with a non-zero exit code if any tests | 
|  | 27 | fail. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 28 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 29 | By default :program:`lit` will use a succinct progress display and will only | 
|  | 30 | print summary information for test failures.  See :ref:`output-options` for | 
|  | 31 | options controlling the :program:`lit` progress display and output. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 32 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 33 | :program:`lit` also includes a number of options for controlling how tests are | 
|  | 34 | executed (specific features may depend on the particular test format).  See | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 35 | :ref:`execution-options` for more information. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 36 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 37 | Finally, :program:`lit` also supports additional options for only running a | 
|  | 38 | subset of the options specified on the command line, see | 
|  | 39 | :ref:`selection-options` for more information. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 40 |  | 
| Joel E. Denny | 1602058 | 2019-07-08 12:18:40 +0000 | [diff] [blame] | 41 | :program:`lit` parses options from the environment variable ``LIT_OPTS`` after | 
|  | 42 | parsing options from the command line.  ``LIT_OPTS`` is primarily useful for | 
|  | 43 | supplementing or overriding the command-line options supplied to :program:`lit` | 
|  | 44 | by ``check`` targets defined by a project's build system. | 
|  | 45 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 46 | Users interested in the :program:`lit` architecture or designing a | 
|  | 47 | :program:`lit` testing implementation should see :ref:`lit-infrastructure`. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 48 |  | 
|  | 49 | GENERAL OPTIONS | 
|  | 50 | --------------- | 
|  | 51 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 52 | .. option:: -h, --help | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 53 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 54 | Show the :program:`lit` help message. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 55 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 56 | .. option:: -j N, --threads=N | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 57 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 58 | Run ``N`` tests in parallel.  By default, this is automatically chosen to | 
|  | 59 | match the number of detected available CPUs. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 60 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 61 | .. option:: --config-prefix=NAME | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 62 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 63 | Search for :file:`{NAME}.cfg` and :file:`{NAME}.site.cfg` when searching for | 
|  | 64 | test suites, instead of :file:`lit.cfg` and :file:`lit.site.cfg`. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 65 |  | 
| Matthias Braun | 6717a0b | 2017-02-09 23:03:22 +0000 | [diff] [blame] | 66 | .. option:: -D NAME[=VALUE], --param NAME[=VALUE] | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 67 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 68 | Add a user defined parameter ``NAME`` with the given ``VALUE`` (or the empty | 
|  | 69 | string if not given).  The meaning and use of these parameters is test suite | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 70 | dependent. | 
|  | 71 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 72 | .. _output-options: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 73 |  | 
|  | 74 | OUTPUT OPTIONS | 
|  | 75 | -------------- | 
|  | 76 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 77 | .. option:: -q, --quiet | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 78 |  | 
|  | 79 | Suppress any output except for test failures. | 
|  | 80 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 81 | .. option:: -s, --succinct | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 82 |  | 
|  | 83 | Show less output, for example don't show information on tests that pass. | 
|  | 84 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 85 | .. option:: -v, --verbose | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 86 |  | 
|  | 87 | Show more information on test failures, for example the entire test output | 
|  | 88 | instead of just the test result. | 
|  | 89 |  | 
| George Karpenkov | dfa6c20 | 2017-07-13 19:26:27 +0000 | [diff] [blame] | 90 | .. option:: -vv, --echo-all-commands | 
|  | 91 |  | 
|  | 92 | Echo all commands to stdout, as they are being executed. | 
|  | 93 | This can be valuable for debugging test failures, as the last echoed command | 
|  | 94 | will be the one which has failed. | 
| Joel E. Denny | 31b3739 | 2018-05-31 00:55:32 +0000 | [diff] [blame] | 95 | :program:`lit` normally inserts a no-op command (``:`` in the case of bash) | 
|  | 96 | with argument ``'RUN: at line N'`` before each command pipeline, and this | 
|  | 97 | option also causes those no-op commands to be echoed to stdout to help you | 
|  | 98 | locate the source line of the failed command. | 
| George Karpenkov | dfa6c20 | 2017-07-13 19:26:27 +0000 | [diff] [blame] | 99 | This option implies ``--verbose``. | 
|  | 100 |  | 
| Matthias Braun | f5e2b8f | 2015-11-06 01:13:40 +0000 | [diff] [blame] | 101 | .. option:: -a, --show-all | 
|  | 102 |  | 
|  | 103 | Show more information about all tests, for example the entire test | 
|  | 104 | commandline and output. | 
|  | 105 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 106 | .. option:: --no-progress-bar | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 107 |  | 
|  | 108 | Do not use curses based progress bar. | 
|  | 109 |  | 
| Eric Fiselier | 18fab46 | 2014-07-31 20:11:13 +0000 | [diff] [blame] | 110 | .. option:: --show-unsupported | 
|  | 111 |  | 
|  | 112 | Show the names of unsupported tests. | 
|  | 113 |  | 
| Eric Fiselier | c85f00a | 2014-08-02 01:29:52 +0000 | [diff] [blame] | 114 | .. option:: --show-xfail | 
|  | 115 |  | 
|  | 116 | Show the names of tests that were expected to fail. | 
|  | 117 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 118 | .. _execution-options: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 119 |  | 
|  | 120 | EXECUTION OPTIONS | 
|  | 121 | ----------------- | 
|  | 122 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 123 | .. option:: --path=PATH | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 124 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 125 | Specify an additional ``PATH`` to use when searching for executables in tests. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 126 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 127 | .. option:: --vg | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 128 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 129 | Run individual tests under valgrind (using the memcheck tool).  The | 
|  | 130 | ``--error-exitcode`` argument for valgrind is used so that valgrind failures | 
|  | 131 | will cause the program to exit with a non-zero status. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 132 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 133 | When this option is enabled, :program:`lit` will also automatically provide a | 
|  | 134 | "``valgrind``" feature that can be used to conditionally disable (or expect | 
|  | 135 | failure in) certain tests. | 
| Daniel Dunbar | 519a349 | 2012-10-19 20:12:00 +0000 | [diff] [blame] | 136 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 137 | .. option:: --vg-arg=ARG | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 138 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 139 | When :option:`--vg` is used, specify an additional argument to pass to | 
|  | 140 | :program:`valgrind` itself. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 141 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 142 | .. option:: --vg-leak | 
| Daniel Dunbar | 519a349 | 2012-10-19 20:12:00 +0000 | [diff] [blame] | 143 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 144 | When :option:`--vg` is used, enable memory leak checks.  When this option is | 
|  | 145 | enabled, :program:`lit` will also automatically provide a "``vg_leak``" | 
|  | 146 | feature that can be used to conditionally disable (or expect failure in) | 
|  | 147 | certain tests. | 
| Daniel Dunbar | 519a349 | 2012-10-19 20:12:00 +0000 | [diff] [blame] | 148 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 149 | .. option:: --time-tests | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 150 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 151 | Track the wall time individual tests take to execute and includes the results | 
|  | 152 | in the summary output.  This is useful for determining which tests in a test | 
|  | 153 | suite take the most time to execute.  Note that this option is most useful | 
|  | 154 | with ``-j 1``. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 155 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 156 | .. _selection-options: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 157 |  | 
|  | 158 | SELECTION OPTIONS | 
|  | 159 | ----------------- | 
|  | 160 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 161 | .. option:: --max-tests=N | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 162 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 163 | Run at most ``N`` tests and then terminate. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 164 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 165 | .. option:: --max-time=N | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 166 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 167 | Spend at most ``N`` seconds (approximately) running tests and then terminate. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 168 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 169 | .. option:: --shuffle | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 170 |  | 
|  | 171 | Run the tests in a random order. | 
|  | 172 |  | 
| Graydon Hoare | ae5d7bb | 2017-01-18 18:12:20 +0000 | [diff] [blame] | 173 | .. option:: --num-shards=M | 
|  | 174 |  | 
|  | 175 | Divide the set of selected tests into ``M`` equal-sized subsets or | 
|  | 176 | "shards", and run only one of them.  Must be used with the | 
|  | 177 | ``--run-shard=N`` option, which selects the shard to run. The environment | 
|  | 178 | variable ``LIT_NUM_SHARDS`` can also be used in place of this | 
|  | 179 | option. These two options provide a coarse mechanism for paritioning large | 
|  | 180 | testsuites, for parallel execution on separate machines (say in a large | 
|  | 181 | testing farm). | 
|  | 182 |  | 
|  | 183 | .. option:: --run-shard=N | 
|  | 184 |  | 
|  | 185 | Select which shard to run, assuming the ``--num-shards=M`` option was | 
|  | 186 | provided. The two options must be used together, and the value of ``N`` | 
|  | 187 | must be in the range ``1..M``. The environment variable | 
|  | 188 | ``LIT_RUN_SHARD`` can also be used in place of this option. | 
|  | 189 |  | 
| George Karpenkov | 22a402f | 2017-07-07 00:22:11 +0000 | [diff] [blame] | 190 | .. option:: --filter=REGEXP | 
|  | 191 |  | 
|  | 192 | Run only those tests whose name matches the regular expression specified in | 
|  | 193 | ``REGEXP``. The environment variable ``LIT_FILTER`` can be also used in place | 
|  | 194 | of this option, which is especially useful in environments where the call | 
|  | 195 | to ``lit`` is issued indirectly. | 
|  | 196 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 197 | ADDITIONAL OPTIONS | 
|  | 198 | ------------------ | 
|  | 199 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 200 | .. option:: --debug | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 201 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 202 | Run :program:`lit` in debug mode, for debugging configuration issues and | 
|  | 203 | :program:`lit` itself. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 204 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 205 | .. option:: --show-suites | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 206 |  | 
| Daniel Dunbar | c4477df | 2013-08-08 20:59:25 +0000 | [diff] [blame] | 207 | List the discovered test suites and exit. | 
|  | 208 |  | 
|  | 209 | .. option:: --show-tests | 
|  | 210 |  | 
| Eric Christopher | 572e03a | 2015-06-19 01:53:21 +0000 | [diff] [blame] | 211 | List all of the discovered tests and exit. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 212 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 213 | EXIT STATUS | 
|  | 214 | ----------- | 
|  | 215 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 216 | :program:`lit` will exit with an exit code of 1 if there are any FAIL or XPASS | 
|  | 217 | results.  Otherwise, it will exit with the status 0.  Other exit codes are used | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 218 | for non-test related failures (for example a user error or an internal program | 
|  | 219 | error). | 
|  | 220 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 221 | .. _test-discovery: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 222 |  | 
|  | 223 | TEST DISCOVERY | 
|  | 224 | -------------- | 
|  | 225 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 226 | The inputs passed to :program:`lit` can be either individual tests, or entire | 
|  | 227 | directories or hierarchies of tests to run.  When :program:`lit` starts up, the | 
|  | 228 | first thing it does is convert the inputs into a complete list of tests to run | 
|  | 229 | as part of *test discovery*. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 230 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 231 | In the :program:`lit` model, every test must exist inside some *test suite*. | 
|  | 232 | :program:`lit` resolves the inputs specified on the command line to test suites | 
|  | 233 | by searching upwards from the input path until it finds a :file:`lit.cfg` or | 
|  | 234 | :file:`lit.site.cfg` file.  These files serve as both a marker of test suites | 
|  | 235 | and as configuration files which :program:`lit` loads in order to understand | 
|  | 236 | how to find and run the tests inside the test suite. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 237 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 238 | Once :program:`lit` has mapped the inputs into test suites it traverses the | 
|  | 239 | list of inputs adding tests for individual files and recursively searching for | 
|  | 240 | tests in directories. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 241 |  | 
|  | 242 | This behavior makes it easy to specify a subset of tests to run, while still | 
|  | 243 | allowing the test suite configuration to control exactly how tests are | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 244 | interpreted.  In addition, :program:`lit` always identifies tests by the test | 
|  | 245 | suite they are in, and their relative path inside the test suite.  For | 
|  | 246 | appropriately configured projects, this allows :program:`lit` to provide | 
|  | 247 | convenient and flexible support for out-of-tree builds. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 248 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 249 | .. _test-status-results: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 250 |  | 
|  | 251 | TEST STATUS RESULTS | 
|  | 252 | ------------------- | 
|  | 253 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 254 | Each test ultimately produces one of the following six results: | 
|  | 255 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 256 | **PASS** | 
|  | 257 |  | 
|  | 258 | The test succeeded. | 
|  | 259 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 260 | **XFAIL** | 
|  | 261 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 262 | The test failed, but that is expected.  This is used for test formats which allow | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 263 | specifying that a test does not currently work, but wish to leave it in the test | 
|  | 264 | suite. | 
|  | 265 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 266 | **XPASS** | 
|  | 267 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 268 | The test succeeded, but it was expected to fail.  This is used for tests which | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 269 | were specified as expected to fail, but are now succeeding (generally because | 
|  | 270 | the feature they test was broken and has been fixed). | 
|  | 271 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 272 | **FAIL** | 
|  | 273 |  | 
|  | 274 | The test failed. | 
|  | 275 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 276 | **UNRESOLVED** | 
|  | 277 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 278 | The test result could not be determined.  For example, this occurs when the test | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 279 | could not be run, the test itself is invalid, or the test was interrupted. | 
|  | 280 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 281 | **UNSUPPORTED** | 
|  | 282 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 283 | The test is not supported in this environment.  This is used by test formats | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 284 | which can report unsupported tests. | 
|  | 285 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 286 | Depending on the test format tests may produce additional information about | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 287 | their status (generally only for failures).  See the :ref:`output-options` | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 288 | section for more information. | 
|  | 289 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 290 | .. _lit-infrastructure: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 291 |  | 
|  | 292 | LIT INFRASTRUCTURE | 
|  | 293 | ------------------ | 
|  | 294 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 295 | This section describes the :program:`lit` testing architecture for users interested in | 
|  | 296 | creating a new :program:`lit` testing implementation, or extending an existing one. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 297 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 298 | :program:`lit` proper is primarily an infrastructure for discovering and running | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 299 | arbitrary tests, and to expose a single convenient interface to these | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 300 | tests. :program:`lit` itself doesn't know how to run tests, rather this logic is | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 301 | defined by *test suites*. | 
|  | 302 |  | 
|  | 303 | TEST SUITES | 
|  | 304 | ~~~~~~~~~~~ | 
|  | 305 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 306 | As described in :ref:`test-discovery`, tests are always located inside a *test | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 307 | suite*.  Test suites serve to define the format of the tests they contain, the | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 308 | logic for finding those tests, and any additional information to run the tests. | 
|  | 309 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 310 | :program:`lit` identifies test suites as directories containing ``lit.cfg`` or | 
|  | 311 | ``lit.site.cfg`` files (see also :option:`--config-prefix`).  Test suites are | 
|  | 312 | initially discovered by recursively searching up the directory hierarchy for | 
|  | 313 | all the input files passed on the command line.  You can use | 
|  | 314 | :option:`--show-suites` to display the discovered test suites at startup. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 315 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 316 | Once a test suite is discovered, its config file is loaded.  Config files | 
|  | 317 | themselves are Python modules which will be executed.  When the config file is | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 318 | executed, two important global variables are predefined: | 
|  | 319 |  | 
| Eric Fiselier | 6c53c86 | 2014-08-15 05:54:19 +0000 | [diff] [blame] | 320 | **lit_config** | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 321 |  | 
|  | 322 | The global **lit** configuration object (a *LitConfig* instance), which defines | 
|  | 323 | the builtin test formats, global configuration parameters, and other helper | 
|  | 324 | routines for implementing test configurations. | 
|  | 325 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 326 | **config** | 
|  | 327 |  | 
|  | 328 | This is the config object (a *TestingConfig* instance) for the test suite, | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 329 | which the config file is expected to populate.  The following variables are also | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 330 | available on the *config* object, some of which must be set by the config and | 
|  | 331 | others are optional or predefined: | 
|  | 332 |  | 
|  | 333 | **name** *[required]* The name of the test suite, for use in reports and | 
|  | 334 | diagnostics. | 
|  | 335 |  | 
|  | 336 | **test_format** *[required]* The test format object which will be used to | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 337 | discover and run tests in the test suite.  Generally this will be a builtin test | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 338 | format available from the *lit.formats* module. | 
|  | 339 |  | 
| Sergey Matveev | 8dbcb35 | 2013-05-30 12:37:52 +0000 | [diff] [blame] | 340 | **test_source_root** The filesystem path to the test suite root.  For out-of-dir | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 341 | builds this is the directory that will be scanned for tests. | 
|  | 342 |  | 
|  | 343 | **test_exec_root** For out-of-dir builds, the path to the test suite root inside | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 344 | the object directory.  This is where tests will be run and temporary output files | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 345 | placed. | 
|  | 346 |  | 
|  | 347 | **environment** A dictionary representing the environment to use when executing | 
|  | 348 | tests in the suite. | 
|  | 349 |  | 
|  | 350 | **suffixes** For **lit** test formats which scan directories for tests, this | 
| Dmitri Gribenko | 9e4fc28 | 2013-01-19 20:35:18 +0000 | [diff] [blame] | 351 | variable is a list of suffixes to identify test files.  Used by: *ShTest*. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 352 |  | 
|  | 353 | **substitutions** For **lit** test formats which substitute variables into a test | 
| Dmitri Gribenko | 9e4fc28 | 2013-01-19 20:35:18 +0000 | [diff] [blame] | 354 | script, the list of substitutions to perform.  Used by: *ShTest*. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 355 |  | 
|  | 356 | **unsupported** Mark an unsupported directory, all tests within it will be | 
| Dmitri Gribenko | 9e4fc28 | 2013-01-19 20:35:18 +0000 | [diff] [blame] | 357 | reported as unsupported.  Used by: *ShTest*. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 358 |  | 
|  | 359 | **parent** The parent configuration, this is the config object for the directory | 
|  | 360 | containing the test suite, or None. | 
|  | 361 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 362 | **root** The root configuration.  This is the top-most :program:`lit` configuration in | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 363 | the project. | 
|  | 364 |  | 
| Rafael Espindola | 2a2a097 | 2013-07-26 22:32:58 +0000 | [diff] [blame] | 365 | **pipefail** Normally a test using a shell pipe fails if any of the commands | 
|  | 366 | on the pipe fail. If this is not desired, setting this variable to false | 
|  | 367 | makes the test fail only if the last command in the pipe fails. | 
|  | 368 |  | 
| Daniel Sanders | 6151699 | 2016-07-26 13:23:27 +0000 | [diff] [blame] | 369 | **available_features** A set of features that can be used in `XFAIL`, | 
|  | 370 | `REQUIRES`, and `UNSUPPORTED` directives. | 
|  | 371 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 372 | TEST DISCOVERY | 
|  | 373 | ~~~~~~~~~~~~~~ | 
|  | 374 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 375 | Once test suites are located, :program:`lit` recursively traverses the source | 
| Sergey Matveev | 8dbcb35 | 2013-05-30 12:37:52 +0000 | [diff] [blame] | 376 | directory (following *test_source_root*) looking for tests.  When :program:`lit` | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 377 | enters a sub-directory, it first checks to see if a nested test suite is | 
|  | 378 | defined in that directory.  If so, it loads that test suite recursively, | 
|  | 379 | otherwise it instantiates a local test config for the directory (see | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 380 | :ref:`local-configuration-files`). | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 381 |  | 
|  | 382 | Tests are identified by the test suite they are contained within, and the | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 383 | relative path inside that suite.  Note that the relative path may not refer to | 
|  | 384 | an actual file on disk; some test formats (such as *GoogleTest*) define | 
|  | 385 | "virtual tests" which have a path that contains both the path to the actual | 
|  | 386 | test file and a subpath to identify the virtual test. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 387 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 388 | .. _local-configuration-files: | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 389 |  | 
|  | 390 | LOCAL CONFIGURATION FILES | 
|  | 391 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 392 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 393 | When :program:`lit` loads a subdirectory in a test suite, it instantiates a | 
| Jonathan Roelofs | c990459 | 2015-02-07 17:18:26 +0000 | [diff] [blame] | 394 | local test configuration by cloning the configuration for the parent directory | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 395 | --- the root of this configuration chain will always be a test suite.  Once the | 
|  | 396 | test configuration is cloned :program:`lit` checks for a *lit.local.cfg* file | 
|  | 397 | in the subdirectory.  If present, this file will be loaded and can be used to | 
|  | 398 | specialize the configuration for each individual directory.  This facility can | 
|  | 399 | be used to define subdirectories of optional tests, or to change other | 
|  | 400 | configuration parameters --- for example, to change the test format, or the | 
|  | 401 | suffixes which identify test files. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 402 |  | 
| Paul Robinson | f88cc14 | 2016-04-04 17:14:45 +0000 | [diff] [blame] | 403 | PRE-DEFINED SUBSTITUTIONS | 
|  | 404 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 405 |  | 
|  | 406 | :program:`lit` provides various patterns that can be used with the RUN command. | 
| David Bozier | 9126f54 | 2017-02-09 14:12:30 +0000 | [diff] [blame] | 407 | These are defined in TestRunner.py. The base set of substitutions are: | 
| Paul Robinson | f88cc14 | 2016-04-04 17:14:45 +0000 | [diff] [blame] | 408 |  | 
| Jordan Rose | e55d9a1 | 2017-10-14 04:01:27 +0000 | [diff] [blame] | 409 | ========== ============== | 
|  | 410 | Macro      Substitution | 
|  | 411 | ========== ============== | 
|  | 412 | %s         source path (path to the file currently being run) | 
|  | 413 | %S         source dir (directory of the file currently being run) | 
|  | 414 | %p         same as %S | 
|  | 415 | %{pathsep} path separator | 
|  | 416 | %t         temporary file name unique to the test | 
| Kuba Mracek | a2e0c24 | 2018-08-25 01:27:48 +0000 | [diff] [blame] | 417 | %T         parent directory of %t (not unique, deprecated, do not use) | 
| Jordan Rose | e55d9a1 | 2017-10-14 04:01:27 +0000 | [diff] [blame] | 418 | %%         % | 
|  | 419 | ========== ============== | 
| Paul Robinson | f88cc14 | 2016-04-04 17:14:45 +0000 | [diff] [blame] | 420 |  | 
| David Bozier | 9126f54 | 2017-02-09 14:12:30 +0000 | [diff] [blame] | 421 | Other substitutions are provided that are variations on this base set and | 
|  | 422 | further substitution patterns can be defined by each test module. See the | 
|  | 423 | modules :ref:`local-configuration-files`. | 
| Paul Robinson | f88cc14 | 2016-04-04 17:14:45 +0000 | [diff] [blame] | 424 |  | 
| David Bozier | 9126f54 | 2017-02-09 14:12:30 +0000 | [diff] [blame] | 425 | More detailed information on substitutions can be found in the | 
| Paul Robinson | f88cc14 | 2016-04-04 17:14:45 +0000 | [diff] [blame] | 426 | :doc:`../TestingGuide`. | 
|  | 427 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 428 | TEST RUN OUTPUT FORMAT | 
|  | 429 | ~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 430 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 431 | The :program:`lit` output for a test run conforms to the following schema, in | 
|  | 432 | both short and verbose modes (although in short mode no PASS lines will be | 
|  | 433 | shown).  This schema has been chosen to be relatively easy to reliably parse by | 
|  | 434 | a machine (for example in buildbot log scraping), and for other tools to | 
|  | 435 | generate. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 436 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 437 | Each test result is expected to appear on a line that matches: | 
|  | 438 |  | 
|  | 439 | .. code-block:: none | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 440 |  | 
| Eli Bendersky | 9d07f94 | 2012-11-20 00:26:08 +0000 | [diff] [blame] | 441 | <result code>: <test name> (<progress info>) | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 442 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 443 | where ``<result-code>`` is a standard test result such as PASS, FAIL, XFAIL, | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 444 | XPASS, UNRESOLVED, or UNSUPPORTED.  The performance result codes of IMPROVED and | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 445 | REGRESSED are also allowed. | 
|  | 446 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 447 | The ``<test name>`` field can consist of an arbitrary string containing no | 
|  | 448 | newline. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 449 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 450 | The ``<progress info>`` field can be used to report progress information such | 
|  | 451 | as (1/300) or can be empty, but even when empty the parentheses are required. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 452 |  | 
|  | 453 | Each test result may include additional (multiline) log information in the | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 454 | following format: | 
|  | 455 |  | 
|  | 456 | .. code-block:: none | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 457 |  | 
| Eli Bendersky | 9d07f94 | 2012-11-20 00:26:08 +0000 | [diff] [blame] | 458 | <log delineator> TEST '(<test name>)' <trailing delineator> | 
|  | 459 | ... log message ... | 
|  | 460 | <log delineator> | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 461 |  | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 462 | where ``<test name>`` should be the name of a preceding reported test, ``<log | 
|  | 463 | delineator>`` is a string of "*" characters *at least* four characters long | 
|  | 464 | (the recommended length is 20), and ``<trailing delineator>`` is an arbitrary | 
|  | 465 | (unparsed) string. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 466 |  | 
|  | 467 | The following is an example of a test run output which consists of four tests A, | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 468 | B, C, and D, and a log message for the failing test C: | 
|  | 469 |  | 
|  | 470 | .. code-block:: none | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 471 |  | 
|  | 472 | PASS: A (1 of 4) | 
|  | 473 | PASS: B (2 of 4) | 
|  | 474 | FAIL: C (3 of 4) | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 475 | ******************** TEST 'C' FAILED ******************** | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 476 | Test 'C' failed as a result of exit code 1. | 
| Dmitri Gribenko | 6e303f7 | 2012-11-29 17:05:34 +0000 | [diff] [blame] | 477 | ******************** | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 478 | PASS: D (4 of 4) | 
|  | 479 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 480 | LIT EXAMPLE TESTS | 
|  | 481 | ~~~~~~~~~~~~~~~~~ | 
|  | 482 |  | 
| Dmitri Gribenko | e260d3a | 2012-11-29 18:03:08 +0000 | [diff] [blame] | 483 | The :program:`lit` distribution contains several example implementations of | 
|  | 484 | test suites in the *ExampleTests* directory. | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 485 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 486 | SEE ALSO | 
|  | 487 | -------- | 
|  | 488 |  | 
| Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 489 | valgrind(1) |