Criterion v2.3.0 is finally out -- the full changelog (along with
the changes since rc2) is attached.
In addition to those changes, I have started to rewrite the internals
of criterion to allow better control over the test lifecycle.
The first major one is the rewrite of the I/O layer with a protobuf
definition and nanomsg, and while I wanted to limit the 2.3.0 release
to make everything work as 2.2.x and before, this change will bring
to the table a lot more for subsequent releases, such as:
* A standalone client-server mode.
* Multiple server transports (fifo, tcp, websocket, ...).
* External tests, embedded tests.
* Hierarchical subtests.
The second rewrite was around the fork() mechanics and test sandboxing
in general. It has always been *very* important for me to always run
the tests in a sandboxed process, because I wanted criterion to be
reliable and providing a way to disable that felt like a hack.
This, however, complicates debugging for users, and was a pain to
maintain on windows where fork() had to be emulated. This is why I
worked on a sandboxing library called BoxFort  to address this
in a *fast* and *convenient* way. The library takes care of creating
a new process, maps inherited data with copy-on-write, and runs an
arbitrary user function.
The introduction of BoxFort made possible a lot of awesome features
such as running tests in a dedicated debugging server or controlling
their quotas, and fixed a lot of details where we had to provide a
workaround for (for instance, --no-early-exit is now a no-op,
coverage works out of the box, and no resource leaks from the parent to
the child process can happen, ever).
Finally, I would like to also thank all of the contributors that helped
shape the new features of 2.3.0, you guys did an outstanding work.
Changes since 2.3.0-rc2:
* Fix: --debug=idle no longer hangs forever when debugging with visual
* Fix: Criterion no longer crashes when trying to instanciate a worker
arena on 32-bit processes.
* Fix: Theories no longer crash when an assert fails on windows.
* Fix: Workers no longer crash randomly due to bad address denormalization.
* Fix: Workers no longer crash randomly when run in parallel on windows.
* 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"
* Addition: assertions on wide-strings are now available (Kevin "kevinoid"
* 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,
* Breaking: dropped support for MinGW, use MinGW-w64.
* Breaking: dropped support for Windows XP, use Windows 7 and later.
* 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"
* 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
* Change: tests are no longer executed in parallel on windows by default
to mitigate a nanomsg bug (see
* Change: xml reports now includes elapsed times ("kaidowei").
* Deprecation: --no-early-exit is now a no-op and should no longer be
* 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ó
* Fix: position-independent executables now work.
* Fix: string assertions no longer crash with a NULL parameter
* 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.
Franklin "Snaipe" Mathieu