diff options
| author | Martin Hořeňovský | 2026-02-10 09:16:03 +0100 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-02-10 09:37:19 +0100 |
| commit | daadf42a0e21ac09abc1f286f875078b24e2dd4d (patch) | |
| tree | 1a680c2c82f71ad1701ce0b8e3c28ce9e50470b9 /src/catch2/internal | |
| parent | d079ee13ab137547ab26bd1ed5ca2858d7fbd847 (diff) | |
| download | catch3-daadf42a0e21ac09abc1f286f875078b24e2dd4d.tar.gz | |
Add --warn InfiniteGenerators
Diffstat (limited to 'src/catch2/internal')
| -rw-r--r-- | src/catch2/internal/catch_commandline.cpp | 3 | ||||
| -rw-r--r-- | src/catch2/internal/catch_run_context.cpp | 7 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/catch2/internal/catch_commandline.cpp b/src/catch2/internal/catch_commandline.cpp index cf9cbf6d..61825df9 100644 --- a/src/catch2/internal/catch_commandline.cpp +++ b/src/catch2/internal/catch_commandline.cpp @@ -32,6 +32,9 @@ namespace Catch { } else if ( warning == "UnmatchedTestSpec" ) { config.warnings = static_cast<WarnAbout::What>(config.warnings | WarnAbout::UnmatchedTestSpec); return ParserResult::ok( ParseResultType::Matched ); + } else if ( warning == "InfiniteGenerators" ) { + config.warnings = static_cast<WarnAbout::What>(config.warnings | WarnAbout::InfiniteGenerator); + return ParserResult::ok( ParseResultType::Matched ); } return ParserResult ::runtimeError( diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp index 5e5f95a4..8e04748e 100644 --- a/src/catch2/internal/catch_run_context.cpp +++ b/src/catch2/internal/catch_run_context.cpp @@ -21,7 +21,9 @@ #include <catch2/internal/catch_assertion_handler.hpp> #include <catch2/internal/catch_test_failure_exception.hpp> #include <catch2/internal/catch_thread_local.hpp> +#include <catch2/internal/catch_unreachable.hpp> #include <catch2/internal/catch_result_type.hpp> +#include <catch2/catch_test_macros.hpp> #include <cassert> #include <algorithm> @@ -495,6 +497,11 @@ namespace Catch { currentTracker.addChild( CATCH_MOVE( newTracker ) ); ret->setGenerator( CATCH_MOVE( generator ) ); + if ( m_config->warnAboutInfiniteGenerators() && + !ret->getGenerator()->isFinite() ) { + // TBD: Would it be better to expand this macro inline? + FAIL( "GENERATE() would run infinitely" ); + } ret->open(); return ret; } |