Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/docs
diff options
context:
space:
mode:
authorLeitwolf112026-10-11 02:56:25 +0300
committerLeitwolf112026-10-11 02:56:25 +0300
commit1f78d8903c2fb18afea8c3055f8df83d8c60d9b5 (patch)
treed76f5945311828511e3ea55712487f21fbf8f70f /docs
parent5633c5c98ec073ae938253bcfc72430d5d9aee89 (diff)
downloadcatch3-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.md10
-rw-r--r--docs/release-notes.md35
-rw-r--r--docs/upstream-status.md27
-rw-r--r--docs/why-catch3.md4
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.