property-based testing for C: generate input to find obscure bugs, then reduce to minimal failing input
Clone or download
silentbicycle v0.4.4 release.
Merge branch 'develop-0.4.4' - See `` for details.
Latest commit e2e46b4 Oct 6, 2018

theft: property-based testing for C

theft is a C library for property-based testing. Where example-based testing checks test results for specific input, theft tests assert general properties ("for any possible input, [some condition] should hold"), generate input, and search for counter-examples that make the test fail. If theft finds any failures, it also knows how to generate and test simpler variants of the input, and then report the simplest counter-example found.

theft is distributed under the ISC license.


theft does not depend on anything beyond C99 and a Unix-like environment. Its internal tests use greatest, but there is not any coupling between them. It contains implementations of the Mersenne Twister PRNG and the FNV-1a hashing algorithm - see their files for copyright info.

To build, using GNU make:

$ make

Note: You may need to call it as gmake, especially if building on BSD.

To build and run the tests:

$ make test

This will produce example output from several falsifiable properties, and confirm that failures have been found.

To install libtheft and its headers:

$ make install    # using sudo, if necessary

theft can also be vendored inside of projects -- in that case, just make sure the headers in ${VENDOR}/theft/inc/ are added to the -I include path, and ${VENDOR}/theft/build/libtheft.a is linked.


For usage documentation, see doc/


For some examples of properties to test, see doc/

Shrinking and Auto-shrinking

For more info about shrinking and auto-shrinking, see doc/


theft can fork before running properties, to shrink failures that make the code under test crash or exceed an optional timeout. For more info, see doc/