Skip to content

Tags

Tags give the ability to mark specific points in history as being important
This project is mirrored from https://github.com/catchorg/Catch2.git. Pull mirroring updated .
Successfully updated .
  • v3.11.0

    b3fb4b9f · v3.11.0 ·
    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 `--invisibles` mode.
    * Added support for Bazel's `TEST_RANDOM_SEED` env var (#3021)
    * Added support for Bazel's `TEST_PREMATURE_EXIT_FILE` env 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](https://tuple.app/catch2) has sponsored Catch2**
    
  • v3.10.0

    25319fd3 · v3.10.0 ·
    v3.10.0
    
    === Fixes ===
    * pkg-config files will take `DESTDIR` env var into account when selecting install destination (#3006, #3019)
    * Changed `filter` to store the provided predicate by value (#3002, #3005)
      * This is done to avoid dangling-by-default behaviour when `filter` is used inside `GENERATE_COPY`/`GENERATE_REF`.
    
    === 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

    644821ce · v3.9.1 ·
    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_TRAP` prefers `__builtin_debugtrap` on all platforms when Catch2 is compiled with Clang
    
  • v3.9.0

    fee81626 · v3.9.0 ·
    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 `assertionEnded` events 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_NOTHROW` is 230% faster in Release and 430% faster in Debug build configuration
      * Simple `REQUIRE_THROWS` is ~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 `assertionEnded` events 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 `FAIL` and `SKIP` macros (#2941)
      * This allows the compiler to understand that the execution does not continue past the macro, and avoids warnings.
    * Added fast path for `assertionStarting` event 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-tags` output (#2963)
    * Fixed Clang-Tidy's `readability-static-accessed-through-instance` in 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_SIG` can handle signatures consisting of only types (#2680, #2995)
    * Moved `catch_test_run_info.hpp` up from `internal/` 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

    2b60af89 · v3.8.1 ·
    v3.8.1
    
    === Fixes ===
    * Fixed bug where catch_discover_tests fails when no TEST_CASEs are present (#2962)
    * Fixed Clang 19 -Wc++20-extensions warning (#2968)
    
  • v3.8.0

    914aeecf · v3.8.0 ·
    v3.8.0
    
    === Improvements ===
    * Added `std::initializer_list` overloads for `(Unordered)RangeEquals` matcher (#2915, #2919)
    * Added explicit casts to silence GCC's `Wconversion` (#2875)
    * Made the use of `builtin_constant_p` tricks 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-size` warnings
    * Added support for using `from_range` generator with iterators with `value_type = const T` (#2926)
      * This is not correct `value_type` typedef, but it is used in the wild and the change does not make the code meaningfully worse.
    
    === Fixes ===
    * Fixed crash when stringifying pre-1970 (epoch) dates on Windows (#2944)
    
    === Miscellaneous ===
    * Fixes and improvements for `catch_discover_tests` CMake helper
      * Removed redundant `CTEST_FILE` param when creating the indirection file for `PRE_TEST` discovery mode (#2936)
      * Rewrote the test discovery logic to use output from the JSON reporter
        * This means that `catch_discover_tests` now requires CMake 3.19 or newer
      * Added `ADD_TAGS_AS_LABELS` option. If specified, each CTest test will be labeled with corrensponding Catch2's test tag
    * 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

    fa43b774 · v3.7.1 ·
    v3.7.1
    
    === 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

    31588bb4 · v3.7.0 ·
    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
    * **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

    4e8d92bf · v3.6.0 ·
    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 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

    b5373dad · v3.5.4 ·
    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
    * 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

    8ac8190e · v3.5.3 ·
    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 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`](https://github.com/catchorg/Catch2/commit/dc51386b9fd61f99ea9c660d01867e6ad489b403), and [`0787132fc82a75e3fb255aa9484ca1dc1eff2a30`](https://github.com/catchorg/Catch2/commit/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

    05e10dfc · v3.5.2 ·
    3.5.1
    
    === Fixes ===
    * Fixed `-Wsubobject-linkage` in the Console reporter (#2794)
    * Fixed adding new CLI Options to lvalue parser using `|` (#2787)
    
  • v3.5.1

    f981c9cb · v3.5.1 ·
    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 ===
    * 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

    53d0d913 · v3.5.0 ·
    v3.5.0
    
    === 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 `<rando>`, 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

    6e79e682 · v3.4.0 ·
    v3.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

    3f0283de · v3.3.2 ·
    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`, 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
    
  • v3.3.1

    2ab20a0e · v3.3.1 ·
    v3.3.1
    
    === Improvements ===
    * Reduced allocations and improved performance
      * The exact improvements are dependent on your usage of Catch2.
      * For example running Catch2's SelfTest binary performs 8k less allocations.
      * The main improvement comes from smarter handling of `SECTION`s, especially sibling `SECTION`s
    
  • v3.3.0

    c837cb4a · v3.3.0 ·
    v3.3.0
    
    === Improvements ===
    
    * Added `MessageMatches` exception matcher (#2570)
    * Added `RangeEquals` and `UnorderedRangeEquals` generic range matchers (#2377)
    * Added `SKIP` macro for skipping tests from within the test body (#2360)
      * All built-in reporters have been extended to handle it properly, whether your custom reporter needs changes depends on how it was written
      * `skipTest` reporter event **is unrelated** to this, and has been deprecated since it has practically no uses
    * Restored support for PPC Macs in the break-into-debugger functionality (#2619)
    * Made our warning suppression compatible with CUDA toolkit pre 11.5 (#2626)
    * Cleaned out some static analysis complaints
    
    === Fixes ===
    
    * Fixed macro redefinition warning when NVCC was reporting as MSVC (#2603)
    * Fixed throws in generator constructor causing the whole binary to abort (#2615)
      * Now it just fails the test
    * Fixed missing transitive include with libstdc++13 (#2611)
    
    === Miscellaneous ===
    
    * Improved support for dynamic library build with non-MSVC compilers on Windows (#2630)
    * When used as a subproject, Catch2 keeps its generated header in a separate directory from the main project (#2604)
    
  • v3.2.1

    ab6c7375 · v3.2.1 ·
    -- 3.2.1 --
    
    --- Improvements ---
    * Fix the reworked decomposer to work with older (pre 9) GCC versions (#2571)
      * **This required more significant changes to properly support C++20, there might be bugs.**
    
  • v3.2.0

    65cc7fd2 · v3.2.0 ·
    v3.2.0
    
    === Improvements ===
    * Catch2 now compiles on PlayStation (#2562)
    * Added `CATCH_CONFIG_GETENV` compile-time toggle (#2562)
      * This toggle guards whether Catch2 calls `std::getenv` when reading env variables
    * Added support for more Bazel test environment variables
      * `TESTBRIDGE_TEST_ONLY` is now supported (#2490)
      * Sharding variables, `TEST_SHARD_INDEX`, `TEST_TOTAL_SHARDS`, `TEST_SHARD_STATUS_FILE`, are now all supported (#2491)
    * Bunch of small tweaks and improvements in reporters
      * The TAP and SonarQube reporters output the used test filters
      * The XML reporter now also reports the version of its output format
      * The compact reporter now uses the same summary output as the console reporter (#878, #2554)
    * Added support for asserting on types that can only be compared with literal 0 (#2555)
      * A canonical example is C++20's `std::*_ordering` types, which cannot be compared with an `int` variable, only `0`
      * The support extends to any type with this property, not just the ones in stdlib
      * This change imposes 2-3% slowdown on compiling files that are heavy on `REQUIRE` and friends
      * **This required significant rewrite of decomposition, there might be bugs**
    * Simplified internals of matcher related macros
      * This provides about ~2% speed up compiling files that are heavy on `REQUIRE_THAT` and friends
    
    === Fixes ===
    * Cleaned out some warnings and static analysis issues
      * Suppressed `-Wcomma` warning rarely occuring in templated test cases (#2543)
      * Constified implementation details in `INFO` (#2564)
      * Made `MatcherGenericBase` copy constructor const (#2566)
    * Fixed serialization of test filters so the output roundtrips
      * This means that e.g. `./tests/SelfTest "aaa bbb", [approx]` outputs `Filters: "aaa bbb",[approx]`
    
    === Miscellaneous ===
    * Catch2's build no longer leaks `-ffile-prefix-map` setting  to dependees (#2533)