---
sort: 2
---

# Tests

## How to run tests

The application binaries launched by the tests should be placed in `apps/`.
Every type of app tested should have a dedicated test file that can be launched like this:

```shell
python3 -m pytest -s -v tests/apps/
```

Crypto syscalls are tested using the following command:

```shell
make -C build/ test
```

Arguments can be given to `ctest`. For instance, to make the output of a
specific test verbose:

```shell
make -C build/ test ARGS='-V -R test_bip32'
```

## Code coverage

In order to build with code coverage instrumentation, the CMake configuration supports `CODE_COVERAGE` macro:
```shell
cmake -B build/ -DCODE_COVERAGE=ON -S .
make -C build/ clean
make -C build/ all
```

When using gcc to build the project (which is by default), this enables instrumentation with gcov: these commands created `.gcno` files in `build/`.

[lcov](http://ltp.sourceforge.net/coverage/lcov.php) can be used to collect code coverage and generates a HTML report in `coverage/`:
```shell
lcov -d . --zerocounters
lcov -d . --capture --initial -o coverage.base
RNG_SEED=0 make -C build/ test
lcov -d . --rc lcov_branch_coverage=1 --capture -o coverage.capture
lcov -d . --add-tracefile coverage.base --add-tracefile coverage.capture -o coverage.total
genhtml coverage.total -o coverage
```
