# Tests

## Unit tests

There is a comprehensive test suite employing CMocka. You can run all of them using `ctest` in the build directory. Individual tests are themselves runnable. Please refer to CTest documentation for detailed information on how to specify particular subset of tests.

## Testing for memory leaks

Every release is tested for memory correctness. You can run these tests by passing the `-T memcheck` flag to `ctest`. [1]

[1]

Project should be configured with `-DCMAKE_BUILD_TYPE=Debug` to obtain meaningful description of location of the leak. You might also need `--dsymutil=yes` on OS X.

## Code coverage

Every release is inspected using GCOV/LCOV. Platform-independent code should be fully covered by the test suite. Simply run

    make coverage

or alternatively run `lcov` by hand using

    lcov --capture --directory . --output-file coverage.info
    genhtml coverage.info --output-directory out

## Fuzz testing

Every release is tested using a fuzz test. In this test, a huge buffer filled with random data is passed to the decoder. We require that it either succeeds or fail with a sensible error, without leaking any memory. This is intended to simulate real-world situations where data received from the network are CBOR-decoded before any further processing.