Releases: catchorg/Catch2
Releases · catchorg/Catch2
v3.7.1
Improvements
- Applied the JUnit reporter's optimization from last release to the SonarQube reporter
- Suppressed
-Wuseless-cast
inCHECK_THROWS_MATCHES
(#2904) - Standardize exit codes for various failures
- Running no tests is now guaranteed to exit with 2 (without the
--allow-running-no-tests
flag) - 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_PATHS
orDYLD_FRAMEWORK_PATHS
args - 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
_umul128
intrinsic. - 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-dtor
in Decomposer and Matchers (#2854) precision
in 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
SelfTest
target 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_t
s on MacOS
- This manifested itself when generating random
- Added missing outlined destructor causing
Wdelete-incomplete
when compiling against libstdc++ in C++23 mode (#2852) - Fixed regression where decomposing assertion with const instance of
std::foo_ordering
would 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_REPORTER
can 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_PATHS
incatch_discover_tests
now 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
Wunused
when the reproducibility tests are disabled (#2845)
v3.5.3
Fixes
- Fixed OOB access when computing filename tag (from the
-#
flag) for file without extension (#2798) - Fixed the linking against
log
on Android to bePRIVATE
(#2815) - Fixed
Wuseless-cast
in benchmarking internals (#2823)
Improvements
- Restored compatibility with VS2017 (#2792, #2822)
- The baseline for Catch2 is still C++14 with some reasonable workarounds for specific compilers, so if VS2017 starts acting up again, the support will be dropped again.
- Suppressed clang-tidy's
bugprone-chained-comparison
in assertions (#2801) - Improved the static analysis mode to evaluate arguments to
TEST_CASE
andSECTION
(#2817)- Clang-tidy should no longer warn about runtime arguments to these macros being unused in static analysis mode.
- Clang-tidy can warn on issues involved arguments to these macros.
- Added support for literal-zero detectors based on
consteval
constructors- This is required for compiling
REQUIRE((a <=> b) == 0)
against MSVC's stdlib. - Sadly, MSVC still cannot compile this assertion as it does not implement C++20 correctly.
- You can use
clang-cl
with MSVC's stdlib instead. - If for some godforsaken reasons you want to understand this better, read the two relevant commits:
dc51386b9fd61f99ea9c660d01867e6ad489b403
, and0787132fc82a75e3fb255aa9484ca1dc1eff2a30
.
- This is required for compiling
Miscellaneous
v3.5.2
v3.5.1
Improvements
- Significantly improved performance of the CLI parsing.
- This includes the cost of preparing the CLI parser, so Catch2's binaries start much faster.
Miscellaneous
v3.5.0
Improvements
- Introduced
CATCH_CONFIG_PREFIX_MESSAGES
to prefix only logging macros (#2544)- This means
INFO
,UNSCOPED_INFO
,WARN
andCAPTURE
.
- This means
- Section hints in static analysis mode are now
const
- This prevents Clang-Tidy from complaining about
misc-const-correctness
.
- This prevents Clang-Tidy from complaining about
from_range
generator supports C arrays and ranges that require ADL (#2737)- Stringification support for
std::optional
now also includesstd::nullopt
(#2740) - The Console reporter flushes output after writing benchmark runtime estimate.
- This means that you can immediately see for how long the benchmark is expected to run.
- Added workaround to enable compilation with ICC 19.1 (#2551, #2766)
- Compiling Catch2 for XBox should work out of the box (#2772)
- Catch2 should automatically disable getenv when compiled for XBox.
- Compiling Catch2 with exceptions disabled no longer triggers
Wunused-function
(#2726) random
Generators for integral types are now reproducible across different platforms- Unlike
<random>
, Catch2's generators also support 1 byte integral types (char
,bool
, ...)
- Unlike
random
Generators forfloat
anddouble
are now reproducible across different platformslong double
varies across different platforms too much to be reproducible- This guarantee applies only to platforms with IEEE 754 floats.
Fixes
- UDL declaration inside Catch2 are now strictly conforming to the standard
operator "" _a
is UB,operator ""_a
is fine. Seriously.
- Fixed
CAPTURE
tests failing to compile in C++23 mode (#2744) - Fixed missing include in
catch_message.hpp
(#2758) - Fixed
CHECK_ELSE
suppressing failure from uncaught exceptions(#2723)
Miscellaneous
- The documentation for specifying which tests to run through commandline has been completely rewritten (#2738)
- Fixed installation when building Catch2 with meson (#2722, #2742)
- Fixed
catch_discover_tests
when using custom reporter andPRE_TEST
discovery mode (#2747) catch_discover_tests
supports multi-config CMake generator inPRE_TEST
discovery mode (#2739, #2746)
v3.4.0
3.4.0
Improvements
VectorEquals
supports elements that provide only==
and not!=
(#2648)- Catch2 supports compiling with IAR compiler (#2651)
- Various small internal performance improvements
- Various small internal compilation time improvements
- XMLReporter now reports location info for INFO and WARN (#1251)
- This bumps up the xml format version to 3
- Documented that
SKIP
in generator constructor can be used to handle empty generator (#1593) - Added experimental static analysis support to
TEST_CASE
andSECTION
macros (#2681)- The two macros are redefined in a way that helps the SA tools reason about the possible paths through a test case with sections.
- The support is controlled by the
CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT
option and autodetects clang-tidy and Coverity.
*_THROWS
,*_THROWS_AS
, etc now suppress warning coming from__attribute__((warn_unused_result))
on GCC (#2691)- Unlike plain
[[nodiscard]]
, this warning is not silenced by void cast. WTF GCC?
- Unlike plain
Fixes
- Fixed
assertionStarting
events being sent after the expr is evaluated (#2678) - Errors in
TEST_CASE
tags are now reported nicely (#2650)
Miscellaneous
v3.3.2
Improvements
- Further reduced allocations
- The compact, console, TAP and XML reporters perform less allocations in various cases
- Removed 1 allocation per entered
SECTION
/TEST_CASE
. - Removed 2 allocations per test case exit, if stdout/stderr is captured
- Improved performance
- Section tracking is 10%-25% faster than in v3.3.0
- Assertion handling is 5%-10% faster than in v3.3.0
- Test case registration is 1%-2% faster than in v3.3.0
- Tiny speedup for registering listeners
- Tiny speedup for
CAPTURE
,TEST_CASE_METHOD
,METHOD_AS_TEST_CASE
, andTEMPLATE_LIST_TEST_*
macros.
Contains
,RangeEquals
andUnorderedRangeEquals
matchers now support ranges with iterator + sentinel pair- Added
IsNaN
matcher- Unlike
REQUIRE(isnan(x))
,REQUIRE_THAT(x, IsNaN())
shows you the value ofx
.
- Unlike
- Suppressed
declared_but_not_referenced
warning for NVHPC (#2637)
Fixes
- Fixed performance regression in section tracking introduced in v3.3.1
- Extreme cases would cause the tracking to run about 4x slower than in 3.3.0