diff options
| author | Leitwolf11 | 2026-10-11 02:56:25 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-10-11 02:56:25 +0300 |
| commit | 1f78d8903c2fb18afea8c3055f8df83d8c60d9b5 (patch) | |
| tree | d76f5945311828511e3ea55712487f21fbf8f70f /docs | |
| parent | 5633c5c98ec073ae938253bcfc72430d5d9aee89 (diff) | |
| download | catch3-1f78d8903c2fb18afea8c3055f8df83d8c60d9b5.tar.gz | |
Backport Catch2 3.16.1
Review Catch2 devel through 08092139210881f01a34e60c5f2fd6afa0ea4024,
the commit of 3.16.1, and apply the eleven changes since the last
reviewed revision in upstream order:
d7683484 better message when a reporter cannot be initialized
ea5020f0 custom argument validation in every first-party reporter
aa01559e throwing-reporter test also throws in assertionEnded
45cd3987 noexcept on handleUnexpectedInflightException
6adbd539 MSVC optimizations enabled again after the benchmark headers
e87f2882 no quadratic scaling for NTTP test registration
73d546cd REQUIRE expands its arguments fewer times under GCC and Clang
b710039a decomposer operators as plain functions
f899467b type-erased streaming of reconstructed expressions
8f0e70ca retired macos-14 runner dropped
08092139 version 3.16.1 and its release notes
All of them applied to the sources without a conflict. The amalgamated
distribution under extras/ conflicted because it is generated; it is
generated again from the sources of this repository, which also brings
it up to date with fork changes it had not picked up: the list-based
stream pool, the Clang diagnostic boundary and the cassert include.
No file under src/Progmasoft changes. The fork-owned texts that name
the engine version say 3.16.1, and docs/upstream-status.md records the
review. Upstream files keep their names, licenses and compiler options.
Built with Clang 22 on Windows and tested: 148 of 149 tests pass. The
one that fails, Reporters::CrashInJunitReporter, fails the same way on
devel without this change with that compiler.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/deprecations.md | 10 | ||||
| -rw-r--r-- | docs/release-notes.md | 35 | ||||
| -rw-r--r-- | docs/upstream-status.md | 27 | ||||
| -rw-r--r-- | docs/why-catch3.md | 4 |
4 files changed, 74 insertions, 2 deletions
diff --git a/docs/deprecations.md b/docs/deprecations.md index 3915ddbc..82f044cc 100644 --- a/docs/deprecations.md +++ b/docs/deprecations.md @@ -62,6 +62,16 @@ specified the filters through the new `-p/--path-filter` parameter, which means that generators are taken into account. +### Reporter event handling functions without noexcept + +> Deprecated in Catch2 3.16.1 + +Catch2 does not try to support reporters throwing from arbitrary +`fooStarting` or `fooEnded` test running event. For legacy reasons, the +event listener interface is declared without `noexcept`, but in the future +it will be changed to use `noexcept` to make this limitation explicit. + + ### Generator interfaces #### Defaulted `UntypedGeneratorBase::isFinite()` diff --git a/docs/release-notes.md b/docs/release-notes.md index 3a2c7734..2ba3b663 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -5,6 +5,7 @@ # Release notes **Contents**<br> +[3.16.1](#3161)<br> [3.16.0](#3160)<br> [3.15.3](#3153)<br> [3.15.2](#3152)<br> @@ -82,6 +83,40 @@ [Even Older versions](#even-older-versions)<br> +## 3.16.1 + +### Fixes +* Fixed optimizations being disabled after including benchmarking headers under MSVC. (#3212) + * This was introduced in 3.16.0's fix for the deopt implementation for MSVC never being used. +* Fixed Console reporter replacing `\0xFF`s in user-provided strings. +* Added missing `<cassert>` include to `catch_generators_range.hpp`. (#3205) + +### Improvements +* Workaround for GCC's quadratic scaling for release builds with number of test cases. + * In practice the improvement is only noticeable with unity builds and/or template product tests. +* Changed how decomposer operators are defined for better compilation times. + * For Catch2's `SelfTest` binary, this provides ~2% build time improvement. +* Changed how decomposer handles stringification for smaller binary sizes. + * For the `SelfTest` binary this is about ~8%. +* Improved compilation costs of multiple assertions in one test cases for release builds. +* Optimized initial test registration at process start: + * Fewer allocations for test cases with many tags. + * Faster processing for test cases with <=2 tags. + * Faster tag validation. + * Faster checking for duplicated test cases. +* Optimized test selection and filtering: +* Optimized filtering tests by test name. + * Running `SelfTest` with `abc*` as the filter pattern is ~10% faster. + +### Miscellaneous +* `catch_discover_tests` registers individual tests with `--order decl` for faster startup. + * For `SelfTest`, this provides 20% improvement in Debug and 5% in Release builds. +* `CMakeConfig::` family of tests use the main build's toolchain file. (#3202) +* Deprecated throwing exceptions from the reporter interface functions. + * Previously, throwing from e.g. `assertionEnded` might, or might not, have worked depending on which assertion has ended. As it is not practical for Catch2 to guard against the reporters failing randomly, and marking so with `noexcept` can provide compilation throughput improvements, I decided to fully forbid it. + * Reporter constructors are allowed to throw and the test binary will report the error nicely before exiting. + * Due to C++ limitations, this deprecation cannot be marked inside the code, only in docs. + ## 3.16.0 diff --git a/docs/upstream-status.md b/docs/upstream-status.md index 99182ad7..ac87b654 100644 --- a/docs/upstream-status.md +++ b/docs/upstream-status.md @@ -13,6 +13,33 @@ licenses or compiler options: - `222e233903d287cda4713fb08e1a959e8d71fd6d`: isolate Clang's pointer-to-bool diagnostic at the upstream reusable-string-stream compatibility boundary. +The branch was reviewed again through +`08092139210881f01a34e60c5f2fd6afa0ea4024`, the commit of Catch2 3.16.1, on +2026-10-11. The eleven changes since the previous reviewed revision were all +backported, in upstream order, and the compatibility engine is now 3.16.1: + +- `d7683484`: a better message when a reporter cannot be initialized. +- `ea5020f0`: every first-party reporter validates its custom arguments. +- `aa01559e`: the throwing-reporter test also throws in `assertionEnded`. +- `45cd3987`: `handleUnexpectedInflightException` is `noexcept`. +- `6adbd539`: MSVC optimizations are enabled again after the benchmark + headers (upstream issue 3212). +- `e87f2882`: test registration with non-type template parameters no longer + scales quadratically. +- `73d546cd`: `REQUIRE` expands its arguments fewer times under GCC and + Clang. +- `b710039a`: the decomposer operators are plain functions and no longer + hidden friends. +- `f899467b`: streaming of reconstructed expressions is type-erased. +- `8f0e70ca`: the retired `macos-14` runner is dropped from the macOS builds. +- `08092139`: version 3.16.1, with its release notes. + +Each applied without a conflict in the sources. The amalgamated distribution +under `extras/` did conflict, because it is generated; it was generated again +from the sources of this repository with `generateAmalgamatedFiles.py`, which +also brought it up to date with fork changes it had not yet picked up. No +fork-owned file under `src/Progmasoft` needed a change. + These are compatibility fixes, not a claim that every future upstream change is automatically incorporated. The existing Windows/macOS build and test workflows remain the verification gate for the fork. diff --git a/docs/why-catch3.md b/docs/why-catch3.md index 7fbeef44..8c900ac7 100644 --- a/docs/why-catch3.md +++ b/docs/why-catch3.md @@ -7,7 +7,7 @@ namespace, build-target, and licensing boundary. The name does **not** mean that this is an official Catch2 v3 release, a new upstream version, or a project endorsed by Catch2's maintainers. The current -compatibility engine is based on Catch2's 3.16.0 development line. The project +compatibility engine is based on Catch2's 3.16.1 development line. The project is still early-stage and does not yet replace or independently reimplement the Catch2 runner. @@ -35,7 +35,7 @@ Catch2's `Catch` namespace, established headers, macros, command-line behavior, reporters, and coding style remain the compatibility surface. Progmasoft features should be added under `Progmasoft::Catch3` and must not require users to rename existing Catch2 tests. The first compatibility goal is source-level -continuity with the included Catch2 3.16.0 base; this is not a promise that every +continuity with the included Catch2 3.16.1 base; this is not a promise that every future Catch2 upstream change will be adopted unchanged or that all downstream projects have already been validated. |