2026-09-05 Franklin "Snaipe" Mathieu * criterion: version 2.5.0 * Addition: added --default-timeout CLI switch to set a fallback timeout for tests that have no timeout set. Unlike --timeout, which caps the timeout of every test, explicitly timed tests are left untouched (Matéo LE FLEM). * Addition: added --show-skipped CLI switch to show the number of skipped tests in the synthesis line. * Breaking: ABI incompatibility with prior versions of criterion. You **must** recompile your tests. * Change: cr_get_redirected_stdout(), cr_get_redirected_stderr() and cr_get_redirected_stdin() (and their C++ counterparts) now return a stream owned by the caller, who is responsible for closing it. Closing that stream no longer interferes with the standard stream assertions. * Change: the standard stream assertions (cr_assert_stdout_eq_str and friends) now flush the stream before comparing its contents, so tests no longer need to fflush() or disable buffering beforehand. Each assertion consumes the output written since the previous one. * Fix: fixed crash when a standard stream assertion was used more than once in a test, or when the test wrote to the stream after asserting on it. * Fix: standard stream assertions now fail with an explicit message instead of hanging when the stream was never redirected. * Fix: fixed any() only passing when its last operand was true (Ray Chern). * Fix: fixed result propagation of nested assertion combinators, and not() being ignored when applied to another combinator. * Fix: sibling assertion combinators, like all(any(...), any(...)), now compile. * Fix: failing not() and none() operands were reported with "" instead of their values. Failing combinators now also print a header line above their failing operands. * Fix: assertion failures whose value diff is empty (because the user stringifier produced the same output for different values) now print the raw actual and expected values instead of a generic message. * Fix: fixed plain expressions in the new assertion API failing when they evaluated to a non-zero value other than 1, like cr_assert(flags & 4). * Fix: plain expressions starting with an operator, a literal or a cast can now be passed to the new assertion API by wrapping them in an extra pair of parentheses, like cr_assert((!x)). * Fix: fixed undefined behavior (null pointer arithmetic, reported by UBSan) when computing the length of array type tags in the new assertion API. * Fix: fixed multiple definition errors when ReportHook was used on the same line in different files, or several times in one macro (Cade-Peterson). * Fix: tests, suites, parameterized tests and report hooks are no longer discarded by the linker when building with optimizations or --gc-sections (Jerry James). * Fix: the cleanup function of parameterized tests was called as soon as the last test worker had been spawned rather than after all workers exited, which crashed with --jobs > 1. * Fix: skipped tests with an expected .signal or .exit_code are no longer reported as failed. * Fix: criterion::allocator no longer uses std::allocator, which is deprecated in C++17 and removed in C++20. * Misc: the build system now detects a system-wide klib installation instead of always falling back to the wrap. * Misc: replaced the discontinued Cirrus CI; FreeBSD, macOS (x86-64) and Windows are tested on GitHub Actions again. * Misc: fixed the extraction of translatable messages and updated the German and French translations. * Misc: various documentation fixes. * Misc: various build system fixes. * Misc: various updates to dependencies. The full git changelog may be accessed with `git log v2.4.3..v2.5.0`. 2025-10-05 Franklin "Snaipe" Mathieu * criterion: version 2.4.3 * Fix: fixed C23 compilation (Petr Gajdos) * Fix: fixed compilation on FreeBSD 14.2 * Misc: CMake FindCriterion improvements (Peter Kokot). * Misc: various documentation fixes (Yohann Boniface, Christopher Sahnwaldt, Jurriaan H. Spaaks, Jonatan Schroeder, Benjamin Linskey, Sebastian Certuche). * Misc: various build system fixes (Arthur Skowronek). * Misc: various updates to dependencies. The full git changelog may be accessed with `git log v2.4.2..v2.4.3`. 2023-04-29 Franklin "Snaipe" Mathieu * criterion: version 2.4.2 * Fix: fixed crash in assert failure reporting when there was no diff. If the user-provided function to stringify an object was bugged and produced equal output for non-equal objects, thus producing an empty diff, Criterion crashed trying to access an unset parameter list. * Fix: fixed crashing tests when Criterion was compiled with nanopb>=0.4.7 (Balazs Scheidler). * Fix: fixed deadlock when test timeout was specified and the system was overloaded. * Fix: fixed segfault if map_shdr fails (David Gloe). * Fix: fixed memory leak on test failure (Jookia). * Fix: fixed gt() and ge(). * Fix: escape XML/JSON reports. * Misc: converted klib and debugbreak submodules to subprojects (Cristian Prieto). * Misc: various documentation fixes (Yuri Victorovich, Jonas Schulze). * Misc: various updates to dependencies. The full git changelog may be accessed with `git log v2.4.1..v2.4.2`. 2022-04-13 Franklin "Snaipe" Mathieu * criterion: version 2.4.1 * Fix: compiling tests with link-time-optimization no longer causes the tests to not get detected and run. * Fix: theories now correctly iterate through the argument matrix. This manifested as theories running the expected number of times, but always using the first possible combination of parameters. * Fix: fixed leak due to not calling git_libgit2_shutdown. This should appease valgrind and the address sanitizer. * Misc: added suggestion to run ldconfig in installation documentation (Gerald Senarclens de Grancy). The full git changelog may be accessed with `git log v2.4.0..v2.4.1`. 2022-01-03 Franklin "Snaipe" Mathieu * criterion: version 2.4.0 * Addition: added new experimental assertion API. The API brings a more generic approach for comparing values of arbitrary types, alongside value diffing on error. * Addition: added --color= CLI switch to explicitly add or strip colors from the test runner output. * Addition: added --encoding CLI switch to control the use of unicode in the test runner output. * Addition: added ARM (v6/v7) and ARM64 support. Huge kudos to László Várady (MrAnno) for fixing most of the issues and testing on real hardware. * Addition: added directory support to write test reports via --output. If the provided path is an existing directory, the report will be created in that directory, and the report file is named after the binary (László Várady). * Addition: added support for setting RPATH for pkg-config users (-Drpath-in-pkgconfig=enabled). * Breaking: the runner now exits with a non-zero exit status on warning by default. --ignore-warnings has been added to restore the old behaviour. * Breaking: changed '-' to mean stdout rather than stderr. /dev/stderr can instead be used to signify stderr, even on Windows. * Breaking: switched build system from CMake to Meson. * Deprecation: --ascii and CRITERION_USE_ASCII are deprecated in favor of passing --encoding=C or setting LC_ALL=C. * Fix: fixed c++ allocator to work with older compiler versions. * Fix: fixed CRITERION_DISABLE_TIME_MEASUREMENTS=1 not being picked up. * Fix: allow log functions to be called from runner-side report hooks. * Fix: allow assertions to execute in fixtures (init/fini). * Fix: test std{out,err} is now discarded when operating in quiet mode. They are also discarded when the runner output is redirected via --output. * Fix: cr_file_match_str now fails if the input is longer than the expected value (Ethiraric). * Fix: cr_file_match_str passes when both the input and expected value are empty (Ethiraric). * Fix: fixed throw assertion not failing when nothing throws. * Fix: fixed major slowdowns from running criterion in container environments with a high open file descriptor limit. * Fix: fixed libcriterion.so not being loadable on WSL due to the stack not being executable. * Fix: worked around msync not properly working on WSL and causing the runner to break. * Fix: fixed use-after-free in fprintf_locale. * Fix: fixed cr_file_match_file matching only the last block (Ethiraric). * Fix: fixed TAP test description format. TAP mandates that details must use a YAML format, while Criterion directly dumped the description string in the detail section. * Fix: fixed TAP output to comment out blank lines, since the TAP spec doesn't say anything about blank lines, and some parsers have trouble with them. * Fix: fixed c++20 incompatibility with the criterion allocator (Ersikan). * Fix: fixed escape of special characters in XML output (Paul Khuat-Duy). * Fix: fixed crash when passing an empty string to cr_log_info (Ersikan). * Fix: fixed compilation errors on macOS (Kare Nuorteva, László Várady). * Fix: fixed --debug flag aborting runner with gdbserver >= 8.3. * Fix: fixed gdb stepping issue with '--debug' on macOS (Apple silicon). * Misc: various documentation fixes (Oleksii Vilchanskyi, Sam Zaydel, Karim Dridi, Florent Poinsard, Tim Gates, László Várady, Japroz Saini). * Misc: various updates to dependencies (László Várady). * Misc: various build system fixes (Tomasz Sieprawski, László Várady). * Misc: various fixes to the autotools example (Bruno Belany). * Misc: from now on, --debug will fall back to the idle method in case no debugger can be found. The full git changelog may be accessed with `git log v2.3.3..v2.4.0`. 2018-11-05 Franklin "Snaipe" Mathieu * criterion: version 2.3.3 * Fix: Clang 5.0.x was producing test executables that caused Criterion to fork-bomb the host system. The issue has been fixed, and Criterion now pro-actively aborts itself if it detects a fork-bomb loop to avoid similar issues in the future. The full git changelog may be accessed with `git log v2.3.2..v2.3.3`. 2017-04-08 Franklin "Snaipe" Mathieu * criterion: version 2.3.2 * Fix: timings were always reporting `0`; they are now working as expected. The full git changelog may be accessed with `git log v2.3.1..v2.3.2`. 2017-02-07 Franklin "Snaipe" Mathieu * criterion: version 2.3.1 * Fix: correctly handle malformed --debug parameter * Fix: replaced the cryptic message when the debugger is not present with a more explicit one. * Fix: cache section limits on report hooks for significantly better performance. * Fix: don't report passing assertions by default for significantly better performance. * Addition: added --full-stats CLI switch to report passing assertions for compatibility purposes. The full git changelog may be accessed with `git log v2.3.0-1..v2.3.1`. 2016-12-07 Franklin "Snaipe" Mathieu * criterion: version 2.3.0-1 This is a re-release of v2.3.0. There are no substantial changes in the release, only fixes in the build system. If you are not building criterion from source, you can ignore this changelog. * Fix: Updated version strings in messages * Fix: The build system now searches for local installations of non-criterion-specific dependencies. 2016-09-18 Franklin "Snaipe" Mathieu * criterion: version 2.3.0 * Addition: added German translation files (Matthias "ailu" Günzel). * Addition: added a pkg-config file. * Addition: allow tests to be skipped with cr_skip_test() (Matthias "ailu" Günzel). * Addition: assertions on wide-strings are now available (Kevin "kevinoid" Locke). * Addition: crash-mode with --crash to raise a trap when an assertion fails for debugging purposes (Matthias "ailu" Günzel). * Addition: debugging mode with --debug. * Addition: global test timeout with --timeout. * Addition: header files in the public API now have doxygen documentation (Matthias "ailu" Günzel). * Addition: test filtering now works on windows. * Addition: user logging API with cr_log, cr_log_info, cr_log_warning, and cr_log_error. * Breaking: dropped support for MinGW, use MinGW-w64. * Breaking: dropped support for Windows XP, use Windows 7 and later. * Breaking: log_pre_init and log_pre_test in the internal logger API now takes an additional parameter. * Breaking: the SOVERSION now follows the SONAME major independently of the project version. * Change: --pattern has been renamed to --filter. * Change: removed dependency on PCRE for filtering (Matthias "ailu" Günzel). * Change: sections of all loaded shared modules are now inspected for tests and hooks. * Change: setting .exit_code = 0 now enforces the exit code of the test to be 0. * Change: string assertions now print the contents of string parameters ("kaidowei"). * Change: xml reports now includes elapsed times ("kaidowei"). * Deprecation: --no-early-exit is now a no-op and should no longer be used. * Deprecation: internal logging API is no longer public, fallbacks to the new logging API. * Fix: fail-fast now works correctly. * Fix: fixed FindCriterion.cmake with the correct package name (László "MrAnno" Várady). * Fix: position-independent executables now work. * Fix: string assertions no longer crash with a NULL parameter ("kaidowei"). * Fix: the data pipe no longer gets corrupted when running a large quantity of assertions in parallel. * Fix: using dmalloc on tests now works. * Fix: using the GOLD linker rather than BFD now works. * Fix: using the musl C library now works. 2016-06-20 Franklin "Snaipe" Mathieu * criterion: version 2.2.2 * Fix: fixed deadlocks when tests are terminated too fast * Fix: fixed crash during test teardown if spawning new threads in the test * Fix: fixed memory leak in disabled tests 2016-02-06 Franklin "Snaipe" Mathieu * criterion: version 2.2.1 * Fix: fixed criterion not being embeddable with CMake's `add_directory` * Fix: fixed resource leaks in the child pump thread * Fix: fixed redirected standard streams being leaked by cr_(assert|expect)_std(out|err) * Fix: fixed out of bounds during assert message sending * Fix: fixed naming convention conflicts for internal variables used by the implementation of cr_assert * Fix: fixed empty format string warning with GCC 4.8 * Fix: fixed file-to-file comparison assert message being corrupted 2015-12-08 Franklin "Snaipe" Mathieu * criterion: version 2.2.0 * Breaking: Renamed all unprefixed internal macros and functions that were exposed in the API, and moved them to criterion/internal. This shouldn't break your code if you did not use these in the first place. * Change: Added language-specific wrapping logic to decouple the language the tests are written in from the test runner. * Change: Rewrote the reporting logic to allow multiple test reports to be written using any format. * Addition: Added parallel jobs for the test runner. * Addition: Added C++ allocator for STL collections based on cr_malloc/cr_free. * Addition: Added criterion::parameters in C++ for simpler parameter list generation. * Addition: Added saner defaults when the tests detect they run under valgrind. * Addition: Added basic Objective-C language support. * Addition: Added JUnit XML reporting. * Addition: Added JSON reporting. * Addition: Added dynamic reporter registration. * Addition: Added back support for GCC 4.6 when compiling C tests. * Addition: Added single test execution mode. * Removal: Removed all deprecated 1.x unprefixed assertion macros. * Fix: Fixed some memory corruption happening on rare occasions on assert messages. * Fix: Fixed deadlocks happening at random when a large quantity of assert is present. * Fix: Fixed the library not compiling with the intel compiler collection. * Deprecation: All cr_assume_strings_* macros are deprecated in favor of cr_assume_str_*. * Deprecation: All cr_assume_arrays_* macros are deprecated in favor of cr_assume_arr_*. 2015-11-25 Franklin "Snaipe" Mathieu * criterion: version 2.1.1 * Fix: Fixed bug where the TAP output access the assert message after it has been freed, causing it to print garbage. 2015-09-21 Franklin "Snaipe" Mathieu * criterion: version 2.1.0 * Addition: Added file mocking utilities * Addition: Added parameterized tests 2015-09-20 Franklin "Snaipe" Mathieu * criterion: version 2.0.2 * Fix: Fixed rare bug where tests from only one compilation unit would run. 2015-09-19 Franklin "Snaipe" Mathieu * criterion: version 2.0.1 * Fix: Fixed wrong setjmp() usage making tests compiled with optimisations crash. 2015-09-14 Franklin "Snaipe" Mathieu * criterion: version 2.0.0 * Breaking: ABI incompatibility with prior versions of criterion. You **must** recompile your tests. * Breaking: cr_abort_test(NULL) does not compile anymore. * Change: Changed all assertion macros to accept a printf format string as a message. * Change: Made the API C++11-compatible. * Change: Made the library ISO C compliant. You can now compile the library with VC 14+. * Addition: Added support for theories. * Addition: Added ability to test the exit status of a test. * Addition: Added C++11 throw assertions. * Addition: Added assert message localization. * Addition: Added test timeouts. * Addition: Added test standard i/o redirection & file comparison assertions. * Removal: Removed the deprecated prefixless assertion macros * Deprecation: Deprecated cr_abort_test. * Deprecation: cr_{assert,expect}_strings_* and cr_{assert,expect}_arrays_* are deprecated in favor of cr_{assert,expect}_str_* and cr_{assert,expect}_arr_* respectively. 2015-08-20 Franklin "Snaipe" Mathieu * criterion: version 1.3.1 * Fixed OS X and Windows section iterations * Fixed report hooks not working on OS X and Windows * Fixed duplicated output when writing in PRE_ALL to a redirected stdout/err * Added -S switch to display filenames in their short version 2015-08-05 Franklin "Snaipe" Mathieu * criterion: version 1.3.0 * Turned the library into a shared library. * Added extended globbing for --pattern (requires PCRE) * Switched to a CMake build system * Fixed windows builds & output * Added basic windows SEH-to-signal translator 2015-04-26 Franklin "Snaipe" Mathieu * criterion: version 1.2.1 * Added a cr_ prefix to all assertion macros. Old macros are deprecated and will be removed in a future version. 2015-04-15 Franklin "Snaipe" Mathieu * criterion: version 1.2.0 * Added native Windows support through MinGW * Fixed inaccurate statistics on disabled and crashing tests * Fixed asserts not aborting the test when used in functions * Fixed programs not compiling when no tests are declared * Added assert_null to test for pointer nullity * Added assert_arrays_eq_cmp for padded struct arrays equality * Added i18n support * Added fr_FR localization 2015-03-24 Franklin "Snaipe" Mathieu * criterion: version 1.1.0 * Refactored logging system * Changed output format to a better-looking one * Added Syntactic coloration * Added test suite separation * Added test suite statistics * Added --list option * Added --fail-fast option * Added --pattern option 2015-03-18 Franklin "Snaipe" Mathieu * criterion: version 1.0.0 * Added test timings * Changed assert prototypes * ANSI compliance over header files * Windows + FreeBSD compatibility 2015-03-11 Franklin "Snaipe" Mathieu * criterion: version 0.3.0 * A logging interface * Various readme and documentation changes * Default CLI options & environment variables * Mac OS X compatibility * Comparison assertions, floating-point equality assertions 2015-02-06 Franklin "Snaipe" Mathieu * criterion: version 0.2.0 * Added criterion internals. * Added Test, ReportHook, assert and expect macros.