Skip to content

Releases: catchorg/Catch2

v3.7.1

17 Sep 08:50
v3.7.1
fa43b77
Compare
Choose a tag to compare

Improvements

  • Applied the JUnit reporter's optimization from last release to the SonarQube reporter
  • Suppressed -Wuseless-cast in CHECK_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

Fixes

  • Fixed out-of-bounds access when the arg parser encounters single - as an argument (#2905)

Miscellaneous

  • Added catch_config_prefix_messages.hpp to meson build (#2903)
  • catch_discover_tests now supports skipped tests (#2873)
    • You can get the old behaviour by calling catch_discover_tests with SKIP_IS_FAILURE option.

v3.7.0

14 Aug 10:11
v3.7.0
31588bb
Compare
Choose a tag to compare

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
  • 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 or DYLD_FRAMEWORK_PATHS args
    • It won't overwrite the environment paths for test discovery

v3.6.0

05 May 19:10
v3.6.0
4e8d92b
Compare
Choose a tag to compare

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 to max_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
    • compatibility_cppstr is set to False. (#2860)
      • This means that Conan won't let you mix library and project with different C++ standard settings.
    • The implementation library CMake target name through Conan is properly set to Catch2::Catch2 (#2861)
  • SelfTest target can be built through Bazel (#2857)

v3.5.4

10 Apr 10:23
v3.5.4
b5373da
Compare
Choose a tag to compare

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
  • 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 in catch_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

01 Mar 21:16
v3.5.3
8ac8190
Compare
Choose a tag to compare

Fixes

  • Fixed OOB access when computing filename tag (from the -# flag) for file without extension (#2798)
  • Fixed the linking against log on Android to be PRIVATE (#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 and SECTION (#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, and 0787132fc82a75e3fb255aa9484ca1dc1eff2a30.

Miscellaneous

  • Disabled tests for FP random generator reproducibility on non-SSE2 x86 targets (#2796)
  • Modified the in-tree Conan recipe to support Conan 2 (#2805)

v3.5.2

15 Jan 13:15
v3.5.2
05e10df
Compare
Choose a tag to compare

Fixes

  • Fixed -Wsubobject-linkage in the Console reporter (#2794)
  • Fixed adding new CLI Options to lvalue parser using | (#2787)

v3.5.1

31 Dec 14:18
v3.5.1
f981c9c
Compare
Choose a tag to compare

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

  • Added support for Bazel modules (#2781)
  • Added CMake option to disable the build reproducibility settings (#2785)
  • Added log library linking to the Meson build (#2784)

v3.5.0

10 Dec 23:57
v3.5.0
53d0d91
Compare
Choose a tag to compare

Improvements

  • Introduced CATCH_CONFIG_PREFIX_MESSAGES to prefix only logging macros (#2544)
    • This means INFO, UNSCOPED_INFO, WARN and CAPTURE.
  • Section hints in static analysis mode are now const
    • This prevents Clang-Tidy from complaining about misc-const-correctness.
  • from_range generator supports C arrays and ranges that require ADL (#2737)
  • Stringification support for std::optional now also includes std::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, ...)
  • random Generators for float and double are now reproducible across different platforms
    • long 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 and PRE_TEST discovery mode (#2747)
  • catch_discover_tests supports multi-config CMake generator in PRE_TEST discovery mode (#2739, #2746)

v3.4.0

13 Jul 11:58
v3.4.0
6e79e68
Compare
Choose a tag to compare

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 and SECTION 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?

Fixes

  • Fixed assertionStarting events being sent after the expr is evaluated (#2678)
  • Errors in TEST_CASE tags are now reported nicely (#2650)

Miscellaneous

  • Bunch of improvements to catch_discover_tests
    • Added DISCOVERY_MODE option, so the discovery can happen either post build or pre-run.
    • Fixed handling of semicolons and backslashes in test names (#2674, #2676)
  • meson build can disable building tests (#2693)
  • meson build properly sets meson version 0.54.1 as the minimal supported version (#2688)

v3.3.2

27 Feb 14:18
v3.3.2
3f0283d
Compare
Choose a tag to compare

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, and TEMPLATE_LIST_TEST_* macros.
  • Contains, RangeEquals and UnorderedRangeEquals matchers now support ranges with iterator + sentinel pair
  • Added IsNaN matcher
    • Unlike REQUIRE(isnan(x)), REQUIRE_THAT(x, IsNaN()) shows you the value of x.
  • 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