diff options
| author | Martin Hořeňovský | 2025-07-20 18:40:05 +0200 |
|---|---|---|
| committer | Martin Hořeňovský | 2025-07-20 21:01:10 +0200 |
| commit | 715558fd97a48533fd41cb7dddf23b05d333cec6 (patch) | |
| tree | 1a80031937207f8776ff0f5c33b9b1f513b95fef /src/catch2/internal/catch_run_context.cpp | |
| parent | 55b14e1b3482e1233f0fbf41dee8dceebee8db1e (diff) | |
| download | catch3-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/catch_run_context.cpp')
| -rw-r--r-- | src/catch2/internal/catch_run_context.cpp | 5 |
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( |