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

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2/internal
diff options
context:
space:
mode:
authorMartin Hořeňovský2025-07-20 18:40:05 +0200
committerMartin Hořeňovský2025-07-20 21:01:10 +0200
commit715558fd97a48533fd41cb7dddf23b05d333cec6 (patch)
tree1a80031937207f8776ff0f5c33b9b1f513b95fef /src/catch2/internal
parent55b14e1b3482e1233f0fbf41dee8dceebee8db1e (diff)
downloadcatch3-715558fd97a48533fd41cb7dddf23b05d333cec6.tar.gz
Use the fast path for passing assertions in RunContext::handleNonExpr
`handleNonExpr` is responsible for handling assertions that do not result in a decomposable expression, e.g. `REQUIRE_THROWS`, or `REQUIRE_NOTHROW`. Running benchmark on these two macros specifically, with `REQUIRE_THROWS([](){ throw 1; }())`, and `REQUIRE_NOTHROW([](){}())`, we get these speedups: | | Debug | Release | |---------|--------|---------| | THROWS | 3.69x | 2.10x | | NOTHROW | 1.18x | 1.05x | Obviously the actual performance improvement is dependent on how expensive the expression under test is.
Diffstat (limited to 'src/catch2/internal')
-rw-r--r--src/catch2/internal/catch_run_context.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp
index 02fa3eb8..ae170d1f 100644
--- a/src/catch2/internal/catch_run_context.cpp
+++ b/src/catch2/internal/catch_run_context.cpp
@@ -720,6 +720,11 @@ namespace Catch {
AssertionResult assertionResult{ info, CATCH_MOVE( data ) };
const auto isOk = assertionResult.isOk();
+ if ( isOk && !m_includeSuccessfulResults ) {
+ assertionPassedFastPath( info.lineInfo );
+ return;
+ }
+
assertionEnded( CATCH_MOVE(assertionResult) );
if ( !isOk ) {
populateReaction(