/ externals / catch / docs / release-notes.md
release-notes.md
   1  <a id="top"></a>
   2  
   3  # Release notes
   4  **Contents**<br>
   5  [3.5.0](#350)<br>
   6  [3.4.0](#340)<br>
   7  [3.3.2](#332)<br>
   8  [3.3.1](#331)<br>
   9  [3.3.0](#330)<br>
  10  [3.2.1](#321)<br>
  11  [3.2.0](#320)<br>
  12  [3.1.1](#311)<br>
  13  [3.1.0](#310)<br>
  14  [3.0.1](#301)<br>
  15  [2.13.7](#2137)<br>
  16  [2.13.6](#2136)<br>
  17  [2.13.5](#2135)<br>
  18  [2.13.4](#2134)<br>
  19  [2.13.3](#2133)<br>
  20  [2.13.2](#2132)<br>
  21  [2.13.1](#2131)<br>
  22  [2.13.0](#2130)<br>
  23  [2.12.4](#2124)<br>
  24  [2.12.3](#2123)<br>
  25  [2.12.2](#2122)<br>
  26  [2.12.1](#2121)<br>
  27  [2.12.0](#2120)<br>
  28  [2.11.3](#2113)<br>
  29  [2.11.2](#2112)<br>
  30  [2.11.1](#2111)<br>
  31  [2.11.0](#2110)<br>
  32  [2.10.2](#2102)<br>
  33  [2.10.1](#2101)<br>
  34  [2.10.0](#2100)<br>
  35  [2.9.2](#292)<br>
  36  [2.9.1](#291)<br>
  37  [2.9.0](#290)<br>
  38  [2.8.0](#280)<br>
  39  [2.7.2](#272)<br>
  40  [2.7.1](#271)<br>
  41  [2.7.0](#270)<br>
  42  [2.6.1](#261)<br>
  43  [2.6.0](#260)<br>
  44  [2.5.0](#250)<br>
  45  [2.4.2](#242)<br>
  46  [2.4.1](#241)<br>
  47  [2.4.0](#240)<br>
  48  [2.3.0](#230)<br>
  49  [2.2.3](#223)<br>
  50  [2.2.2](#222)<br>
  51  [2.2.1](#221)<br>
  52  [2.2.0](#220)<br>
  53  [2.1.2](#212)<br>
  54  [2.1.1](#211)<br>
  55  [2.1.0](#210)<br>
  56  [2.0.1](#201)<br>
  57  [Older versions](#older-versions)<br>
  58  [Even Older versions](#even-older-versions)<br>
  59  
  60  
  61  
  62  ## 3.5.0
  63  
  64  ### Improvements
  65  * Introduced `CATCH_CONFIG_PREFIX_MESSAGES` to prefix only logging macros (#2544)
  66    * This means `INFO`, `UNSCOPED_INFO`, `WARN` and `CAPTURE`.
  67  * Section hints in static analysis mode are now `const`
  68    * This prevents Clang-Tidy from complaining about `misc-const-correctness`.
  69  * `from_range` generator supports C arrays and ranges that require ADL (#2737)
  70  * Stringification support for `std::optional` now also includes `std::nullopt` (#2740)
  71  * The Console reporter flushes output after writing benchmark runtime estimate.
  72    * This means that you can immediately see for how long the benchmark is expected to run.
  73  * Added workaround to enable compilation with ICC 19.1 (#2551, #2766)
  74  * Compiling Catch2 for XBox should work out of the box (#2772)
  75    * Catch2 should automatically disable getenv when compiled for XBox.
  76  * Compiling Catch2 with exceptions disabled no longer triggers `Wunused-function` (#2726)
  77  * **`random` Generators for integral types are now reproducible across different platforms**
  78    * Unlike `<rando>`, Catch2's generators also support 1 byte integral types (`char`, `bool`, ...)
  79  * **`random` Generators for `float` and `double` are now reproducible across different platforms**
  80    * `long double` varies across different platforms too much to be reproducible
  81    * This guarantee applies only to platforms with IEEE 754 floats.
  82  
  83  ### Fixes
  84  * UDL declaration inside Catch2 are now strictly conforming to the standard
  85    * `operator "" _a` is UB, `operator ""_a` is fine. Seriously.
  86  * Fixed `CAPTURE` tests failing to compile in C++23 mode (#2744)
  87  * Fixed missing include in `catch_message.hpp` (#2758)
  88  * Fixed `CHECK_ELSE` suppressing failure from uncaught exceptions(#2723)
  89  
  90  ### Miscellaneous
  91  * The documentation for specifying which tests to run through commandline has been completely rewritten (#2738)
  92  * Fixed installation when building Catch2 with meson (#2722, #2742)
  93  * Fixed `catch_discover_tests` when using custom reporter and `PRE_TEST` discovery mode (#2747)
  94  * `catch_discover_tests` supports multi-config CMake generator in `PRE_TEST` discovery mode (#2739, #2746)
  95  
  96  
  97  ## 3.4.0
  98  
  99  ### Improvements
 100  * `VectorEquals` supports elements that provide only `==` and not `!=` (#2648)
 101  * Catch2 supports compiling with IAR compiler (#2651)
 102  * Various small internal performance improvements
 103  * Various small internal compilation time improvements
 104  * XMLReporter now reports location info for INFO and WARN (#1251)
 105    * This bumps up the xml format version to 3
 106  * Documented that `SKIP` in generator constructor can be used to handle empty  generator (#1593)
 107  * Added experimental static analysis support to `TEST_CASE` and `SECTION` macros (#2681)
 108    * The two macros are redefined in a way that helps the SA tools reason about the possible paths through a test case with sections.
 109    * The support is controlled by the `CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT` option and autodetects clang-tidy and Coverity.
 110  * `*_THROWS`, `*_THROWS_AS`, etc now suppress warning coming from `__attribute__((warn_unused_result))` on GCC  (#2691)
 111    * Unlike plain `[[nodiscard]]`, this warning is not silenced by void cast. WTF GCC?
 112  
 113  ### Fixes
 114  * Fixed `assertionStarting` events being sent after the expr is evaluated (#2678)
 115  * Errors in `TEST_CASE` tags are now reported nicely (#2650)
 116  
 117  ### Miscellaneous
 118  * Bunch of improvements to `catch_discover_tests`
 119    * Added DISCOVERY_MODE option, so the discovery can happen either post build or pre-run.
 120    * Fixed handling of semicolons and backslashes in test names (#2674, #2676)
 121  * meson build can disable building tests (#2693)
 122  * meson build properly sets meson version 0.54.1 as the minimal supported version (#2688)
 123  
 124  
 125  ## 3.3.2
 126  
 127  ### Improvements
 128  * Further reduced allocations
 129    * The compact, console, TAP and XML reporters perform less allocations in various cases
 130    * Removed 1 allocation per entered `SECTION`/`TEST_CASE`.
 131    * Removed 2 allocations per test case exit, if stdout/stderr is captured
 132  * Improved performance
 133    * Section tracking is 10%-25% faster than in v3.3.0
 134    * Assertion handling is 5%-10% faster than in v3.3.0
 135    * Test case registration is 1%-2% faster than in v3.3.0
 136    * Tiny speedup for registering listeners
 137    * Tiny speedup for `CAPTURE`, `TEST_CASE_METHOD`, `METHOD_AS_TEST_CASE`, and `TEMPLATE_LIST_TEST_*` macros.
 138  * `Contains`, `RangeEquals` and `UnorderedRangeEquals` matchers now support ranges with iterator + sentinel pair
 139  * Added `IsNaN` matcher
 140    * Unlike `REQUIRE(isnan(x))`, `REQUIRE_THAT(x, IsNaN())` shows you the value of `x`.
 141  * Suppressed `declared_but_not_referenced` warning for NVHPC (#2637)
 142  
 143  ### Fixes
 144  * Fixed performance regression in section tracking introduced in v3.3.1
 145    * Extreme cases would cause the tracking to run about 4x slower than in 3.3.0
 146  
 147  
 148  ## 3.3.1
 149  
 150  ### Improvements
 151  * Reduced allocations and improved performance
 152    * The exact improvements are dependent on your usage of Catch2.
 153    * For example running Catch2's SelfTest binary performs 8k less allocations.
 154    * The main improvement comes from smarter handling of `SECTION`s, especially sibling `SECTION`s
 155  
 156  
 157  ## 3.3.0
 158  
 159  ### Improvements
 160  
 161  * Added `MessageMatches` exception matcher (#2570)
 162  * Added `RangeEquals` and `UnorderedRangeEquals` generic range matchers (#2377)
 163  * Added `SKIP` macro for skipping tests from within the test body (#2360)
 164    * All built-in reporters have been extended to handle it properly, whether your custom reporter needs changes depends on how it was written
 165    * `skipTest` reporter event **is unrelated** to this, and has been deprecated since it has practically no uses
 166  * Restored support for PPC Macs in the break-into-debugger functionality (#2619)
 167  * Made our warning suppression compatible with CUDA toolkit pre 11.5 (#2626)
 168  * Cleaned out some static analysis complaints
 169  
 170  
 171  ### Fixes
 172  
 173  * Fixed macro redefinition warning when NVCC was reporting as MSVC (#2603)
 174  * Fixed throws in generator constructor causing the whole binary to abort (#2615)
 175    * Now it just fails the test
 176  * Fixed missing transitive include with libstdc++13 (#2611)
 177  
 178  
 179  ### Miscellaneous
 180  
 181  * Improved support for dynamic library build with non-MSVC compilers on Windows (#2630)
 182  * When used as a subproject, Catch2 keeps its generated header in a separate directory from the main project (#2604)
 183  
 184  
 185  
 186  ## 3.2.1
 187  
 188  ### Improvements
 189  * Fix the reworked decomposer to work with older (pre 9) GCC versions (#2571)
 190    * **This required more significant changes to properly support C++20, there might be bugs.**
 191  
 192  
 193  ## 3.2.0
 194  
 195  ### Improvements
 196  * Catch2 now compiles on PlayStation (#2562)
 197  * Added `CATCH_CONFIG_GETENV` compile-time toggle (#2562)
 198    * This toggle guards whether Catch2 calls `std::getenv` when reading env variables
 199  * Added support for more Bazel test environment variables
 200    * `TESTBRIDGE_TEST_ONLY` is now supported (#2490)
 201    * Sharding variables, `TEST_SHARD_INDEX`, `TEST_TOTAL_SHARDS`, `TEST_SHARD_STATUS_FILE`, are now all supported (#2491)
 202  * Bunch of small tweaks and improvements in reporters
 203    * The TAP and SonarQube reporters output the used test filters
 204    * The XML reporter now also reports the version of its output format
 205    * The compact reporter now uses the same summary output as the console reporter (#878, #2554)
 206  * Added support for asserting on types that can only be compared with literal 0 (#2555)
 207    * A canonical example is C++20's `std::*_ordering` types, which cannot be compared with an `int` variable, only `0`
 208    * The support extends to any type with this property, not just the ones in stdlib
 209    * This change imposes 2-3% slowdown on compiling files that are heavy on `REQUIRE` and friends
 210    * **This required significant rewrite of decomposition, there might be bugs**
 211  * Simplified internals of matcher related macros
 212    * This provides about ~2% speed up compiling files that are heavy on `REQUIRE_THAT` and friends
 213  
 214  
 215  ### Fixes
 216  * Cleaned out some warnings and static analysis issues
 217    * Suppressed `-Wcomma` warning rarely occurring in templated test cases (#2543)
 218    * Constified implementation details in `INFO` (#2564)
 219    * Made `MatcherGenericBase` copy constructor const (#2566)
 220  * Fixed serialization of test filters so the output roundtrips
 221    * This means that e.g. `./tests/SelfTest "aaa bbb", [approx]` outputs `Filters: "aaa bbb",[approx]`
 222  
 223  
 224  ### Miscellaneous
 225  * Catch2's build no longer leaks `-ffile-prefix-map` setting  to dependees (#2533)
 226  
 227  
 228  
 229  ## 3.1.1
 230  
 231  ### Improvements
 232  * Added `Catch::getSeed` function that user code can call to retrieve current rng-seed
 233  * Better detection of compiler support for `-ffile-prefix-map` (#2517)
 234  * Catch2's shared libraries now have `SOVERSION` set (#2516)
 235  * `catch2/catch_all.hpp` convenience header no longer transitively includes `windows.h` (#2432, #2526)
 236  
 237  
 238  ### Fixes
 239  * Fixed compilation on Universal Windows Platform
 240  * Fixed compilation on VxWorks (#2515)
 241  * Fixed compilation on Cygwin (#2540)
 242  * Remove unused variable in reporter registration (#2538)
 243  * Fixed some symbol visibility issues with dynamic library on Windows (#2527)
 244  * Suppressed `-Wuseless-cast` warnings in `REQUIRE_THROWS*` macros (#2520, #2521)
 245    * This was triggered when the potentially throwing expression evaluates to `void`
 246  * Fixed "warning: storage class is not first" with `nvc++` (#2533)
 247  * Fixed handling of `DL_PATHS` argument to `catch_discover_tests` on MacOS (#2483)
 248  * Suppressed `*-avoid-c-arrays` clang-tidy warning in `TEMPLATE_TEST_CASE` (#2095, #2536)
 249  
 250  
 251  ### Miscellaneous
 252  * Fixed CMake install step for Catch2 build as dynamic library (#2485)
 253  * Raised minimum CMake version to 3.10 (#2523)
 254    * Expect the minimum CMake version to increase once more in next few releases.
 255  * Whole bunch of doc updates and fixes
 256    * #1444, #2497, #2547, #2549, and more
 257  * Added support for building Catch2 with Meson (#2530, #2539)
 258  
 259  
 260  
 261  ## 3.1.0
 262  
 263  ### Improvements
 264  * Improved suppression of `-Wparentheses` for older GCCs
 265    * Turns out that even GCC 9 does not properly handle `_Pragma`s in the C++ frontend.
 266  * Added type constraints onto `random` generator (#2433)
 267    * These constraints copy what the standard says for the underlying `std::uniform_int_distribution`
 268  * Suppressed -Wunused-variable from nvcc (#2306, #2427)
 269  * Suppressed -Wunused-variable from MinGW (#2132)
 270  * Added All/Any/NoneTrue range matchers (#2319)
 271    * These check that all/any/none of boolean values in a range are true.
 272  * The JUnit reporter now normalizes classnames from C++ namespaces to Java-like namespaces (#2468)
 273    * This provides better support for other JUnit based tools.
 274  * The Bazel support now understands `BAZEL_TEST` environment variable (#2459)
 275    * The `CATCH_CONFIG_BAZEL_SUPPORT` configuration option is also still supported.
 276  * Returned support for compiling Catch2 with GCC 5 (#2448)
 277    * This required removing inherited constructors from Catch2's internals.
 278    * I recommend updating to a newer GCC anyway.
 279  * `catch_discover_tests` now has a new options for setting library load path(s) when running the Catch2 binary (#2467)
 280  
 281  
 282  ### Fixes
 283  * Fixed crash when listing listeners without any registered listeners (#2442)
 284  * Fixed nvcc compilation error in constructor benchmarking helper (#2477)
 285  * Catch2's CMakeList supports pre-3.12 CMake again (#2428)
 286    * The gain from requiring CMake 3.12 was very minor, but y'all should really update to newer CMake
 287  
 288  
 289  ### Miscellaneous
 290  * Fixed SelfTest build on MinGW (#2447)
 291  * The in-repo conan recipe exports the CMake helper (#2460)
 292  * Added experimental CMake script to showcase using test case sharding together with CTest
 293    * Compared to `catch_discover_tests`, it supports very limited number of options and customization
 294  * Added documentation page on best practices when running Catch2 tests
 295  * Catch2 can be built as a dynamic library (#2397, #2398)
 296    * Note that Catch2 does not have visibility annotations, and you are responsible for ensuring correct visibility built into the resulting library.
 297  
 298  
 299  
 300  ## 3.0.1
 301  
 302  **Catch2 now uses statically compiled library as its distribution model.
 303  This also means that to get all of Catch2's functionality in a test file,
 304  you have to include multiple headers.**
 305  
 306  You probably want to look into the [migration docs](migrate-v2-to-v3.md#top),
 307  which were written to help people coming from v2.x.x versions to the
 308  v3 releases.
 309  
 310  
 311  ### FAQ
 312  
 313  * Why is Catch2 moving to separate headers?
 314    * The short answer is future extensibility and scalability. The long answer is complex and can be found on my blog, but at the most basic level, it is that providing single-header distribution is at odds with providing variety of useful features. When Catch2 was distributed in a single header, adding a new Matcher would cause overhead for everyone, but was useful only to a subset of users. This meant that the barrier to entry for new Matchers/Generators/etc is high in single header model, but much smaller in the new model.
 315  * Will Catch2 again distribute single-header version in the future?
 316    * No. But we do provide sqlite-style amalgamated distribution option. This means that you can download just 1 .cpp file and 1 header and place them next to your own sources. However, doing this has downsides similar to using the `catch_all.hpp` header.
 317  * Why the big breaking change caused by replacing `catch.hpp` with `catch_all.hpp`?
 318    * The convenience header `catch_all.hpp` exists for two reasons. One of them is to provide a way for quick migration from Catch2, the second one is to provide a simple way to test things with Catch2. Using it for migration has one drawback in that it is **big**. This means that including it _will_ cause significant compile time drag, and so using it to migrate should be a conscious decision by the user, not something they can just stumble into unknowingly.
 319  
 320  
 321  ### (Potentially) Breaking changes
 322  * **Catch2 now uses statically compiled library as its distribution model**
 323    * **Including `catch.hpp` no longer works**
 324  * **Catch2 now uses C++14 as the minimum support language version**
 325  * `ANON_TEST_CASE` has been removed, use `TEST_CASE` with no arguments instead (#1220)
 326  * `--list*` commands no longer have non-zero return code (#1410)
 327  * `--list-test-names-only` has been removed (#1190)
 328    * You should use verbosity-modifiers for `--list-tests` instead
 329  * `--list*` commands are now piped through the reporters
 330    * The top-level reporter interface provides default implementation that works just as the old one
 331    * XmlReporter outputs a machine-parseable XML
 332  * `TEST_CASE` description support has been removed
 333    * If the second argument has text outside tags, the text will be ignored.
 334  * Hidden test cases are no longer included just because they don't match an exclusion tag
 335    * Previously, a `TEST_CASE("A", "[.foo]")` would be included by asking for `~[bar]`.
 336  * `PredicateMatcher` is no longer type erased.
 337    * This means that the type of the provided predicate is part of the `PredicateMatcher`'s type
 338  * `SectionInfo` no longer contains section description as a member (#1319)
 339    * You can still write `SECTION("ShortName", "Long and wordy description")`, but the description is thrown away
 340    * The description type now must be a `const char*` or be implicitly convertible to it
 341  * The `[!hide]` tag has been removed.
 342    * Use `[.]` or `[.foo]` instead.
 343  * Lvalues of composed matchers cannot be composed further
 344  * Uses of `REGISTER_TEST_CASE` macro need to be followed by a semicolon
 345    * This does not change `TEST_CASE` and friends in any way
 346  * `IStreamingReporter::IsMulti` member function was removed
 347    * This is _very_ unlikely to actually affect anyone, as it was default-implemented in the interface, and only used internally
 348  * Various classes not designed for user-extension have been made final
 349    * `ListeningReporter` is now `final`
 350    * Concrete Matchers (e.g. `UnorderedEquals` vector matcher) are now `final`
 351    * All Generators are now `final`
 352  * Matcher namespacing has been redone
 353    * Matcher types are no longer in deeply nested namespaces
 354    * Matcher factory functions are no longer brought into `Catch` namespace
 355    * This means that all public-facing matcher-related functionality is now in `Catch::Matchers` namespace
 356  * Defining `CATCH_CONFIG_MAIN` will no longer create main in that TU.
 357    * Link with `libCatch2Main.a`, or the proper CMake/pkg-config target
 358    * If you want to write custom main, include `catch2/catch_session.hpp`
 359  * `CATCH_CONFIG_EXTERNAL_INTERFACES` has been removed.
 360    * You should instead include the appropriate headers as needed.
 361  * `CATCH_CONFIG_IMPL` has been removed.
 362    * The implementation is now compiled into a static library.
 363  * Event Listener interface has changed
 364    * `TestEventListenerBase` was renamed to `EventListenerBase`
 365    * `EventListenerBase` now directly derives from `IStreamingReporter`, instead of deriving from `StreamingReporterBase`
 366  * `GENERATE` decays its arguments (#2012, #2040)
 367    * This means that `str` in `auto str = GENERATE("aa", "bb", "cc");` is inferred to `char const*` rather than `const char[2]`.
 368  * `--list-*` flags write their output to file specified by the `-o` flag
 369  * Many changes to reporter interfaces
 370    * With the exception of the XmlReporter, the outputs of first party reporters should remain the same
 371    * New pair of events were added
 372    * One obsolete event was removed
 373    * The base class has been renamed
 374    * The built-in reporter class hierarchy has been redone
 375  * Catch2 generates a random seed if one hasn't been specified by the user
 376  * The short flag for `--list-tests`, `-l`, has been removed.
 377    * This is not a commonly used flag and does not need to use up valuable single-letter space.
 378  * The short flag for `--list-tags`, `-t`, has been removed.
 379    * This is not a commonly used flag and does not need to use up valuable single-letter space.
 380  * The `--colour` option has been replaced with `--colour-mode` option
 381  
 382  
 383  ### Improvements
 384  * Matchers have been extended with the ability to use different signatures of `match` (#1307, #1553, #1554, #1843)
 385    * This includes having templated `match` member function
 386    * See the [rewritten Matchers documentation](matchers.md#top) for details
 387    * Catch2 currently provides _some_ generic matchers, but there should be more before final release of v3
 388      * `IsEmpty`, `SizeIs` which check that the range has specific properties
 389      * `Contains`, which checks whether a range contains a specific element
 390      * `AllMatch`, `AnyMatch`, `NoneMatch` range matchers, which apply matchers over a range of elements
 391  * Significant compilation time improvements
 392    * including `catch_test_macros.hpp` is 80% cheaper than including `catch.hpp`
 393  * Some runtime performance optimizations
 394    * In all tested cases the v3 branch was faster, so the table below shows the speedup of v3 to v2 at the same task
 395  <a id="v3-runtime-optimization-table"></a>
 396  
 397  |                   task                      |  debug build | release build |
 398  |:------------------------------------------- | ------------:| -------------:|
 399  | Run 1M `REQUIRE(true)`                      |  1.10 ± 0.01 |   1.02 ± 0.06 |
 400  | Run 100 tests, 3^3 sections, 1 REQUIRE each |  1.27 ± 0.01 |   1.04 ± 0.01 |
 401  | Run 3k tests, no names, no tags             |  1.29 ± 0.01 |   1.05 ± 0.01 |
 402  | Run 3k tests, names, tags                   |  1.49 ± 0.01 |   1.22 ± 0.01 |
 403  | Run 1 out of 3k tests no names, no tags     |  1.68 ± 0.02 |   1.19 ± 0.22 |
 404  | Run 1 out of 3k tests, names, tags          |  1.79 ± 0.02 |   2.06 ± 0.23 |
 405  
 406  
 407  * POSIX platforms use `gmtime_r`, rather than `gmtime` when constructing a date string (#2008, #2165)
 408  * `--list-*` flags write their output to file specified by the `-o` flag (#2061, #2163)
 409  * `Approx::operator()` is now properly `const`
 410  * Catch2's internal helper variables no longer use reserved identifiers (#578)
 411  * `--rng-seed` now accepts string `"random-device"` to generate random seed using `std::random_device`
 412  * Catch2 now supports test sharding (#2257)
 413    * You can ask for the tests to be split into N groups and only run one of them.
 414    * This greatly simplifies parallelization of tests in a binary through external runner.
 415  * The embedded CLI parser now supports repeatedly callable lambdas
 416    * A lambda-based option parser can opt into being repeatedly specifiable.
 417  * Added `STATIC_CHECK` macro, similar to `STATIC_REQUIRE` (#2318)
 418    * When deferred tu runtime, it behaves like `CHECK`, and not like `REQUIRE`.
 419  * You can have multiple tests with the same name, as long as other parts of the test identity differ (#1915, #1999, #2175)
 420    * Test identity includes test's name, test's tags and test's class name if applicable.
 421  * Added new warning, `UnmatchedTestSpec`, to error on test specs with no matching tests
 422  * The `-w`, `--warn` warning flags can now be provided multiple times to enable multiple warnings
 423  * The case-insensitive handling of tags is now more reliable and takes up less memory
 424  * Test case and assertion counting can no longer reasonably overflow on 32 bit systems
 425    * The count is now kept in `uint64_t` on all platforms, instead of using `size_t` type.
 426  * The `-o`, `--out` output destination specifiers recognize `-` as stdout
 427    * You have to provide it as `--out=-` to avoid CLI error about missing option
 428    * The new reporter specification also recognizes `-` as stdout
 429  * Multiple reporters can now run at the same time and write to different files (#1712, #2183)
 430    * To support this, the `-r`, `--reporter` flag now also accepts optional output destination
 431    * For full overview of the semantics of using multiple reporters, look into the reporter documentation
 432    * To enable the new syntax, reporter names can no longer contain `::`.
 433  * Console colour support has been rewritten and significantly improved
 434    * The colour implementation based on ANSI colour codes is always available
 435    * Colour implementations respect their associated stream
 436      * previously e.g. Win32 impl would change console colour even if Catch2 was writing to a file
 437    * The colour API is resilient against changing evaluation order of expressions
 438    * The associated CLI flag and compile-time configuration options have changed
 439      * For details see the docs for command-line and compile-time Catch2 configuration
 440  * Added a support for Bazel integration with `XML_OUTPUT_FILE` env var (#2399)
 441    * This has to be enabled during compilation.
 442  * Added `--skip-benchmarks` flag to run tests without any `BENCHMARK`s (#2392, #2408)
 443  * Added option to list all listeners in the binary via `--list-listeners`
 444  
 445  
 446  ### Fixes
 447  * The `INFO` macro no longer contains superfluous semicolon (#1456)
 448  * The `--list*` family of command line flags now return 0 on success (#1410, #1146)
 449  * Various ways of failing a benchmark are now counted and reporter properly
 450  * The ULP matcher now handles comparing numbers with different signs properly (#2152)
 451  * Universal ADL-found operators should no longer break decomposition (#2121)
 452  * Reporter selection is properly case-insensitive
 453    * Previously it forced lower cased name, which would fail for reporters with upper case characters in name
 454  * The cumulative reporter base stores benchmark results alongside assertion results
 455  * Catch2's SE handling should no longer interferes with ASan on Windows (#2334)
 456  * Fixed Windows console colour handling for tests that redirect stdout (#2345)
 457  * Fixed issue with the `random` generators returning the same value over and over again
 458  
 459  
 460  ### Other changes
 461  * `CATCH_CONFIG_DISABLE_MATCHERS` no longer exists.
 462    * If you do not want to use Matchers in a TU, do not include their header.
 463  * `CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER` no longer exists.
 464    * `StringMaker` specializations for `<chrono>` are always provided
 465  * Catch2's CMake now provides 2 targets, `Catch2` and `Catch2WithMain`.
 466    * `Catch2` is the statically compiled implementation by itself
 467    * `Catch2WithMain` also links in the default main
 468  * Catch2's pkg-config integration also provides 2 packages
 469    * `catch2` is the statically compiled implementation by itself
 470    * `catch2-with-main` also links in the default main
 471  * Passing invalid test specifications passed to Catch2 are now reported before tests are run, and are a hard error.
 472  * Running 0 tests (e.g. due to empty binary, or test spec not matching anything) returns non-0 exit code
 473    * Flag `--allow-running-no-tests` overrides this behaviour.
 474    * `NoTests` warning has been removed because it is fully subsumed by this change.
 475  * Catch2's compile-time configuration options (`CATCH_CONFIG_FOO`) can be set through CMake options of the same name
 476    * They use the same semantics as C++ defines, including the `CATCH_CONFIG_NO_FOO` overrides,
 477      * `-DCATCH_CONFIG_DEFAULT_REPORTER=compact` changes default reporter to "compact"
 478      * `-DCATCH_CONFIG_NO_ANDROID_LOGWRITE=ON` forces android logwrite to off
 479      * `-DCATCH_CONFIG_ANDROID_LOGWRITE=OFF` does nothing (the define will not exist)
 480  
 481  
 482  
 483  ## 2.13.7
 484  
 485  ### Fixes
 486  * Added missing `<iterator>` include in benchmarking. (#2231)
 487  * Fixed noexcept build with benchmarking enabled (#2235)
 488  * Fixed build for compilers with C++17 support but without C++17 library support (#2195)
 489  * JUnit only uses 3 decimal places when reporting durations (#2221)
 490  * `!mayfail` tagged tests are now marked as `skipped` in JUnit reporter output (#2116)
 491  
 492  
 493  ## 2.13.6
 494  
 495  ### Fixes
 496  * Disabling all signal handlers no longer breaks compilation  (#2212, #2213)
 497  
 498  ### Miscellaneous
 499  * `catch_discover_tests` should handle escaped semicolon (`;`) better (#2214, #2215)
 500  
 501  
 502  ## 2.13.5
 503  
 504  ### Improvements
 505  * Detection of MAC and IPHONE platforms has been improved (#2140, #2157)
 506  * Added workaround for bug in XLC 16.1.0.1 (#2155)
 507  * Add detection for LCC when it is masquerading as GCC (#2199)
 508  * Modified posix signal handling so it supports newer libcs (#2178)
 509    * `MINSIGSTKSZ` was no longer usable in constexpr context.
 510  
 511  ### Fixes
 512  * Fixed compilation of benchmarking when `min` and `max` macros are defined (#2159)
 513    * Including `windows.h` without `NOMINMAX` remains a really bad idea, don't do it
 514  
 515  ### Miscellaneous
 516  * The check whether Catch2 is being built as a subproject is now more reliable (#2202, #2204)
 517    * The problem was that if the variable name used internally was defined the project including Catch2 as subproject, it would not be properly overwritten for Catch2's CMake.
 518  
 519  
 520  ## 2.13.4
 521  
 522  ### Improvements
 523  * Improved the hashing algorithm used for shuffling test cases (#2070)
 524    * `TEST_CASE`s that differ only in the last character should be properly shuffled
 525    * Note that this means that v2.13.4 gives you a different order of test cases than 2.13.3, even given the same seed.
 526  
 527  ### Miscellaneous
 528  * Deprecated `ParseAndAddCatchTests` CMake integration (#2092)
 529    * It is impossible to implement it properly for all the different test case variants Catch2 provides, and there are better options provided.
 530    * Use `catch_discover_tests` instead, which uses runtime information about available tests.
 531  * Fixed bug in `catch_discover_tests` that would cause it to fail when used in specific project structures (#2119)
 532  * Added Bazel build file
 533  * Added an experimental static library target to CMake
 534  
 535  
 536  ## 2.13.3
 537  
 538  ### Fixes
 539  * Fixed possible infinite loop when combining generators with section filter (`-c` option) (#2025)
 540  
 541  ### Miscellaneous
 542  * Fixed `ParseAndAddCatchTests` not finding `TEST_CASE`s without tags (#2055, #2056)
 543  * `ParseAndAddCatchTests` supports `CMP0110` policy for changing behaviour of `add_test` (#2057)
 544    * This was the shortlived change in CMake 3.18.0 that temporarily broke `ParseAndAddCatchTests`
 545  
 546  
 547  ## 2.13.2
 548  
 549  ### Improvements
 550  * Implemented workaround for AppleClang shadowing bug (#2030)
 551  * Implemented workaround for NVCC ICE (#2005, #2027)
 552  
 553  ### Fixes
 554  * Fixed detection of `std::uncaught_exceptions` support under non-msvc platforms (#2021)
 555  * Fixed the experimental stdout/stderr capture under Windows (#2013)
 556  
 557  ### Miscellaneous
 558  * `catch_discover_tests` has been improved significantly (#2023, #2039)
 559    * You can now specify which reporter should be used
 560    * You can now modify where the output will be written
 561    * `WORKING_DIRECTORY` setting is respected
 562  * `ParseAndAddCatchTests` now supports `TEMPLATE_TEST_CASE` macros (#2031)
 563  * Various documentation fixes and improvements (#2022, #2028, #2034)
 564  
 565  
 566  ## 2.13.1
 567  
 568  ### Improvements
 569  * `ParseAndAddCatchTests` handles CMake v3.18.0 correctly (#1984)
 570  * Improved autodetection of `std::byte` (#1992)
 571  * Simplified implementation of templated test cases (#2007)
 572    * This should have a tiny positive effect on its compilation throughput
 573  
 574  ### Fixes
 575  * Automatic stringification of ranges handles sentinel ranges properly (#2004)
 576  
 577  
 578  ## 2.13.0
 579  
 580  ### Improvements
 581  * `GENERATE` can now follow a `SECTION` at the same level of nesting (#1938)
 582    * The `SECTION`(s) before the `GENERATE` will not be run multiple times, the following ones will.
 583  * Added `-D`/`--min-duration` command line flag (#1910)
 584    * If a test takes longer to finish than the provided value, its name and duration will be printed.
 585    * This flag is overridden by setting `-d`/`--duration`.
 586  
 587  ### Fixes
 588  * `TAPReporter` no longer skips successful assertions (#1983)
 589  
 590  
 591  ## 2.12.4
 592  
 593  ### Improvements
 594  * Added support for MacOS on ARM (#1971)
 595  
 596  
 597  ## 2.12.3
 598  
 599  ### Fixes
 600  * `GENERATE` nested in a for loop no longer creates multiple generators (#1913)
 601  * Fixed copy paste error breaking `TEMPLATE_TEST_CASE_SIG` for 6 or more arguments (#1954)
 602  * Fixed potential UB when handling non-ASCII characters in CLI args (#1943)
 603  
 604  ### Improvements
 605  * There can be multiple calls to `GENERATE` on a single line
 606  * Improved `fno-except` support for platforms that do not provide shims for exception-related std functions (#1950)
 607    * E.g. the Green Hills C++ compiler
 608  * XmlReporter now also reports test-case-level statistics (#1958)
 609    * This is done via a new element, `OverallResultsCases`
 610  
 611  ### Miscellaneous
 612  * Added `.clang-format` file to the repo (#1182, #1920)
 613  * Rewrote contributing docs
 614    * They should explain the different levels of testing and so on much better
 615  
 616  
 617  ## 2.12.2
 618  
 619  ### Fixes
 620  * Fixed compilation failure if `is_range` ADL found deleted function (#1929)
 621  * Fixed potential UB in `CAPTURE` if the expression contained non-ASCII characters (#1925)
 622  
 623  ### Improvements
 624  * `std::result_of` is not used if `std::invoke_result` is available (#1934)
 625  * JUnit reporter writes out `status` attribute for tests (#1899)
 626  * Suppressed clang-tidy's `hicpp-vararg` warning (#1921)
 627    * Catch2 was already suppressing the `cppcoreguidelines-pro-type-vararg` alias of the warning
 628  
 629  
 630  ## 2.12.1
 631  
 632  ### Fixes
 633  * Vector matchers now support initializer list literals better
 634  
 635  ### Improvements
 636  * Added support for `^` (bitwise xor) to `CHECK` and `REQUIRE`
 637  
 638  
 639  
 640  ## 2.12.0
 641  
 642  ### Improvements
 643  * Running tests in random order (`--order rand`) has been reworked significantly (#1908)
 644    * Given same seed, all platforms now produce the same order
 645    * Given same seed, the relative order of tests does not change if you select only a subset of them
 646  * Vector matchers support custom allocators (#1909)
 647  * `|` and `&` (bitwise or and bitwise and) are now supported in `CHECK` and `REQUIRE`
 648    * The resulting type must be convertible to `bool`
 649  
 650  ### Fixes
 651  * Fixed computation of benchmarking column widths in ConsoleReporter (#1885, #1886)
 652  * Suppressed clang-tidy's `cppcoreguidelines-pro-type-vararg` in assertions (#1901)
 653    * It was a false positive triggered by the new warning support workaround
 654  * Fixed bug in test specification parser handling of OR'd patterns using escaping (#1905)
 655  
 656  ### Miscellaneous
 657  * Worked around IBM XL's codegen bug (#1907)
 658    * It would emit code for _destructors_ of temporaries in an unevaluated context
 659  * Improved detection of stdlib's support for `std::uncaught_exceptions` (#1911)
 660  
 661  
 662  
 663  ## 2.11.3
 664  
 665  ### Fixes
 666  * Fixed compilation error caused by lambdas in assertions under MSVC
 667  
 668  
 669  ## 2.11.2
 670  
 671  ### Improvements
 672  * GCC and Clang now issue warnings for suspicious code in assertions (#1880)
 673    * E.g. `REQUIRE( int != unsigned int )` will now issue mixed signedness comparison warning
 674    * This has always worked on MSVC, but it now also works for GCC and current Clang versions
 675  * Colorization of "Test filters" output should be more robust now
 676  * `--wait-for-keypress` now also accepts `never` as an option (#1866)
 677  * Reporters no longer round-off nanoseconds when reporting benchmarking results (#1876)
 678  * Catch2's debug break now supports iOS while using Thumb instruction set (#1862)
 679  * It is now possible to customize benchmark's warm-up time when running the test binary (#1844)
 680    * `--benchmark-warmup-time {ms}`
 681  * User can now specify how Catch2 should break into debugger (#1846)
 682  
 683  ### Fixes
 684  * Fixes missing `<random>` include in benchmarking (#1831)
 685  * Fixed missing `<iterator>` include in benchmarking (#1874)
 686  * Hidden test cases are now also tagged with `[!hide]` as per documentation (#1847)
 687  * Detection of whether libc provides `std::nextafter` has been improved (#1854)
 688  * Detection of `wmain` no longer incorrectly looks for `WIN32` macro (#1849)
 689    * Now it just detects Windows platform
 690  * Composing already-composed matchers no longer modifies the partially-composed matcher expression
 691    * This bug has been present for the last ~2 years and nobody reported it
 692  
 693  
 694  
 695  ## 2.11.1
 696  
 697  ### Improvements
 698  * Breaking into debugger is supported on iOS (#1817)
 699  * `google-build-using-namespace` clang-tidy warning is suppressed (#1799)
 700  
 701  ### Fixes
 702  * Clang on Windows is no longer assumed to implement MSVC's traditional preprocessor (#1806)
 703  * `ObjectStorage` now behaves properly in `const` contexts (#1820)
 704  * `GENERATE_COPY(a, b)` now compiles properly (#1809, #1815)
 705  * Some more cleanups in the benchmarking support
 706  
 707  
 708  
 709  ## 2.11.0
 710  
 711  ### Improvements
 712  * JUnit reporter output now contains more details in case of failure (#1347, #1719)
 713  * Added SonarQube Test Data reporter (#1738)
 714    * It is in a separate header, just like the TAP, Automake, and TeamCity reporters
 715  * `range` generator now allows floating point numbers (#1776)
 716  * Reworked part of internals to increase throughput
 717  
 718  
 719  ### Fixes
 720  * The single header version should contain full benchmarking support (#1800)
 721  * `[.foo]` is now properly parsed as `[.][foo]` when used on the command line (#1798)
 722  * Fixed compilation of benchmarking on platforms where `steady_clock::period` is not `std::nano` (#1794)
 723  
 724  
 725  
 726  ## 2.10.2
 727  
 728  ### Improvements
 729  * Catch2 will now compile on platform where `INFINITY` is double (#1782)
 730  
 731  
 732  ### Fixes
 733  * Warning suppressed during listener registration will no longer leak
 734  
 735  
 736  
 737  ## 2.10.1
 738  
 739  ### Improvements
 740  * Catch2 now guards itself against `min` and `max` macros from `windows.h` (#1772)
 741  * Templated tests will now compile with ICC (#1748)
 742  * `WithinULP` matcher now uses scientific notation for stringification (#1760)
 743  
 744  
 745  ### Fixes
 746  * Templated tests no longer trigger `-Wunused-templates` (#1762)
 747  * Suppressed clang-analyzer false positive in context getter (#1230, #1735)
 748  
 749  
 750  ### Miscellaneous
 751  * CMake no longer prohibits in-tree build when Catch2 is used as a subproject (#1773, #1774)
 752  
 753  
 754  
 755  ## 2.10.0
 756  
 757  ### Fixes
 758  * `TEMPLATE_LIST_TEST_CASE` now properly handles non-copyable and non-movable types (#1729)
 759  * Fixed compilation error on Solaris caused by a system header defining macro `TT` (#1722, #1723)
 760  * `REGISTER_ENUM` will now fail at compilation time if the registered enum is too large
 761  * Removed use of `std::is_same_v` in C++17 mode (#1757)
 762  * Fixed parsing of escaped special characters when reading test specs from a file (#1767, #1769)
 763  
 764  
 765  ### Improvements
 766  * Trailing and leading whitespace in test/section specs are now ignored.
 767  * Writing to Android debug log now uses `__android_log_write` instead of `__android_log_print`
 768  * Android logging support can now be turned on/off at compile time (#1743)
 769    * The toggle is `CATCH_CONFIG_ANDROID_LOGWRITE`
 770  * Added a generator that returns elements of a range
 771    * Use via `from_range(from, to)` or `from_range(container)`
 772  * Added support for CRTs that do not provide `std::nextafter` (#1739)
 773    * They must still provide global `nextafter{f,l,}`
 774    * Enabled via `CATCH_CONFIG_GLOBAL_NEXTAFTER`
 775  * Special cased `Approx(inf)` not to match non-infinite values
 776    * Very strictly speaking this might be a breaking change, but it should match user expectations better
 777  * The output of benchmarking through the Console reporter when `--benchmark-no-analysis` is set is now much simpler (#1768)
 778  * Added a matcher that can be used for checking an exceptions message (#1649, #1728)
 779    * The matcher helper function is called `Message`
 780    * The exception must publicly derive from `std::exception`
 781    * The matching is done exactly, including case and whitespace
 782  * Added a matcher that can be used for checking relative equality of floating point numbers (#1746)
 783    * Unlike `Approx`, it considers both sides when determining the allowed margin
 784    * Special cases `NaN` and `INFINITY` to match user expectations
 785    * The matcher helper function is called `WithinRel`
 786  * The ULP matcher now allows for any possible distance between the two numbers
 787  * The random number generators now use Catch-global instance of RNG (#1734, #1736)
 788    * This means that nested random number generators actually generate different numbers
 789  
 790  
 791  ### Miscellaneous
 792  * In-repo PNGs have been optimized to lower overhead of using Catch2 via git clone
 793  * Catch2 now uses its own implementation of the URBG concept
 794    * In the future we also plan to use our own implementation of the distributions from `<random>` to provide cross-platform repeatability of random results
 795  
 796  
 797  
 798  ## 2.9.2
 799  
 800  ### Fixes
 801  * `ChunkGenerator` can now be used with chunks of size 0 (#1671)
 802  * Nested subsections are now run properly when specific section is run via the `-c` argument (#1670, #1673)
 803  * Catch2 now consistently uses `_WIN32` to detect Windows platform (#1676)
 804  * `TEMPLATE_LIST_TEST_CASE` now support non-default constructible type lists (#1697)
 805  * Fixed a crash in the XMLReporter when a benchmark throws exception during warmup (#1706)
 806  * Fixed a possible infinite loop in CompactReporter (#1715)
 807  * Fixed `-w NoTests` returning 0 even when no tests were matched (#1449, #1683, #1684)
 808  * Fixed matcher compilation under Obj-C++ (#1661)
 809  
 810  ### Improvements
 811  * `RepeatGenerator` and `FixedValuesGenerator` now fail to compile when used with `bool` (#1692)
 812    * Previously they would fail at runtime.
 813  * Catch2 now supports Android's debug logging for its debug output (#1710)
 814  * Catch2 now detects and configures itself for the RTX platform (#1693)
 815    * You still need to pass `--benchmark-no-analysis` if you are using benchmarking under RTX
 816  * Removed a "storage class is not first" warning when compiling Catch2 with PGI compiler (#1717)
 817  
 818  ### Miscellaneous
 819  * Documentation now contains indication when a specific feature was introduced (#1695)
 820    * These start with Catch2 v2.3.0, (a bit over a year ago).
 821    * `docs/contributing.md` has been updated to provide contributors guidance on how to add these to newly written documentation
 822  * Various other documentation improvements
 823    * ToC fixes
 824    * Documented `--order` and `--rng-seed` command line options
 825    * Benchmarking documentation now clearly states that it requires opt-in
 826    * Documented `CATCH_CONFIG_CPP17_OPTIONAL` and `CATCH_CONFIG_CPP17_BYTE` macros
 827    * Properly documented built-in vector matchers
 828    * Improved `*_THROWS_MATCHES` documentation a bit
 829  * CMake config file is now arch-independent even if `CMAKE_SIZEOF_VOID_P` is in CMake cache (#1660)
 830  * `CatchAddTests` now properly escapes `[` and `]` in test names (#1634, #1698)
 831  * Reverted `CatchAddTests` adding tags as CTest labels (#1658)
 832    * The script broke when test names were too long
 833    * Overwriting `LABELS` caused trouble for users who set them manually
 834    * CMake does not let users append to `LABELS` if the test name has spaces
 835  
 836  
 837  ## 2.9.1
 838  
 839  ### Fixes
 840  * Fix benchmarking compilation failure in files without `CATCH_CONFIG_EXTERNAL_INTERFACES` (or implementation)
 841  
 842  
 843  ## 2.9.0
 844  
 845  ### Improvements
 846  * The experimental benchmarking support has been replaced by integrating Nonius code (#1616)
 847    * This provides a much more featurefull micro-benchmarking support.
 848    * Due to the compilation cost, it is disabled by default. See the documentation for details.
 849    * As far as backwards compatibility is concerned, this feature is still considered experimental in that we might change the interface based on user feedback.
 850  * `WithinULP` matcher now shows the acceptable range (#1581)
 851  * Template test cases now support type lists (#1627)
 852  
 853  
 854  ## 2.8.0
 855  
 856  ### Improvements
 857  * Templated test cases no longer check whether the provided types are unique (#1628)
 858    * This allows you to e.g. test over `uint32_t`, `uint64_t`, and `size_t` without compilation failing
 859  * The precision of floating point stringification can be modified by user (#1612, #1614)
 860  * We now provide `REGISTER_ENUM` convenience macro for generating `StringMaker` specializations for enums
 861    * See the "String conversion" documentation for details
 862  * Added new set of macros for template test cases that enables the use of NTTPs (#1531, #1609)
 863    * See "Test cases and sections" documentation for details
 864  
 865  ### Fixes
 866  * `UNSCOPED_INFO` macro now has a prefixed/disabled/prefixed+disabled versions (#1611)
 867  * Reporting errors at startup should no longer cause a segfault under certain circumstances (#1626)
 868  
 869  
 870  ### Miscellaneous
 871  * CMake will now prevent you from attempting in-tree build (#1636, #1638)
 872    * Previously it would break with an obscure error message during the build step
 873  
 874  
 875  ## 2.7.2
 876  
 877  ### Improvements
 878  * Added an approximate vector matcher (#1499)
 879  
 880  ### Fixes
 881  * Filters will no longer be shown if there were none
 882  * Fixed compilation error when using Homebrew GCC on OS X (#1588, #1589)
 883  * Fixed the console reporter not showing messages that start with a newline (#1455, #1470)
 884  * Modified JUnit reporter's output so that rng seed and filters are reported according to the JUnit schema (#1598)
 885  * Fixed some obscure warnings and static analysis passes
 886  
 887  ### Miscellaneous
 888  * Various improvements to `ParseAndAddCatchTests` (#1559, #1601)
 889    * When a target is parsed, it receives `ParseAndAddCatchTests_TESTS` property which summarizes found tests
 890    * Fixed problem with tests not being found if the `OptionalCatchTestLauncher` variables is used
 891    * Including the script will no longer forcefully modify `CMAKE_MINIMUM_REQUIRED_VERSION`
 892    * CMake object libraries are ignored when parsing to avoid needless warnings
 893  * `CatchAddTests` now adds test's tags to their CTest labels (#1600)
 894  * Added basic CPack support to our build
 895  
 896  ## 2.7.1
 897  
 898  ### Improvements
 899  * Reporters now print out the filters applied to test cases (#1550, #1585)
 900  * Added `GENERATE_COPY` and `GENERATE_REF` macros that can use variables inside the generator expression
 901    * Because of the significant danger of lifetime issues, the default `GENERATE` macro still does not allow variables
 902  * The `map` generator helper now deduces the mapped return type (#1576)
 903  
 904  ### Fixes
 905  * Fixed ObjC++ compilation (#1571)
 906  * Fixed test tag parsing so that `[.foo]` is now parsed as `[.][foo]`.
 907  * Suppressed warning caused by the Windows headers defining SE codes in different manners (#1575)
 908  
 909  ## 2.7.0
 910  
 911  ### Improvements
 912  * `TEMPLATE_PRODUCT_TEST_CASE` now uses the resulting type in the name, instead of the serial number (#1544)
 913  * Catch2's single header is now strictly ASCII (#1542)
 914  * Added generator for random integral/floating point types
 915    * The types are inferred within the `random` helper
 916  * Added back RangeGenerator (#1526)
 917    * RangeGenerator returns elements within a certain range
 918  * Added ChunkGenerator generic transform (#1538)
 919    * A ChunkGenerator returns the elements from different generator in chunks of n elements
 920  * Added `UNSCOPED_INFO` (#415, #983, #1522)
 921    * This is a variant of `INFO` that lives until next assertion/end of the test case.
 922  
 923  
 924  ### Fixes
 925  * All calls to C stdlib functions are now `std::` qualified (#1541)
 926    * Code brought in from Clara was also updated.
 927  * Running tests will no longer open the specified output file twice (#1545)
 928    * This would cause trouble when the file was not a file, but rather a named pipe
 929    * Fixes the CLion/Resharper integration with Catch
 930  * Fixed `-Wunreachable-code` occurring with (old) ccache+cmake+clang combination (#1540)
 931  * Fixed `-Wdefaulted-function-deleted` warning with Clang 8 (#1537)
 932  * Catch2's type traits and helpers are now properly namespaced inside `Catch::` (#1548)
 933  * Fixed std{out,err} redirection for failing test (#1514, #1525)
 934    * Somehow, this bug has been present for well over a year before it was reported
 935  
 936  
 937  ### Contrib
 938  * `ParseAndAddCatchTests` now properly escapes commas in the test name
 939  
 940  
 941  
 942  ## 2.6.1
 943  
 944  ### Improvements
 945  * The JUnit reporter now also reports random seed (#1520, #1521)
 946  
 947  ### Fixes
 948  * The TAP reporter now formats comments with test name properly (#1529)
 949  * `CATCH_REQUIRE_THROWS`'s internals were unified with `REQUIRE_THROWS` (#1536)
 950    * This fixes a potential `-Wunused-value` warning when used
 951  * Fixed a potential segfault when using any of the `--list-*` options (#1533, #1534)
 952  
 953  
 954  ## 2.6.0
 955  
 956  **With this release the data generator feature is now fully supported.**
 957  
 958  
 959  ### Improvements
 960  * Added `TEMPLATE_PRODUCT_TEST_CASE` (#1454, #1468)
 961    * This allows you to easily test various type combinations, see documentation for details
 962  * The error message for `&&` and `||` inside assertions has been improved (#1273, #1480)
 963  * The error message for chained comparisons inside assertions has been improved (#1481)
 964  * Added `StringMaker` specialization for `std::optional` (#1510)
 965  * The generator interface has been redone once again (#1516)
 966    * It is no longer considered experimental and is fully supported
 967    * The new interface supports "Input" generators
 968    * The generator documentation has been fully updated
 969    * We also added 2 generator examples
 970  
 971  
 972  ### Fixes
 973  * Fixed `-Wredundant-move` on newer Clang (#1474)
 974  * Removed unreachable mentions `std::current_exception`, `std::rethrow_exception` in no-exceptions mode (#1462)
 975    * This should fix compilation with IAR
 976  * Fixed missing `<type_traits>` include (#1494)
 977  * Fixed various static analysis warnings
 978    * Unrestored stream state in `XmlWriter` (#1489)
 979    * Potential division by zero in `estimateClockResolution` (#1490)
 980    * Uninitialized member in `RunContext` (#1491)
 981    * `SourceLineInfo` move ops are now marked `noexcept`
 982    * `CATCH_BREAK_INTO_DEBUGGER` is now always a function
 983  * Fix double run of a test case if user asks for a specific section (#1394, #1492)
 984  * ANSI colour code output now respects `-o` flag and writes to the file as well (#1502)
 985  * Fixed detection of `std::variant` support for compilers other than Clang (#1511)
 986  
 987  
 988  ### Contrib
 989  * `ParseAndAddCatchTests` has learned how to use `DISABLED` CTest property (#1452)
 990  * `ParseAndAddCatchTests` now works when there is a whitespace before the test name (#1493)
 991  
 992  
 993  ### Miscellaneous
 994  * We added new issue templates for reporting issues on GitHub
 995  * `contributing.md` has been updated to reflect the current test status (#1484)
 996  
 997  
 998  
 999  ## 2.5.0
1000  
1001  ### Improvements
1002  * Added support for templated tests via `TEMPLATE_TEST_CASE` (#1437)
1003  
1004  
1005  ### Fixes
1006  * Fixed compilation of `PredicateMatcher<const char*>` by removing partial specialization of `MatcherMethod<T*>`
1007  * Listeners now implicitly support any verbosity (#1426)
1008  * Fixed compilation with Embarcadero builder by introducing `Catch::isnan` polyfill (#1438)
1009  * Fixed `CAPTURE` asserting for non-trivial captures (#1436, #1448)
1010  
1011  
1012  ### Miscellaneous
1013  * We should now be providing first party Conan support via https://bintray.com/catchorg/Catch2 (#1443)
1014  * Added new section "deprecations and planned changes" to the documentation
1015    * It contains summary of what is deprecated and might change with next major version
1016  * From this release forward, the released headers should be pgp signed (#430)
1017    * KeyID `E29C 46F3 B8A7 5028 6079 3B7D ECC9 C20E 314B 2360`
1018    * or https://codingnest.com/files/horenmar-publickey.asc
1019  
1020  
1021  ## 2.4.2
1022  
1023  ### Improvements
1024  * XmlReporter now also outputs the RNG seed that was used in a run (#1404)
1025  * `Catch::Session::applyCommandLine` now also accepts `wchar_t` arguments.
1026    * However, Catch2 still does not support unicode.
1027  * Added `STATIC_REQUIRE` macro (#1356, #1362)
1028  * Catch2's singleton's are now cleaned up even if tests are run (#1411)
1029    * This is mostly useful as a FP prevention for users who define their own main.
1030  * Specifying an invalid reporter via `-r` is now reported sooner (#1351, #1422)
1031  
1032  
1033  ### Fixes
1034  * Stringification no longer assumes that `char` is signed (#1399, #1407)
1035    * This caused a `Wtautological-compare` warning.
1036  * SFINAE for `operator<<` no longer sees different overload set than the actual insertion (#1403)
1037  
1038  
1039  ### Contrib
1040  * `catch_discover_tests` correctly adds tests with comma in name (#1327, #1409)
1041  * Added a new customization point in how the tests are launched to `catch_discover_tests`
1042  
1043  
1044  ## 2.4.1
1045  
1046  ### Improvements
1047  * Added a StringMaker for `std::(w)string_view` (#1375, #1376)
1048  * Added a StringMaker for `std::variant` (#1380)
1049    * This one is disabled by default to avoid increased compile-time drag
1050  * Added detection for cygwin environment without `std::to_string` (#1396, #1397)
1051  
1052  ### Fixes
1053  * `UnorderedEqualsMatcher` will no longer accept erroneously accept
1054  vectors that share suffix, but are not permutation of the desired vector
1055  * Abort after (`-x N`) can no longer be overshot by nested `REQUIRES` and
1056  subsequently ignored (#1391, #1392)
1057  
1058  
1059  ## 2.4.0
1060  
1061  **This release brings two new experimental features, generator support
1062  and a `-fno-exceptions` support. Being experimental means that they
1063  will not be subject to the usual stability guarantees provided by semver.**
1064  
1065  ### Improvements
1066  * Various small runtime performance improvements
1067  * `CAPTURE` macro is now variadic
1068  * Added `AND_GIVEN` macro (#1360)
1069  * Added experimental support for data generators
1070    * See [their documentation](generators.md) for details
1071  * Added support for compiling and running Catch without exceptions
1072    * Doing so limits the functionality somewhat
1073    * Look [into the documentation](configuration.md#disablingexceptions) for details
1074  
1075  ### Fixes
1076  * Suppressed `-Wnon-virtual-dtor` warnings in Matchers (#1357)
1077  * Suppressed `-Wunreachable-code` warnings in floating point matchers (#1350)
1078  
1079  ### CMake
1080  * It is now possible to override which Python is used to run Catch's tests (#1365)
1081  * Catch now provides infrastructure for adding tests that check compile-time configuration
1082  * Catch no longer tries to install itself when used as a subproject (#1373)
1083  * Catch2ConfigVersion.cmake is now generated as arch-independent (#1368)
1084    * This means that installing Catch from 32-bit machine and copying it to 64-bit one works
1085    * This fixes conan installation of Catch
1086  
1087  
1088  ## 2.3.0
1089  
1090  **This release changes the include paths provided by our CMake and
1091  pkg-config integration. The proper include path for the single-header
1092  when using one of the above is now `<catch2/catch.hpp>`. This change
1093  also necessitated changes to paths inside the repository, so that the
1094  single-header version is now at `single_include/catch2/catch.hpp`, rather
1095  than `single_include/catch.hpp`.**
1096  
1097  
1098  
1099  ### Fixes
1100  * Fixed Objective-C++ build
1101  * `-Wunused-variable` suppression no longer leaks from Catch's header under Clang
1102  * Implementation of the experimental new output capture can now be disabled (#1335)
1103    * This allows building Catch2 on platforms that do not provide things like `dup` or `tmpfile`.
1104  * The JUnit and XML reporters will no longer skip over successful tests when running without `-s`  (#1264, #1267, #1310)
1105    * See improvements for more details
1106  
1107  ### Improvements
1108  * pkg-config and CMake integration has been rewritten
1109    * If you use them, the new include path is `#include <catch2/catch.hpp>`
1110    * CMake installation now also installs scripts from `contrib/`
1111    * For details see the [new documentation](cmake-integration.md#top)
1112  * Reporters now have a new customization point, `ReporterPreferences::shouldReportAllAssertions`
1113    * When this is set to `false` and the tests are run without `-s`, passing assertions are not sent to the reporter.
1114    * Defaults to `false`.
1115  * Added `DYNAMIC_SECTION`, a section variant that constructs its name using stream
1116    * This means that you can do `DYNAMIC_SECTION("For X := " << x)`.
1117  
1118  
1119  ## 2.2.3
1120  
1121  **To fix some of the bugs, some behavior had to change in potentially breaking manner.**
1122  **This means that even though this is a patch release, it might not be a drop-in replacement.**
1123  
1124  ### Fixes
1125  * Listeners are now called before reporter
1126    * This was always documented to be the case, now it actually works that way
1127  * Catch's commandline will no longer accept multiple reporters
1128    * This was done because multiple reporters never worked properly and broke things in non-obvious ways
1129    * **This has potential to be a breaking change**
1130  * MinGW is now detected as Windows platform w/o SEH support (#1257)
1131    * This means that Catch2 no longer tries to use POSIX signal handling when compiled with MinGW
1132  * Fixed potential UB in parsing tags using non-ASCII characters (#1266)
1133    * Note that Catch2 still supports only ASCII test names/tags/etc
1134  * `TEST_CASE_METHOD` can now be used on classnames containing commas (#1245)
1135    * You have to enclose the classname in extra set of parentheses
1136  * Fixed insufficient alt stack size for POSIX signal handling (#1225)
1137  * Fixed compilation error on Android due to missing `std::to_string` in C++11 mode (#1280)
1138  * Fixed the order of user-provided `FALLBACK_STRINGIFIER` in stringification machinery (#1024)
1139    * It was intended to be replacement for built-in fallbacks, but it was used _after_ them.
1140    * **This has potential to be a breaking change**
1141  * Fixed compilation error when a type has an `operator<<` with templated lhs (#1285, #1306)
1142  
1143  ### Improvements
1144  * Added a new, experimental, output capture (#1243)
1145    * This capture can also redirect output written via C apis, e.g. `printf`
1146    * To opt-in, define `CATCH_CONFIG_EXPERIMENTAL_REDIRECT` in the implementation file
1147  * Added a new fallback stringifier for classes derived from `std::exception`
1148    * Both `StringMaker` specialization and `operator<<` overload are given priority
1149  
1150  ### Miscellaneous
1151  * `contrib/` now contains dbg scripts that skip over Catch's internals (#904, #1283)
1152    * `gdbinit` for gdb `lldbinit` for lldb
1153  * `CatchAddTests.cmake` no longer strips whitespace from tests (#1265, #1281)
1154  * Online documentation now describes `--use-colour` option (#1263)
1155  
1156  
1157  ## 2.2.2
1158  
1159  ### Fixes
1160  * Fixed bug in `WithinAbs::match()` failing spuriously (#1228)
1161  * Fixed clang-tidy diagnostic about virtual call in destructor (#1226)
1162  * Reduced the number of GCC warnings suppression leaking out of the header (#1090, #1091)
1163    * Only `-Wparentheses` should be leaking now
1164  * Added upper bound on the time benchmark timer calibration is allowed to take (#1237)
1165    * On platforms where `std::chrono::high_resolution_clock`'s resolution is low, the calibration would appear stuck
1166  * Fixed compilation error when stringifying static arrays of `unsigned char`s (#1238)
1167  
1168  ### Improvements
1169  * XML encoder now hex-encodes invalid UTF-8 sequences (#1207)
1170    * This affects xml and junit reporters
1171    * Some invalid UTF-8 parts are left as is, e.g. surrogate pairs. This is because certain extensions of UTF-8 allow them, such as WTF-8.
1172  * CLR objects (`T^`) can now be stringified (#1216)
1173    * This affects code compiled as C++/CLI
1174  * Added `PredicateMatcher`, a matcher that takes an arbitrary predicate function (#1236)
1175    * See [documentation for details](https://github.com/catchorg/Catch2/blob/devel/docs/matchers.md)
1176  
1177  ### Others
1178  * Modified CMake-installed pkg-config to allow `#include <catch.hpp>`(#1239)
1179    * The plans to standardize on `#include <catch2/catch.hpp>` are still in effect
1180  
1181  
1182  ## 2.2.1
1183  
1184  ### Fixes
1185  * Fixed compilation error when compiling Catch2 with `std=c++17` against libc++ (#1214)
1186    * Clara (Catch2's CLI parsing library) used `std::optional` without including it explicitly
1187  * Fixed Catch2 return code always being 0 (#1215)
1188    * In the words of STL, "We feel superbad about letting this in"
1189  
1190  
1191  ## 2.2.0
1192  
1193  ### Fixes
1194  * Hidden tests are not listed by default when listing tests (#1175)
1195    * This makes `catch_discover_tests` CMake script work better
1196  * Fixed regression that meant `<windows.h>` could potentially not be included properly (#1197)
1197  * Fixed installing `Catch2ConfigVersion.cmake` when Catch2 is a subproject.
1198  
1199  ### Improvements
1200  * Added an option to warn (+ exit with error) when no tests were ran (#1158)
1201    * Use as `-w NoTests`
1202  * Added provisional support for Emscripten (#1114)
1203  * [Added a way to override the fallback stringifier](https://github.com/catchorg/Catch2/blob/devel/docs/configuration.md#fallback-stringifier) (#1024)
1204    * This allows project's own stringification machinery to be easily reused for Catch
1205  * `Catch::Session::run()` now accepts `char const * const *`, allowing it to accept array of string literals (#1031, #1178)
1206    * The embedded version of Clara was bumped to v1.1.3
1207  * Various minor performance improvements
1208  * Added support for DJGPP DOS crosscompiler (#1206)
1209  
1210  
1211  ## 2.1.2
1212  
1213  ### Fixes
1214  * Fixed compilation error with `-fno-rtti` (#1165)
1215  * Fixed NoAssertion warnings
1216  * `operator<<` is used before range-based stringification (#1172)
1217  * Fixed `-Wpedantic` warnings (extra semicolons and binary literals) (#1173)
1218  
1219  
1220  ### Improvements
1221  * Added `CATCH_VERSION_{MAJOR,MINOR,PATCH}` macros (#1131)
1222  * Added `BrightYellow` colour for use in reporters (#979)
1223    * It is also used by ConsoleReporter for reconstructed expressions
1224  
1225  ### Other changes
1226  * Catch is now exported as a CMake package and linkable target (#1170)
1227  
1228  ## 2.1.1
1229  
1230  ### Improvements
1231  * Static arrays are now properly stringified like ranges across MSVC/GCC/Clang
1232  * Embedded newer version of Clara -- v1.1.1
1233    * This should fix some warnings dragged in from Clara
1234  * MSVC's CLR exceptions are supported
1235  
1236  
1237  ### Fixes
1238  * Fixed compilation when comparison operators do not return bool (#1147)
1239  * Fixed CLR exceptions blowing up the executable during translation (#1138)
1240  
1241  
1242  ### Other changes
1243  * Many CMake changes
1244    * `NO_SELFTEST` option is deprecated, use `BUILD_TESTING` instead.
1245    * Catch specific CMake options were prefixed with `CATCH_` for namespacing purposes
1246    * Other changes to simplify Catch2's packaging
1247  
1248  
1249  
1250  ## 2.1.0
1251  
1252  ### Improvements
1253  * Various performance improvements
1254    * On top of the performance regression fixes
1255  * Experimental support for PCH was added (#1061)
1256  * `CATCH_CONFIG_EXTERNAL_INTERFACES` now brings in declarations of Console, Compact, XML and JUnit reporters
1257  * `MatcherBase` no longer has a pointless second template argument
1258  * Reduced the number of warning suppressions that leak into user's code
1259    * Bugs in g++ 4.x and 5.x mean that some of them have to be left in
1260  
1261  
1262  ### Fixes
1263  * Fixed performance regression from Catch classic
1264    * One of the performance improvement patches for Catch classic was not applied to Catch2
1265  * Fixed platform detection for iOS (#1084)
1266  * Fixed compilation when `g++` is used together with `libc++` (#1110)
1267  * Fixed TeamCity reporter compilation with the single header version
1268    * To fix the underlying issue we will be versioning reporters in single_include folder per release
1269  * The XML reporter will now report `WARN` messages even when not used with `-s`
1270  * Fixed compilation when `VectorContains` matcher was combined using `&&` (#1092)
1271  * Fixed test duration overflowing after 10 seconds (#1125, #1129)
1272  * Fixed `std::uncaught_exception` deprecation warning (#1124)
1273  
1274  
1275  ### New features
1276  * New Matchers
1277    * Regex matcher for strings, `Matches`.
1278    * Set-equal matcher for vectors, `UnorderedEquals`
1279    * Floating point matchers, `WithinAbs` and `WithinULP`.
1280  * Stringification now attempts to decompose all containers (#606)
1281    * Containers are objects that respond to ADL `begin(T)` and `end(T)`.
1282  
1283  
1284  ### Other changes
1285  * Reporters will now be versioned in the `single_include` folder to ensure their compatibility with the last released version
1286  
1287  
1288  
1289  
1290  ## 2.0.1
1291  
1292  ### Breaking changes
1293  * Removed C++98 support
1294  * Removed legacy reporter support
1295  * Removed legacy generator support
1296    * Generator support will come back later, reworked
1297  * Removed `Catch::toString` support
1298    * The new stringification machinery uses `Catch::StringMaker` specializations first and `operator<<` overloads second.
1299  * Removed legacy `SCOPED_MSG` and `SCOPED_INFO` macros
1300  * Removed `INTERNAL_CATCH_REGISTER_REPORTER`
1301    * `CATCH_REGISTER_REPORTER` should be used to register reporters
1302  * Removed legacy `[hide]` tag
1303    * `[.]`, `[.foo]` and `[!hide]` are still supported
1304  * Output into debugger is now colourized
1305  * `*_THROWS_AS(expr, exception_type)` now unconditionally appends `const&` to the exception type.
1306  * `CATCH_CONFIG_FAST_COMPILE` now affects the `CHECK_` family of assertions as well as `REQUIRE_` family of assertions
1307    * This is most noticeable in `CHECK(throws())`, which would previously report failure, properly stringify the exception and continue. Now it will report failure and stop executing current section.
1308  * Removed deprecated matcher utility functions `Not`, `AllOf` and `AnyOf`.
1309    * They are superseded by operators `!`, `&&` and `||`, which are natural and do not have limited arity
1310  * Removed support for non-const comparison operators
1311    * Non-const comparison operators are an abomination that should not exist
1312    * They were breaking support for comparing function to function pointer
1313  * `std::pair` and `std::tuple` are no longer stringified by default
1314    * This is done to avoid dragging in `<tuple>` and `<utility>` headers in common path
1315    * Their stringification can be enabled per-file via new configuration macros
1316  * `Approx` is subtly different and hopefully behaves more as users would expect
1317    * `Approx::scale` defaults to `0.0`
1318    * `Approx::epsilon` no longer applies to the larger of the two compared values, but only to the `Approx`'s value
1319    * `INFINITY == Approx(INFINITY)` returns true
1320  
1321  
1322  ### Improvements
1323  * Reporters and Listeners can be defined in files different from the main file
1324    * The file has to define `CATCH_CONFIG_EXTERNAL_INTERFACES` before including catch.hpp.
1325  * Errors that happen during set up before main are now caught and properly reported once main is entered
1326    * If you are providing your own main, you can access and use these as well.
1327  * New assertion macros, *_THROWS_MATCHES(expr, exception_type, matcher) are provided
1328    * As the arguments suggest, these allow you to assert that an expression throws desired type of exception and pass the exception to a matcher.
1329  * JUnit reporter no longer has significantly different output for test cases with and without sections
1330  * Most assertions now support expressions containing commas (ie `REQUIRE(foo() == std::vector<int>{1, 2, 3});`)
1331  * Catch now contains experimental micro benchmarking support
1332    * See `projects/SelfTest/Benchmark.tests.cpp` for examples
1333    * The support being experiment means that it can be changed without prior notice
1334  * Catch uses new CLI parsing library (Clara)
1335    * Users can now easily add new command line options to the final executable
1336    * This also leads to some changes in `Catch::Session` interface
1337  * All parts of matchers can be removed from a TU by defining `CATCH_CONFIG_DISABLE_MATCHERS`
1338    * This can be used to somewhat speed up compilation times
1339  * An experimental implementation of `CATCH_CONFIG_DISABLE` has been added
1340    * Inspired by Doctest's `DOCTEST_CONFIG_DISABLE`
1341    * Useful for implementing tests in source files
1342      * ie for functions in anonymous namespaces
1343    * Removes all assertions
1344    * Prevents `TEST_CASE` registrations
1345    * Exception translators are not registered
1346    * Reporters are not registered
1347    * Listeners are not registered
1348  * Reporters/Listeners are now notified of fatal errors
1349    * This means specific signals or structured exceptions
1350    * The Reporter/Listener interface provides default, empty, implementation to preserve backward compatibility
1351  * Stringification of `std::chrono::duration` and `std::chrono::time_point` is now supported
1352    * Needs to be enabled by a per-file compile time configuration option
1353  * Add `pkg-config` support to CMake install command
1354  
1355  
1356  ### Fixes
1357  * Don't use console colour if running in XCode
1358  * Explicit constructor in reporter base class
1359  * Swept out `-Wweak-vtables`, `-Wexit-time-destructors`, `-Wglobal-constructors` warnings
1360  * Compilation for Universal Windows Platform (UWP) is supported
1361    * SEH handling and colorized output are disabled when compiling for UWP
1362  * Implemented a workaround for `std::uncaught_exception` issues in libcxxrt
1363    * These issues caused incorrect section traversals
1364    * The workaround is only partial, user's test can still trigger the issue by using `throw;` to rethrow an exception
1365  * Suppressed C4061 warning under MSVC
1366  
1367  
1368  ### Internal changes
1369  * The development version now uses .cpp files instead of header files containing implementation.
1370    * This makes partial rebuilds much faster during development
1371  * The expression decomposition layer has been rewritten
1372  * The evaluation layer has been rewritten
1373  * New library (TextFlow) is used for formatting text to output
1374  
1375  
1376  ## Older versions
1377  
1378  ### 1.12.x
1379  
1380  #### 1.12.2
1381  ##### Fixes
1382  * Fixed missing <cassert> include
1383  
1384  #### 1.12.1
1385  
1386  ##### Fixes
1387  * Fixed deprecation warning in `ScopedMessage::~ScopedMessage`
1388  * All uses of `min` or `max` identifiers are now wrapped in parentheses
1389    * This avoids problems when Windows headers define `min` and `max` macros
1390  
1391  #### 1.12.0
1392  
1393  ##### Fixes
1394  * Fixed compilation for strict C++98 mode (ie not gnu++98) and older compilers (#1103)
1395  * `INFO` messages are included in the `xml` reporter output even without `-s` specified.
1396  
1397  
1398  ### 1.11.x
1399  
1400  #### 1.11.0
1401  
1402  ##### Fixes
1403  * The original expression in `REQUIRE_FALSE( expr )` is now reporter properly as `!( expr )` (#1051)
1404    * Previously the parentheses were missing and `x != y` would be expanded as `!x != x`
1405  * `Approx::Margin` is now inclusive (#952)
1406    * Previously it was meant and documented as inclusive, but the check itself wasn't
1407    * This means that `REQUIRE( 0.25f == Approx( 0.0f ).margin( 0.25f ) )` passes, instead of fails
1408  * `RandomNumberGenerator::result_type` is now unsigned (#1050)
1409  
1410  ##### Improvements
1411  * `__JETBRAINS_IDE__` macro handling is now CLion version specific (#1017)
1412    * When CLion 2017.3 or newer is detected, `__COUNTER__` is used instead of
1413  * TeamCity reporter now explicitly flushes output stream after each report (#1057)
1414    * On some platforms, output from redirected streams would show up only after the tests finished running
1415  * `ParseAndAddCatchTests` now can add test files as dependency to CMake configuration
1416    * This means you do not have to manually rerun CMake configuration step to detect new tests
1417  
1418  ### 1.10.x
1419  
1420  #### 1.10.0
1421  
1422  ##### Fixes
1423  * Evaluation layer has been rewritten (backported from Catch 2)
1424    * The new layer is much simpler and fixes some issues (#981)
1425  * Implemented workaround for VS 2017 raw string literal stringification bug (#995)
1426  * Fixed interaction between `[!shouldfail]` and `[!mayfail]` tags and sections
1427    * Previously sections with failing assertions would be marked as failed, not failed-but-ok
1428  
1429  ##### Improvements
1430  * Added [libidentify](https://github.com/janwilmans/LibIdentify) support
1431  * Added "wait-for-keypress" option
1432  
1433  ### 1.9.x
1434  
1435  #### 1.9.6
1436  
1437  ##### Improvements
1438  * Catch's runtime overhead has been significantly decreased (#937, #939)
1439  * Added `--list-extra-info` cli option (#934).
1440    * It lists all tests together with extra information, ie filename, line number and description.
1441  
1442  
1443  
1444  #### 1.9.5
1445  
1446  ##### Fixes
1447  * Truthy expressions are now reconstructed properly, not as booleans (#914)
1448  * Various warnings are no longer erroneously suppressed in test files (files that include `catch.hpp`, but do not define `CATCH_CONFIG_MAIN` or `CATCH_CONFIG_RUNNER`) (#871)
1449  * Catch no longer fails to link when main is compiled as C++, but linked against Objective-C (#855)
1450  * Fixed incorrect gcc version detection when deciding to use `__COUNTER__` (#928)
1451    * Previously any GCC with minor version less than 3 would be incorrectly classified as not supporting `__COUNTER__`.
1452  * Suppressed C4996 warning caused by upcoming updated to MSVC 2017, marking `std::uncaught_exception` as deprecated. (#927)
1453  
1454  ##### Improvements
1455  * CMake integration script now incorporates debug messages and registers tests in an improved way (#911)
1456  * Various documentation improvements
1457  
1458  
1459  
1460  #### 1.9.4
1461  
1462  ##### Fixes
1463  * `CATCH_FAIL` macro no longer causes compilation error without variadic macro support
1464  * `INFO` messages are no longer cleared after being reported once
1465  
1466  ##### Improvements and minor changes
1467  * Catch now uses `wmain` when compiled under Windows and `UNICODE` is defined.
1468    * Note that Catch still officially supports only ASCII
1469  
1470  #### 1.9.3
1471  
1472  ##### Fixes
1473  * Completed the fix for (lack of) uint64_t in earlier Visual Studios
1474  
1475  #### 1.9.2
1476  
1477  ##### Improvements and minor changes
1478  * All of `Approx`'s member functions now accept strong typedefs in C++11 mode (#888)
1479    * Previously `Approx::scale`, `Approx::epsilon`, `Approx::margin` and `Approx::operator()` didn't.
1480  
1481  
1482  ##### Fixes
1483  * POSIX signals are now disabled by default under QNX (#889)
1484    * QNX does not support current enough (2001) POSIX specification
1485  * JUnit no longer counts exceptions as failures if given test case is marked as ok to fail.
1486  * `Catch::Option` should now have its storage properly aligned.
1487  * Catch no longer attempts to define `uint64_t` on windows (#862)
1488    * This was causing trouble when compiled under Cygwin
1489  
1490  ##### Other
1491  * Catch is now compiled under MSVC 2017 using `std:c++latest` (C++17 mode) in CI
1492  * We now provide cmake script that autoregisters Catch tests into ctest.
1493    * See `contrib` folder.
1494  
1495  
1496  #### 1.9.1
1497  
1498  ##### Fixes
1499  * Unexpected exceptions are no longer ignored by default (#885, #887)
1500  
1501  
1502  #### 1.9.0
1503  
1504  
1505  ##### Improvements and minor changes
1506  * Catch no longer attempts to ensure the exception type passed by user in `REQUIRE_THROWS_AS` is a constant reference.
1507    * It was causing trouble when `REQUIRE_THROWS_AS` was used inside templated functions
1508    * This actually reverts changes made in v1.7.2
1509  * Catch's `Version` struct should no longer be double freed when multiple instances of Catch tests are loaded into single program (#858)
1510    * It is now a static variable in an inline function instead of being an `extern`ed struct.
1511  * Attempt to register invalid tag or tag alias now throws instead of calling `exit()`.
1512    * Because this happen before entering main, it still aborts execution
1513    * Further improvements to this are coming
1514  * `CATCH_CONFIG_FAST_COMPILE` now speeds-up compilation of `REQUIRE*` assertions by further ~15%.
1515    * The trade-off is disabling translation of unexpected exceptions into text.
1516  * When Catch is compiled using C++11, `Approx` is now constructible with anything that can be explicitly converted to `double`.
1517  * Captured messages are now printed on unexpected exceptions
1518  
1519  ##### Fixes:
1520  * Clang's `-Wexit-time-destructors` should be suppressed for Catch's internals
1521  * GCC's `-Wparentheses` is now suppressed for all TU's that include `catch.hpp`.
1522    * This is functionally a revert of changes made in 1.8.0, where we tried using `_Pragma` based suppression. This should have kept the suppression local to Catch's assertions, but bugs in GCC's handling of `_Pragma`s in C++ mode meant that it did not always work.
1523  * You can now tell Catch to use C++11-based check when checking whether a type can be streamed to output.
1524    * This fixes cases when an unstreamable type has streamable private base (#877)
1525    * [Details can be found in documentation](configuration.md#catch_config_cpp11_stream_insertable_check)
1526  
1527  
1528  ##### Other notes:
1529  * We have added VS 2017 to our CI
1530  * Work on Catch 2 should start soon
1531  
1532  
1533  
1534  ### 1.8.x
1535  
1536  #### 1.8.2
1537  
1538  
1539  ##### Improvements and minor changes
1540  * TAP reporter now behaves as if `-s` was always set
1541    * This should be more consistent with the protocol desired behaviour.
1542  * Compact reporter now obeys `-d yes` argument (#780)
1543    * The format is "XXX.123 s: <section-name>" (3 decimal places are always present).
1544    * Before it did not report the durations at all.
1545  * XML reporter now behaves the same way as Console reporter in regards to `INFO`
1546    * This means it reports `INFO` messages on success, if output on success (`-s`) is enabled.
1547    * Previously it only reported `INFO` messages on failure.
1548  * `CAPTURE(expr)` now stringifies `expr` in the same way assertion macros do (#639)
1549  * Listeners are now finally [documented](event-listeners.md#top).
1550    * Listeners provide a way to hook into events generated by running your tests, including start and end of run, every test case, every section and every assertion.
1551  
1552  
1553  ##### Fixes:
1554  * Catch no longer attempts to reconstruct expression that led to a fatal error  (#810)
1555    * This fixes possible signal/SEH loop when processing expressions, where the signal was triggered by expression decomposition.
1556  * Fixed (C4265) missing virtual destructor warning in Matchers (#844)
1557  * `std::string`s are now taken by `const&` everywhere (#842).
1558    * Previously some places were taking them by-value.
1559  * Catch should no longer change errno (#835).
1560    * This was caused by libstdc++ bug that we now work around.
1561  * Catch now provides `FAIL_CHECK( ... )` macro (#765).
1562    * Same as `FAIL( ... )`, but does not abort the test.
1563  * Functions like `fabs`, `tolower`, `memset`, `isalnum` are now used with `std::` qualification (#543).
1564  * Clara no longer assumes first argument (binary name) is always present (#729)
1565    * If it is missing, empty string is used as default.
1566  * Clara no longer reads 1 character past argument string (#830)
1567  * Regression in Objective-C bindings (Matchers) fixed (#854)
1568  
1569  
1570  ##### Other notes:
1571  * We have added VS 2013 and 2015 to our CI
1572  * Catch Classic (1.x.x) now contains its own, forked, version of Clara (the argument parser).
1573  
1574  
1575  
1576  #### 1.8.1
1577  
1578  ##### Fixes
1579  
1580  Cygwin issue with `gettimeofday` - `#define` was not early enough
1581  
1582  #### 1.8.0
1583  
1584  ##### New features/ minor changes
1585  
1586  * Matchers have new, simpler (and documented) interface.
1587    * Catch provides string and vector matchers.
1588    * For details see [Matchers documentation](matchers.md#top).
1589  * Changed console reporter test duration reporting format (#322)
1590    * Old format: `Some simple comparisons between doubles completed in 0.000123s`
1591    * New format: `xxx.123s: Some simple comparisons between doubles` _(There will always be exactly 3 decimal places)_
1592  * Added opt-in leak detection under MSVC + Windows (#439)
1593    * Enable it by compiling Catch's main with `CATCH_CONFIG_WINDOWS_CRTDBG`
1594  * Introduced new compile-time flag, `CATCH_CONFIG_FAST_COMPILE`, trading features for compilation speed.
1595    * Moves debug breaks out of tests and into implementation, speeding up test compilation time (~10% on linux).
1596    * _More changes are coming_
1597  * Added [TAP (Test Anything Protocol)](https://testanything.org/) and [Automake](https://www.gnu.org/software/automake/manual/html_node/Log-files-generation-and-test-results-recording.html#Log-files-generation-and-test-results-recording) reporters.
1598    * These are not present in the default single-include header and need to be downloaded from GitHub separately.
1599    * For details see [documentation about integrating with build systems](build-systems.md#top).
1600  *  XML reporter now reports filename as part of the `Section` and `TestCase` tags.
1601  * `Approx` now supports an optional margin of absolute error
1602    * It has also received [new documentation](assertions.md#top).
1603  
1604  ##### Fixes
1605  * Silenced C4312 ("conversion from int to 'ClassName *") warnings in the evaluate layer.
1606  * Fixed C4512 ("assignment operator could not be generated") warnings under VS2013.
1607  * Cygwin compatibility fixes
1608    * Signal handling is no longer compiled by default.
1609    * Usage of `gettimeofday` inside Catch should no longer cause compilation errors.
1610  * Improved `-Wparentheses` suppression for gcc (#674)
1611    * When compiled with gcc 4.8 or newer, the suppression is localized to assertions only
1612    * Otherwise it is suppressed for the whole TU
1613  * Fixed test spec parser issue (with escapes in multiple names)
1614  
1615  ##### Other
1616  * Various documentation fixes and improvements
1617  
1618  
1619  ### 1.7.x
1620  
1621  #### 1.7.2
1622  
1623  ##### Fixes and minor improvements
1624  Xml:
1625  
1626  (technically the first two are breaking changes but are also fixes and arguably break few if any people)
1627  * C-escape control characters instead of XML encoding them (which requires XML 1.1)
1628  * Revert XML output to XML 1.0
1629  * Can provide stylesheet references by extending the XML reporter
1630  * Added description and tags attributes to XML Reporter
1631  * Tags are closed and the stream flushed more eagerly to avoid stdout interpolation
1632  
1633  
1634  Other:
1635  * `REQUIRE_THROWS_AS` now catches exception by `const&` and reports expected type
1636  * In `SECTION`s the file/ line is now of the `SECTION`. not the `TEST_CASE`
1637  * Added std:: qualification to some functions from C stdlib
1638  * Removed use of RTTI (`dynamic_cast`) that had crept back in
1639  * Silenced a few more warnings in different circumstances
1640  * Travis improvements
1641  
1642  #### 1.7.1
1643  
1644  ##### Fixes:
1645  * Fixed inconsistency in defining `NOMINMAX` and `WIN32_LEAN_AND_MEAN` inside `catch.hpp`.
1646  * Fixed SEH-related compilation error under older MinGW compilers, by making Windows SEH handling opt-in for compilers other than MSVC.
1647    * For specifics, look into the [documentation](configuration.md#top).
1648  * Fixed compilation error under MinGW caused by improper compiler detection.
1649  * Fixed XML reporter sometimes leaving an empty output file when a test ends with signal/structured exception.
1650  * Fixed XML reporter not reporting captured stdout/stderr.
1651  * Fixed possible infinite recursion in Windows SEH.
1652  * Fixed possible compilation error caused by Catch's operator overloads being ambiguous in regards to user-defined templated operators.
1653  
1654  #### 1.7.0
1655  
1656  ##### Features/ Changes:
1657  * Catch now runs significantly faster for passing tests
1658    * Microbenchmark focused on Catch's overhead went from ~3.4s to ~0.7s.
1659    * Real world test using [JSON for Modern C++](https://github.com/nlohmann/json)'s test suite went from ~6m 25s to ~4m 14s.
1660  * Catch can now run specific sections within test cases.
1661    * For now the support is only basic (no wildcards or tags), for details see the [documentation](command-line.md#top).
1662  * Catch now supports SEH on Windows as well as signals on Linux.
1663    * After receiving a signal, Catch reports failing assertion and then passes the signal onto the previous handler.
1664  * Approx can be used to compare values against strong typedefs (available in C++11 mode only).
1665    * Strong typedefs mean types that are explicitly convertible to double.
1666  * CHECK macro no longer stops executing section if an exception happens.
1667  * Certain characters (space, tab, etc) are now pretty printed.
1668    * This means that a `char c = ' '; REQUIRE(c == '\t');` would be printed as `' ' == '\t'`, instead of ` == 9`.
1669  
1670  ##### Fixes:
1671  * Text formatting no longer attempts to access out-of-bounds characters under certain conditions.
1672  * THROW family of assertions no longer trigger `-Wunused-value` on expressions containing explicit cast.
1673  * Breaking into debugger under OS X works again and no longer required `DEBUG` to be defined.
1674  * Compilation no longer breaks under certain compiler if a lambda is used inside assertion macro.
1675  
1676  ##### Other:
1677  * Catch's CMakeLists now defines install command.
1678  * Catch's CMakeLists now generates projects with warnings enabled.
1679  
1680  
1681  ### 1.6.x
1682  
1683  #### 1.6.1
1684  
1685  ##### Features/ Changes:
1686  * Catch now supports breaking into debugger on Linux
1687  
1688  ##### Fixes:
1689  * Generators no longer leak memory (generators are still unsupported in general)
1690  * JUnit reporter now reports UTC timestamps, instead of "tbd"
1691  * `CHECK_THAT` macro is now properly defined as `CATCH_CHECK_THAT` when using `CATCH_` prefixed macros
1692  
1693  ##### Other:
1694  * Types with overloaded `&&` operator are no longer evaluated twice when used in an assertion macro.
1695  * The use of `__COUNTER__` is suppressed when Catch is parsed by CLion
1696    * This change is not active when compiling a binary
1697  * Approval tests can now be run on Windows
1698  * CMake will now warn if a file is present in the `include` folder but not is not enumerated as part of the project
1699  * Catch now defines `NOMINMAX` and `WIN32_LEAN_AND_MEAN` before including `windows.h`
1700    * This can be disabled if needed, see [documentation](configuration.md#top) for details.
1701  
1702  
1703  #### 1.6.0
1704  
1705  ##### Cmake/ projects:
1706  * Moved CMakeLists.txt to root, made it friendlier for CLion and generating XCode and VS projects, and removed the manually maintained XCode and VS projects.
1707  
1708  ##### Features/ Changes:
1709  * Approx now supports `>=` and `<=`
1710  * Can now use `\` to escape chars in test names on command line
1711  * Standardize C++11 feature toggles
1712  
1713  ##### Fixes:
1714  * Blue shell colour
1715  * Missing argument to `CATCH_CHECK_THROWS`
1716  * Don't encode extended ASCII in XML
1717  * use `std::shuffle` on more compilers (fixes deprecation warning/error)
1718  * Use `__COUNTER__` more consistently (where available)
1719  
1720  ##### Other:
1721  * Tweaks and changes to scripts - particularly for Approval test - to make them more portable
1722  
1723  
1724  ## Even Older versions
1725  Release notes were not maintained prior to v1.6.0, but you should be able to work them out from the Git history
1726  
1727  ---
1728  
1729  [Home](Readme.md#top)