Releases: catchorg/Catch2
Releases · catchorg/Catch2
v3.11.0
Fixes
- Fixed building on non-desktop GDK platforms (#3029)
- Fixed message macros being susceptible to race in specific scenario (#3031)
- Catch2's SEH filter will call the previously installed filter after reporting the error (#3033)
Improvements
- Handling of scoped messages (e.g.
CAPTURE) is a bit faster. - Better out-of-the-box support for QNX (#2953)
- Improved performance of assertions by up-to 10%
- Release mode assertion fast-path sees the biggest improvement.
- Faster processing of non-escaped strings in
--invisiblesmode. - Added support for Bazel's
TEST_RANDOM_SEEDenv var (#3021) - Added support for Bazel's
TEST_PREMATURE_EXIT_FILEenv var (#3020)- This creates a file that is deleted if the tests exit normally, but stays around if the process dies unexpectedly.
- This functionality is also exposed through CLI as
--premature-exit-guard-file
Miscellaneous
- Tuple.app has sponsored Catch2
v3.10.0
Fixes
- pkg-config files will take
DESTDIRenv var into account when selecting install destination (#3006, #3019) - Changed
filterto store the provided predicate by value (#3002, #3005)- This is done to avoid dangling-by-default behaviour when
filteris used insideGENERATE_COPY/GENERATE_REF.
- This is done to avoid dangling-by-default behaviour when
Improvements
- Escaping XML and JSON output is faster when the strings do not need escaping.
- The improvement starts at about 3x throughput, up to 10x for long strings.
- Message macros (
INFO,CAPTURE,WARN,SUCCEED, etc) are now thread safe.
v3.9.1
Fixes
- Fixed bad error reporting for multiple nested assertions (#1292)
- Fixed W4702 (unreachable code) in the polyfill for std::unreachable (#3007)
- Fixed decomposition of assertions comparing enum-backed bitfields (#3001)
- Fixed StringMaker specialization for
time_point<system_clock>with non-default duration type (#2685)
Improvements
- Exceptions thrown during stringification of decomposed expression no longer fail the assertion (#2980)
- The selection logic for
CATCH_TRAPprefers__builtin_debugtrapon all platforms when Catch2 is compiled with Clang
v3.9.0
Improvements
- Added experimental opt-in support for thread safe assertions
- Read the documentation for full details
- The default test run order has been changed to random
- Passing assertions are significantly faster when the reporter does not ask for
assertionEndedevents on passing assertions.- This is the default behaviour of e.g. Console or Compact reporter
- Simple
REQUIRE(true)is 60% faster in Release and 80% faster in Debug build configuration - Simple
REQUIRE_NOTHROWis 230% faster in Release and 430% faster in Debug build configuration - Simple
REQUIRE_THROWSis ~3% faster in Release and 20% faster in Debug build configuration (throwing introduces enough overhead that the optimizations inside Catch2 are mostly irrelevant)
- Small (2-5%) improvement if the reporter asks for
assertionEndedevents for passing assertions. - The exit code constants are part of the Session API. (#2955, #2976)
- Suppressed unsigned integer overflow checking in locations with intended overflow (#2965)
- Reporters flush output after writing metadata, e.g. rng seed (#2964)
- Added unreachable after
FAILandSKIPmacros (#2941)- This allows the compiler to understand that the execution does not continue past the macro, and avoids warnings.
- Added fast path for
assertionStartingevent when no reporter requires it- For backwards compatibility, this fast path is opt-in
- A reporter can opt in by changing its
ReporterPreferences::shouldReportAllAssertionStarts
- Improved last seen source location tracking to be more precise
- This is used when reporting unexpected exceptions from tests
Fixes
- Fixed formatting of tags with more than 100 tests in the default
--list-tagsoutput (#2963) - Fixed Clang-Tidy's
readability-static-accessed-through-instancein tests - Fixed most of Clang-Tidy's
cppcoreguidelines-avoid-non-const-global-variables(#2582) - The lifetime of scoped messages now strictly obeys their scope (#1759, #2019, #2959)
- Previously Catch2 would try to keep them around during unexpected exception, to provide helpful context.
- The amount of surprises the irregularities caused was not worth the occasional utility provided.
TEMPLATE_TEST_CASE_SIGcan handle signatures consisting of only types (#2680, #2995)- Moved
catch_test_run_info.hppup frominternal/subfolder into the main one (#2972)
Miscellaneous
- pkg-config files are now generated at install time (#2979)
- This fixes missing debug suffix in library names
- This fixes install prefix mismatch between build config and actuall installation
v3.8.1
v3.8.0
Improvements
- Added
std::initializer_listoverloads for(Unordered)RangeEqualsmatcher (#2915, #2919) - Added explicit casts to silence GCC's
Wconversion(#2875) - Made the use of
builtin_constant_ptricks in assertion macros configurable (#2925)- It is used to prod GCC-like compilers into providing warnings for the asserted expressions, but the compilers miscompile it annoyingly often.
- Cleaned out Clang-Tidy's
performance-enum-sizewarnings - Added support for using
from_rangegenerator with iterators withvalue_type = const T(#2926)- This is not correct
value_typetypedef, but it is used in the wild and the change does not make the code meaningfully worse.
- This is not correct
Fixes
- Fixed crash when stringifying pre-1970 (epoch) dates on Windows (#2944)
Miscellaneous
- Fixes and improvements for
catch_discover_testsCMake helper- Removed redundant
CTEST_FILEparam when creating the indirection file forPRE_TESTdiscovery mode (#2936) - Rewrote the test discovery logic to use output from the JSON reporter
- This means that
catch_discover_testsnow requires CMake 3.19 or newer
- This means that
- Added
ADD_TAGS_AS_LABELSoption. If specified, each CTest test will be labeled with corrensponding Catch2's test tag
- Removed redundant
- Bumped up the minimum required CMake version to build Catch2 to 3.16
- Meson build now provides option to avoid installing Catch2
- Bazel build is moved to Bzlmod.
v3.7.1
Improvements
- Applied the JUnit reporter's optimization from last release to the SonarQube reporter
- Suppressed
-Wuseless-castinCHECK_THROWS_MATCHES(#2904) - Standardize exit codes for various failures
- Running no tests is now guaranteed to exit with 2 (without the
--allow-running-no-testsflag) - All tests skipped is now always 4 (...)
- Assertion failures are now always 42
- and so on
- Running no tests is now guaranteed to exit with 2 (without the
Fixes
- Fixed out-of-bounds access when the arg parser encounters single
-as an argument (#2905)
Miscellaneous
v3.7.0
Improvements
- Slightly improved compile times of benchmarks
- Made the resolution estimation in benchmarks slightly more precise
- Added new test case macro,
TEST_CASE_PERSISTENT_FIXTURE(#2885, #1602)- Unlike
TEST_CASE_METHOD, the same underlying instance is used for all partial runs of that test case
- Unlike
- MASSIVELY improved performance of the JUnit reporter when handling successful assertions (#2897)
- For 1 test case and 10M assertions, the new reporter runs 3x faster and uses up only 8 MB of memory, while the old one needs 7 GB of memory.
- Reworked how output redirects works.
- Combining a reporter writing to stdout with capturing reporter no longer leads to the capturing reporter seeing all of the other reporter's output.
- The file based redirect no longer opens up a new temporary file for each partial test case run, so it will not run out of temporary files when running many tests in single process.
Miscellaneous
- Better documentation for matchers on thrown exceptions (
REQUIRE_THROWS_MATCHES) - Improved
catch_discover_tests's handling of environment paths (#2878)- It won't reorder paths in
DL_PATHSorDYLD_FRAMEWORK_PATHSargs - It won't overwrite the environment paths for test discovery
- It won't reorder paths in
v3.6.0
Fixes
- Fixed Windows ARM64 build by fixing the preprocessor condition guarding use
_umul128intrinsic. - Fixed Windows ARM64EC build by removing intrinsic pragma it does not understand. (#2858)
- Why doesn't the x64-emulation build mode understand x64 pragmas? Don't ask me, ask the MSVC guys.
- Fixed the JUnit reporter sometimes crashing when reporting a fatal error. (#1210, #2855)
- The binary will still exit, but through the original error, rather than secondary error inside the reporter.
- The underlying fix applies to all reporters, not just the JUnit one, but only JUnit was currently causing troubles.
Improvements
- Disable
-Wnon-virtual-dtorin Decomposer and Matchers (#2854) precisionin floating point stringmakers defaults tomax_digits10.- This means that floating point values will be printed with enough precision to disambiguate any two floats.
- Column wrapping ignores ansi colour codes when calculating string width (#2833, #2849)
- This makes the output much more readable when the provided messages contain colour codes.
Miscellaneous
- Conan support improvements
SelfTesttarget can be built through Bazel (#2857)
v3.5.4
Fixes
- Fixed potential compilation error when asked to generate random integers whose type did not match
std::(u)int*_t.- This manifested itself when generating random
size_ts on MacOS
- This manifested itself when generating random
- Added missing outlined destructor causing
Wdelete-incompletewhen compiling against libstdc++ in C++23 mode (#2852) - Fixed regression where decomposing assertion with const instance of
std::foo_orderingwould not compile
Improvements
- Reintroduced support for GCC 5 and 6 (#2836)
- As with VS2017, if they start causing trouble again, they will be dropped again.
- Added workaround for targetting newest MacOS (Sonoma) using GCC (#2837, #2839)
CATCH_CONFIG_DEFAULT_REPORTERcan now be an arbitrary reporter spec- Previously it could only be a plain reporter name, so it was impossible to compile in custom arguments to the reporter.
- Improved performance of generating 64bit random integers by 20+%
Miscellaneous
- Significantly improved Conan in-tree recipe (#2831)
DL_PATHSincatch_discover_testsnow supports multiple arguments (#2852, #2736)- Fixed preprocessor logic for checking whether we expect reproducible floating point results in tests.
- Improved the floating point tests structure to avoid
Wunusedwhen the reproducibility tests are disabled (#2845)