From ccd67b293d7595a0cf2dc6c4bfb2017fc18c1f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Je=C5=99=C3=A1bek?= Date: Sat, 6 Feb 2021 20:12:07 +0100 Subject: [PATCH 1/9] Add support for multiple parallel reporters This requires a bunch of different changes across the reporter subsystem. * We need to handle multiple reporters and their differing preferences in `ListeningReporter`, e.g. what to do when we mix reporters that capture and don't capture stdout. * We need to change how the reporter is given output and how we parse reporter's output destination from CLI. * Approval tests need to handle multireporter option --- docs/command-line.md | 15 +- docs/reporters.md | 15 +- src/catch2/catch_config.cpp | 67 +- src/catch2/catch_config.hpp | 33 +- src/catch2/catch_session.cpp | 20 +- .../interfaces/catch_interfaces_config.hpp | 2 +- .../interfaces/catch_interfaces_reporter.cpp | 3 - .../interfaces/catch_interfaces_reporter.hpp | 2 - .../catch_interfaces_reporter_registry.hpp | 3 +- src/catch2/internal/catch_commandline.cpp | 60 +- src/catch2/internal/catch_console_colour.cpp | 2 +- .../internal/catch_reporter_registry.cpp | 4 +- .../internal/catch_reporter_registry.hpp | 2 +- .../reporters/catch_reporter_listening.cpp | 153 +- .../reporters/catch_reporter_listening.hpp | 17 +- .../Baselines/automake.sw.multi.approved.txt | 380 + .../Baselines/compact.sw.approved.txt | 47 +- .../Baselines/compact.sw.multi.approved.txt | 2480 ++ .../Baselines/console.std.approved.txt | 2 +- .../Baselines/console.sw.approved.txt | 179 +- .../Baselines/console.sw.multi.approved.txt | 17650 +++++++++++++ .../Baselines/default.sw.multi.approved.txt | 8 + .../SelfTest/Baselines/junit.sw.approved.txt | 9 +- .../Baselines/junit.sw.multi.approved.txt | 1902 ++ .../Baselines/sonarqube.sw.approved.txt | 7 +- .../Baselines/sonarqube.sw.multi.approved.txt | 1920 ++ tests/SelfTest/Baselines/tap.sw.approved.txt | 46 +- .../Baselines/tap.sw.multi.approved.txt | 4416 ++++ .../Baselines/teamcity.sw.multi.approved.txt | 922 + tests/SelfTest/Baselines/xml.sw.approved.txt | 219 +- .../Baselines/xml.sw.multi.approved.txt | 20738 ++++++++++++++++ .../IntrospectiveTests/CmdLine.tests.cpp | 64 +- tools/scripts/approvalTests.py | 45 +- 33 files changed, 51221 insertions(+), 211 deletions(-) create mode 100644 tests/SelfTest/Baselines/automake.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/compact.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/console.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/default.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/junit.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/tap.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt create mode 100644 tests/SelfTest/Baselines/xml.sw.multi.approved.txt diff --git a/docs/command-line.md b/docs/command-line.md index b03e7e3cff..0bc7744bd2 100644 --- a/docs/command-line.md +++ b/docs/command-line.md @@ -123,7 +123,7 @@ Test names containing special characters, such as `,` or `[` can specify them on ## Choosing a reporter to use -
-r, --reporter <reporter>
+
-r, --reporter <reporter[::output-file]>
A reporter is an object that formats and structures the output of running tests, and potentially summarises the results. By default a console reporter is used that writes, IDE friendly, textual output. Catch comes bundled with some alternative reporters, but more can be added in client code.
The bundled reporters are: @@ -136,6 +136,13 @@ The bundled reporters are: The JUnit reporter is an xml format that follows the structure of the JUnit XML Report ANT task, as consumed by a number of third-party tools, including Continuous Integration servers such as Jenkins. If not otherwise needed, the standard XML reporter is preferred as this is a streaming reporter, whereas the Junit reporter needs to hold all its results until the end so it can write the overall results into attributes of the root node. +This option may be passed multiple times to use multiple (different) reporters at the same time. See [Reporters](reporters.md#multiple-reporters) for details. + +_Note: There is currently no way to escape `::` in the reporter spec, +and thus reporter/file names with `::` in them will not work properly. +As `::` in paths is relatively obscure (unlike `:`), we do not consider +this an issue._ + ## Breaking into the debugger
-b, --break
@@ -178,7 +185,7 @@ If one or more test-specs have been supplied too then only the matching tests wi ## Sending output to a file -
-o, --out <filename>
+
-o, --out <filename>
 
Use this option to send all output to a file. By default output is sent to stdout (note that uses of stdout and stderr *from within test cases* are redirected and included in the report - so even stderr will effectively end up on stdout). @@ -414,7 +421,7 @@ There are some limitations of this feature to be aware of: - Code outside of sections being skipped will still be executed - e.g. any set-up code in the TEST_CASE before the start of the first section.
- At time of writing, wildcards are not supported in section names. -- If you specify a section without narrowing to a test case first then all test cases will be executed +- If you specify a section without narrowing to a test case first then all test cases will be executed (but only matching sections within them). @@ -422,7 +429,7 @@ start of the first section.
## Filenames as tags
-#, --filenames-as-tags
-When this option is used then every test is given an additional tag which is formed of the unqualified +When this option is used then every test is given an additional tag which is formed of the unqualified filename it is found in, with any extension stripped, prefixed with the `#` character. So, for example, tests within the file `~\Dev\MyProject\Ferrets.cpp` would be tagged `[#Ferrets]`. diff --git a/docs/reporters.md b/docs/reporters.md index a33e55bf11..81baa308c7 100644 --- a/docs/reporters.md +++ b/docs/reporters.md @@ -19,13 +19,13 @@ There are four reporters built in to the single include: * `console` writes as lines of text, formatted to a typical terminal width, with colours if a capable terminal is detected. * `compact` similar to `console` but optimised for minimal output - each entry on one line * `junit` writes xml that corresponds to Ant's [junitreport](http://help.catchsoftware.com/display/ET/JUnit+Format) target. Useful for build systems that understand Junit. -Because of the way the junit format is structured the run must complete before anything is written. +Because of the way the junit format is structured the run must complete before anything is written. * `xml` writes an xml format tailored to Catch. Unlike `junit` this is a streaming format so results are delivered progressively. There are a few additional reporters, for specific build systems, in the Catch repository (in `include\reporters`) which you can `#include` in your project if you would like to make use of them. Do this in one source file - the same one you have `CATCH_CONFIG_MAIN` or `CATCH_CONFIG_RUNNER`. -* `teamcity` writes the native, streaming, format that [TeamCity](https://www.jetbrains.com/teamcity/) understands. +* `teamcity` writes the native, streaming, format that [TeamCity](https://www.jetbrains.com/teamcity/) understands. Use this when building as part of a TeamCity build to see results as they happen ([code example](../examples/207-Rpt-TeamCityReporter.cpp)). * `tap` writes in the TAP ([Test Anything Protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol)) format. * `automake` writes in a format that correspond to [automake .trs](https://www.gnu.org/software/automake/manual/html_node/Log-files-generation-and-test-results-recording.html) files @@ -35,6 +35,17 @@ You see what reporters are available from the command line by running with `--li By default all these reports are written to stdout, but can be redirected to a file with [`-o` or `--out`](command-line.md#sending-output-to-a-file) + +## Using multiple reporters + +Multiple reporters may be used at the same time, e.g. to save a machine-readable output to a file but still print the human-readable output to the console: +``` +-r console -r xml::result.xml -r junit::result-junit.xml +``` + +The output file name is given after the reporter name, delimited by a colon. If omitted, it defaults to the file name specified by `-o` (or stdout). Only one reporter may use the default output. + + ## Writing your own reporter You can write your own custom reporter and register it with Catch. diff --git a/src/catch2/catch_config.cpp b/src/catch2/catch_config.cpp index da9457da50..c507b1b65c 100644 --- a/src/catch2/catch_config.cpp +++ b/src/catch2/catch_config.cpp @@ -13,13 +13,39 @@ #include #include +#include namespace Catch { + namespace Detail { + namespace { + class RDBufStream : public IStream { + mutable std::ostream m_os; + + public: + //! The streambuf `sb` must outlive the constructed object. + RDBufStream( std::streambuf* sb ): m_os( sb ) {} + ~RDBufStream() override = default; + + public: // IStream + std::ostream& stream() const override { return m_os; } + }; + } // unnamed namespace + } // namespace Detail + + std::ostream& operator<<( std::ostream& os, + ConfigData::ReporterAndFile const& reporter ) { + os << "{ " << reporter.reporterName << ", "; + if ( reporter.outputFileName ) { + os << *reporter.outputFileName; + } else { + os << ""; + } + return os << " }"; + } - Config::Config( ConfigData const& data ) - : m_data( data ), - m_stream( Catch::makeStream(m_data.outputFilename) ) - { + Config::Config( ConfigData const& data ): + m_data( data ), + m_defaultStream( openStream( data.defaultOutputFilename ) ) { // We need to trim filter specs to avoid trouble with superfluous // whitespace (esp. important for bdd macros, as those are manually // aligned with whitespace). @@ -39,24 +65,37 @@ namespace Catch { } } m_testSpec = parser.testSpec(); + + m_reporterStreams.reserve( m_data.reporterSpecifications.size() ); + for ( auto const& reporterAndFile : m_data.reporterSpecifications ) { + if ( reporterAndFile.outputFileName.none() ) { + m_reporterStreams.emplace_back( new Detail::RDBufStream( + m_defaultStream->stream().rdbuf() ) ); + } else { + m_reporterStreams.emplace_back( + openStream( *reporterAndFile.outputFileName ) ); + } + } } Config::~Config() = default; - std::string const& Config::getFilename() const { - return m_data.outputFilename ; - } - bool Config::listTests() const { return m_data.listTests; } bool Config::listTags() const { return m_data.listTags; } bool Config::listReporters() const { return m_data.listReporters; } - std::string const& Config::getReporterName() const { return m_data.reporterName; } - std::vector const& Config::getTestsOrTags() const { return m_data.testsOrTags; } std::vector const& Config::getSectionsToRun() const { return m_data.sectionsToRun; } + std::vector const& Config::getReportersAndOutputFiles() const { + return m_data.reporterSpecifications; + } + + std::ostream& Config::getReporterOutputStream(std::size_t reporterIdx) const { + return m_reporterStreams.at(reporterIdx)->stream(); + } + TestSpec const& Config::testSpec() const { return m_testSpec; } bool Config::hasTestFilters() const { return m_hasTestFilters; } @@ -64,8 +103,8 @@ namespace Catch { // IConfig interface bool Config::allowThrows() const { return !m_data.noThrow; } - std::ostream& Config::stream() const { return m_stream->stream(); } - StringRef Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } + std::ostream& Config::defaultStream() const { return m_defaultStream->stream(); } + StringRef Config::name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } bool Config::includeSuccessfulResults() const { return m_data.showSuccessfulTests; } bool Config::warnAboutMissingAssertions() const { return !!( m_data.warnings & WarnAbout::NoAssertions ); @@ -92,4 +131,8 @@ namespace Catch { unsigned int Config::benchmarkResamples() const { return m_data.benchmarkResamples; } std::chrono::milliseconds Config::benchmarkWarmupTime() const { return std::chrono::milliseconds(m_data.benchmarkWarmupTime); } + Detail::unique_ptr Config::openStream(std::string const& outputFileName) { + return Catch::makeStream(outputFileName); + } + } // end namespace Catch diff --git a/src/catch2/catch_config.hpp b/src/catch2/catch_config.hpp index 2b881f6b9a..1aaa982867 100644 --- a/src/catch2/catch_config.hpp +++ b/src/catch2/catch_config.hpp @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -22,6 +23,18 @@ namespace Catch { struct IStream; struct ConfigData { + struct ReporterAndFile { + std::string reporterName; + + // If none, the output goes to the default output. + Optional outputFileName; + + friend bool operator==(ReporterAndFile const& lhs, ReporterAndFile const& rhs) { + return lhs.reporterName == rhs.reporterName && lhs.outputFileName == rhs.outputFileName; + } + friend std::ostream& operator<<(std::ostream &os, ReporterAndFile const& reporter); + }; + bool listTests = false; bool listTags = false; bool listReporters = false; @@ -55,13 +68,17 @@ namespace Catch { UseColour useColour = UseColour::Auto; WaitForKeypress::When waitForKeypress = WaitForKeypress::Never; - std::string outputFilename; + std::string defaultOutputFilename; std::string name; std::string processName; #ifndef CATCH_CONFIG_DEFAULT_REPORTER #define CATCH_CONFIG_DEFAULT_REPORTER "console" #endif - std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER; + std::vector reporterSpecifications = { + {CATCH_CONFIG_DEFAULT_REPORTER, {}} + }; + // Internal: used as parser state + bool _nonDefaultReporterSpecifications = false; #undef CATCH_CONFIG_DEFAULT_REPORTER std::vector testsOrTags; @@ -76,13 +93,12 @@ namespace Catch { Config( ConfigData const& data ); ~Config() override; // = default in the cpp file - std::string const& getFilename() const; - bool listTests() const; bool listTags() const; bool listReporters() const; - std::string const& getReporterName() const; + std::vector const& getReportersAndOutputFiles() const; + std::ostream& getReporterOutputStream(std::size_t reporterIdx) const; std::vector const& getTestsOrTags() const override; std::vector const& getSectionsToRun() const override; @@ -94,7 +110,7 @@ namespace Catch { // IConfig interface bool allowThrows() const override; - std::ostream& stream() const override; + std::ostream& defaultStream() const override; StringRef name() const override; bool includeSuccessfulResults() const override; bool warnAboutMissingAssertions() const override; @@ -118,13 +134,14 @@ namespace Catch { std::chrono::milliseconds benchmarkWarmupTime() const override; private: + Detail::unique_ptr openStream(std::string const& outputFileName); ConfigData m_data; - Detail::unique_ptr m_stream; + Detail::unique_ptr m_defaultStream; + std::vector> m_reporterStreams; TestSpec m_testSpec; bool m_hasTestFilters = false; }; - } // end namespace Catch #endif // CATCH_CONFIG_HPP_INCLUDED diff --git a/src/catch2/catch_session.cpp b/src/catch2/catch_session.cpp index 38111fe85d..2325bf2f3a 100644 --- a/src/catch2/catch_session.cpp +++ b/src/catch2/catch_session.cpp @@ -34,7 +34,7 @@ namespace Catch { namespace { const int MaxExitCode = 255; - IStreamingReporterPtr createReporter(std::string const& reporterName, IConfig const* config) { + IStreamingReporterPtr createReporter(std::string const& reporterName, ReporterConfig const& config) { auto reporter = Catch::getRegistryHub().getReporterRegistry().create(reporterName, config); CATCH_ENFORCE(reporter, "No reporter registered with name: '" << reporterName << '\''); @@ -42,16 +42,26 @@ namespace Catch { } IStreamingReporterPtr makeReporter(Config const* config) { - if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty()) { - return createReporter(config->getReporterName(), config); + if (Catch::getRegistryHub().getReporterRegistry().getListeners().empty() + && config->getReportersAndOutputFiles().size() == 1) { + auto& stream = config->getReporterOutputStream(0); + return createReporter(config->getReportersAndOutputFiles()[0].reporterName, ReporterConfig(config, stream)); } auto multi = Detail::make_unique(config); + auto const& listeners = Catch::getRegistryHub().getReporterRegistry().getListeners(); for (auto const& listener : listeners) { - multi->addListener(listener->create(Catch::ReporterConfig(config))); + multi->addListener(listener->create(Catch::ReporterConfig(config, config->defaultStream()))); + } + + std::size_t reporterIdx = 0; + for (auto const& reporterAndFile : config->getReportersAndOutputFiles()) { + auto& stream = config->getReporterOutputStream(reporterIdx); + multi->addReporter(createReporter(reporterAndFile.reporterName, ReporterConfig(config, stream))); + reporterIdx++; } - multi->addReporter(createReporter(config->getReporterName(), config)); + return multi; } diff --git a/src/catch2/interfaces/catch_interfaces_config.hpp b/src/catch2/interfaces/catch_interfaces_config.hpp index b8da0df0da..4b2bd3653c 100644 --- a/src/catch2/interfaces/catch_interfaces_config.hpp +++ b/src/catch2/interfaces/catch_interfaces_config.hpp @@ -61,7 +61,7 @@ namespace Catch { virtual ~IConfig(); virtual bool allowThrows() const = 0; - virtual std::ostream& stream() const = 0; + virtual std::ostream& defaultStream() const = 0; virtual StringRef name() const = 0; virtual bool includeSuccessfulResults() const = 0; virtual bool shouldDebugBreak() const = 0; diff --git a/src/catch2/interfaces/catch_interfaces_reporter.cpp b/src/catch2/interfaces/catch_interfaces_reporter.cpp index 89a86f59a8..5439254c93 100644 --- a/src/catch2/interfaces/catch_interfaces_reporter.cpp +++ b/src/catch2/interfaces/catch_interfaces_reporter.cpp @@ -20,9 +20,6 @@ namespace Catch { - ReporterConfig::ReporterConfig( IConfig const* _fullConfig ) - : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} - ReporterConfig::ReporterConfig( IConfig const* _fullConfig, std::ostream& _stream ) : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} diff --git a/src/catch2/interfaces/catch_interfaces_reporter.hpp b/src/catch2/interfaces/catch_interfaces_reporter.hpp index 5d3e85a386..432bc4e573 100644 --- a/src/catch2/interfaces/catch_interfaces_reporter.hpp +++ b/src/catch2/interfaces/catch_interfaces_reporter.hpp @@ -32,8 +32,6 @@ namespace Catch { struct IConfig; struct ReporterConfig { - explicit ReporterConfig( IConfig const* _fullConfig ); - ReporterConfig( IConfig const* _fullConfig, std::ostream& _stream ); std::ostream& stream() const; diff --git a/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp b/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp index 57c652e7e4..582c39b4bd 100644 --- a/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp +++ b/src/catch2/interfaces/catch_interfaces_reporter_registry.hpp @@ -23,13 +23,14 @@ namespace Catch { using IStreamingReporterPtr = Detail::unique_ptr; struct IReporterFactory; using IReporterFactoryPtr = Detail::unique_ptr; + struct ReporterConfig; struct IReporterRegistry { using FactoryMap = std::map; using Listeners = std::vector; virtual ~IReporterRegistry(); // = default - virtual IStreamingReporterPtr create( std::string const& name, IConfig const* config ) const = 0; + virtual IStreamingReporterPtr create( std::string const& name, ReporterConfig const& config ) const = 0; virtual FactoryMap const& getFactories() const = 0; virtual Listeners const& getListeners() const = 0; }; diff --git a/src/catch2/internal/catch_commandline.cpp b/src/catch2/internal/catch_commandline.cpp index de27e899b0..4ce085ca64 100644 --- a/src/catch2/internal/catch_commandline.cpp +++ b/src/catch2/internal/catch_commandline.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -133,15 +134,56 @@ namespace Catch { return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + '\'' ); return ParserResult::ok( ParseResultType::Matched ); }; - auto const setReporter = [&]( std::string const& reporter ) { + auto const setReporter = [&]( std::string const& reporterSpec ) { IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); - auto result = factories.find( reporter ); + // clear the default reporter + if (!config._nonDefaultReporterSpecifications) { + config.reporterSpecifications.clear(); + config._nonDefaultReporterSpecifications = true; + } + + // Exactly one of the reporters may be specified without an output + // file, in which case it defaults to the output specified by "-o" + // (or standard output). + static constexpr auto separator = "::"; + static constexpr size_t separatorSize = 2; + auto separatorPos = reporterSpec.find( separator ); + const bool containsFileName = separatorPos != reporterSpec.npos; + std::string reporterName; + Optional outputFileName; + if (!containsFileName) { + reporterName = reporterSpec; + } else { + reporterName = reporterSpec.substr( 0, separatorPos ); + outputFileName = reporterSpec.substr( + separatorPos + separatorSize, reporterSpec.size() ); + } + + auto result = factories.find( reporterName ); + + if( result == factories.end() ) + return ParserResult::runtimeError( "Unrecognized reporter, '" + reporterName + "'. Check available with --list-reporters" ); + if( containsFileName && outputFileName->empty() ) + return ParserResult::runtimeError( "Reporter '" + reporterName + "' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." ); + + config.reporterSpecifications.push_back({ std::move(reporterName), std::move(outputFileName) }); + + // It would be enough to check this only once at the very end, but there is + // not a place where we could call this check, so do it every time it could fail. + // For valid inputs, this is still called at most once. + if (!containsFileName) { + int n_reporters_without_file = 0; + for (auto const& spec : config.reporterSpecifications) { + if (spec.outputFileName.none()) { + n_reporters_without_file++; + } + } + if (n_reporters_without_file > 1) { + return ParserResult::runtimeError( "Only one reporter may have unspecified output file." ); + } + } - if( factories.end() != result ) - config.reporterName = reporter; - else - return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" ); return ParserResult::ok( ParseResultType::Matched ); }; auto const setShardCount = [&]( std::string const& shardCount ) { @@ -202,10 +244,10 @@ namespace Catch { | Opt( config.showInvisibles ) ["-i"]["--invisibles"] ( "show invisibles (tabs, newlines)" ) - | Opt( config.outputFilename, "filename" ) + | Opt( config.defaultOutputFilename, "filename" ) ["-o"]["--out"] - ( "output filename" ) - | Opt( setReporter, "name" ) + ( "default output filename" ) + | Opt( accept_many, setReporter, "name[:output-file]" ) ["-r"]["--reporter"] ( "reporter to use (defaults to console)" ) | Opt( config.name, "name" ) diff --git a/src/catch2/internal/catch_console_colour.cpp b/src/catch2/internal/catch_console_colour.cpp index e524b0baf9..069c5fbeb1 100644 --- a/src/catch2/internal/catch_console_colour.cpp +++ b/src/catch2/internal/catch_console_colour.cpp @@ -159,7 +159,7 @@ namespace { void setColour( const char* _escapeCode ) { // The escape sequence must be flushed to console, otherwise if // stdin and stderr are intermixed, we'd get accidentally coloured output. - getCurrentContext().getConfig()->stream() + getCurrentContext().getConfig()->defaultStream() << '\033' << _escapeCode << std::flush; } }; diff --git a/src/catch2/internal/catch_reporter_registry.cpp b/src/catch2/internal/catch_reporter_registry.cpp index 617c550a16..26a328f8e9 100644 --- a/src/catch2/internal/catch_reporter_registry.cpp +++ b/src/catch2/internal/catch_reporter_registry.cpp @@ -36,11 +36,11 @@ namespace Catch { ReporterRegistry::~ReporterRegistry() = default; - IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfig const* config ) const { + IStreamingReporterPtr ReporterRegistry::create( std::string const& name, ReporterConfig const& config ) const { auto it = m_factories.find( name ); if( it == m_factories.end() ) return nullptr; - return it->second->create( ReporterConfig( config ) ); + return it->second->create( config ); } void ReporterRegistry::registerReporter( std::string const& name, IReporterFactoryPtr factory ) { diff --git a/src/catch2/internal/catch_reporter_registry.hpp b/src/catch2/internal/catch_reporter_registry.hpp index 62c2023e9a..a761e7cf7e 100644 --- a/src/catch2/internal/catch_reporter_registry.hpp +++ b/src/catch2/internal/catch_reporter_registry.hpp @@ -21,7 +21,7 @@ namespace Catch { ReporterRegistry(); ~ReporterRegistry() override; // = default, out of line to allow fwd decl - IStreamingReporterPtr create( std::string const& name, IConfig const* config ) const override; + IStreamingReporterPtr create( std::string const& name, ReporterConfig const& config ) const override; void registerReporter( std::string const& name, IReporterFactoryPtr factory ); void registerListener( IReporterFactoryPtr factory ); diff --git a/src/catch2/reporters/catch_reporter_listening.cpp b/src/catch2/reporters/catch_reporter_listening.cpp index 10176055ed..a08e5d59df 100644 --- a/src/catch2/reporters/catch_reporter_listening.cpp +++ b/src/catch2/reporters/catch_reporter_listening.cpp @@ -6,170 +6,185 @@ // SPDX-License-Identifier: BSL-1.0 #include + +#include #include +#include #include namespace Catch { + void ListeningReporter::updatePreferences(IStreamingReporter const& reporterish) { + m_preferences.shouldRedirectStdOut |= + reporterish.getPreferences().shouldRedirectStdOut; + m_preferences.shouldReportAllAssertions |= + reporterish.getPreferences().shouldReportAllAssertions; + } void ListeningReporter::addListener( IStreamingReporterPtr&& listener ) { - m_listeners.push_back( CATCH_MOVE( listener ) ); + updatePreferences(*listener); + m_reporterLikes.insert(m_reporterLikes.begin() + m_insertedListeners, CATCH_MOVE(listener) ); + ++m_insertedListeners; } - void ListeningReporter::addReporter(IStreamingReporterPtr&& reporter) { - assert(!m_reporter && "Listening reporter can wrap only 1 real reporter"); - m_reporter = CATCH_MOVE( reporter ); - m_preferences.shouldRedirectStdOut = m_reporter->getPreferences().shouldRedirectStdOut; + void ListeningReporter::addReporter( IStreamingReporterPtr&& reporter ) { + updatePreferences(*reporter); + + // We will need to output the captured stdout if there are reporters + // that do not want it captured. + // We do not consider listeners, because it is generally assumed that + // listeners are output-transparent, even though they can ask for stdout + // capture to do something with it. + m_haveNoncapturingReporters |= !reporter->getPreferences().shouldRedirectStdOut; + + // Reporters can always be placed to the back without breaking the + // reporting order + m_reporterLikes.push_back( CATCH_MOVE( reporter ) ); } void ListeningReporter::noMatchingTestCases( StringRef unmatchedSpec ) { - for ( auto& listener : m_listeners ) { - listener->noMatchingTestCases( unmatchedSpec ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->noMatchingTestCases( unmatchedSpec ); } - m_reporter->noMatchingTestCases( unmatchedSpec ); } void ListeningReporter::fatalErrorEncountered( StringRef error ) { - for ( auto& listener : m_listeners ) { - listener->fatalErrorEncountered( error ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->fatalErrorEncountered( error ); } - m_reporter->fatalErrorEncountered( error ); } void ListeningReporter::reportInvalidTestSpec( StringRef arg ) { - for ( auto& listener : m_listeners ) { - listener->reportInvalidTestSpec( arg ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->reportInvalidTestSpec( arg ); } - m_reporter->reportInvalidTestSpec( arg ); } void ListeningReporter::benchmarkPreparing( StringRef name ) { - for (auto& listener : m_listeners) { - listener->benchmarkPreparing(name); + for (auto& reporterish : m_reporterLikes) { + reporterish->benchmarkPreparing(name); } - m_reporter->benchmarkPreparing(name); } void ListeningReporter::benchmarkStarting( BenchmarkInfo const& benchmarkInfo ) { - for ( auto& listener : m_listeners ) { - listener->benchmarkStarting( benchmarkInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->benchmarkStarting( benchmarkInfo ); } - m_reporter->benchmarkStarting( benchmarkInfo ); } void ListeningReporter::benchmarkEnded( BenchmarkStats<> const& benchmarkStats ) { - for ( auto& listener : m_listeners ) { - listener->benchmarkEnded( benchmarkStats ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->benchmarkEnded( benchmarkStats ); } - m_reporter->benchmarkEnded( benchmarkStats ); } void ListeningReporter::benchmarkFailed( StringRef error ) { - for (auto& listener : m_listeners) { - listener->benchmarkFailed(error); + for (auto& reporterish : m_reporterLikes) { + reporterish->benchmarkFailed(error); } - m_reporter->benchmarkFailed(error); } void ListeningReporter::testRunStarting( TestRunInfo const& testRunInfo ) { - for ( auto& listener : m_listeners ) { - listener->testRunStarting( testRunInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testRunStarting( testRunInfo ); } - m_reporter->testRunStarting( testRunInfo ); } void ListeningReporter::testCaseStarting( TestCaseInfo const& testInfo ) { - for ( auto& listener : m_listeners ) { - listener->testCaseStarting( testInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testCaseStarting( testInfo ); } - m_reporter->testCaseStarting( testInfo ); } void ListeningReporter::testCasePartialStarting( TestCaseInfo const& testInfo, uint64_t partNumber ) { - for ( auto& listener : m_listeners ) { - listener->testCasePartialStarting( testInfo, partNumber ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testCasePartialStarting( testInfo, partNumber ); } - m_reporter->testCasePartialStarting( testInfo, partNumber ); } void ListeningReporter::sectionStarting( SectionInfo const& sectionInfo ) { - for ( auto& listener : m_listeners ) { - listener->sectionStarting( sectionInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->sectionStarting( sectionInfo ); } - m_reporter->sectionStarting( sectionInfo ); } void ListeningReporter::assertionStarting( AssertionInfo const& assertionInfo ) { - for ( auto& listener : m_listeners ) { - listener->assertionStarting( assertionInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->assertionStarting( assertionInfo ); } - m_reporter->assertionStarting( assertionInfo ); } // The return value indicates if the messages buffer should be cleared: void ListeningReporter::assertionEnded( AssertionStats const& assertionStats ) { - for( auto& listener : m_listeners ) { - listener->assertionEnded( assertionStats ); + const bool reportByDefault = + assertionStats.assertionResult.getResultType() != ResultWas::Ok || + m_config->includeSuccessfulResults(); + + for ( auto & reporterish : m_reporterLikes ) { + if ( reportByDefault || + reporterish->getPreferences().shouldReportAllAssertions ) { + reporterish->assertionEnded( assertionStats ); + } } - m_reporter->assertionEnded( assertionStats ); } void ListeningReporter::sectionEnded( SectionStats const& sectionStats ) { - for ( auto& listener : m_listeners ) { - listener->sectionEnded( sectionStats ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->sectionEnded( sectionStats ); } - m_reporter->sectionEnded( sectionStats ); } - void ListeningReporter::testCasePartialEnded( TestCaseStats const& testInfo, + void ListeningReporter::testCasePartialEnded( TestCaseStats const& testStats, uint64_t partNumber ) { - for ( auto& listener : m_listeners ) { - listener->testCasePartialEnded( testInfo, partNumber ); + // TODO: Fix handling of stderr/stdout? + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testCasePartialEnded( testStats, partNumber ); } - m_reporter->testCasePartialEnded( testInfo, partNumber ); } void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) { - for ( auto& listener : m_listeners ) { - listener->testCaseEnded( testCaseStats ); + if ( m_preferences.shouldRedirectStdOut && m_haveNoncapturingReporters ) { + if ( !testCaseStats.stdOut.empty() ) { + Catch::cout() << testCaseStats.stdOut << std::flush; + } + if ( !testCaseStats.stdErr.empty() ) { + Catch::cerr() << testCaseStats.stdErr << std::flush; + } + } + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testCaseEnded( testCaseStats ); } - m_reporter->testCaseEnded( testCaseStats ); } void ListeningReporter::testRunEnded( TestRunStats const& testRunStats ) { - for ( auto& listener : m_listeners ) { - listener->testRunEnded( testRunStats ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->testRunEnded( testRunStats ); } - m_reporter->testRunEnded( testRunStats ); } void ListeningReporter::skipTest( TestCaseInfo const& testInfo ) { - for ( auto& listener : m_listeners ) { - listener->skipTest( testInfo ); + for ( auto& reporterish : m_reporterLikes ) { + reporterish->skipTest( testInfo ); } - m_reporter->skipTest( testInfo ); } void ListeningReporter::listReporters(std::vector const& descriptions) { - for (auto& listener : m_listeners) { - listener->listReporters(descriptions); + for (auto& reporterish : m_reporterLikes) { + reporterish->listReporters(descriptions); } - m_reporter->listReporters(descriptions); } void ListeningReporter::listTests(std::vector const& tests) { - for (auto& listener : m_listeners) { - listener->listTests(tests); + for (auto& reporterish : m_reporterLikes) { + reporterish->listTests(tests); } - m_reporter->listTests(tests); } void ListeningReporter::listTags(std::vector const& tags) { - for (auto& listener : m_listeners) { - listener->listTags(tags); + for (auto& reporterish : m_reporterLikes) { + reporterish->listTags(tags); } - m_reporter->listTags(tags); } } // end namespace Catch diff --git a/src/catch2/reporters/catch_reporter_listening.hpp b/src/catch2/reporters/catch_reporter_listening.hpp index feddabede1..f5b3a2ec8e 100644 --- a/src/catch2/reporters/catch_reporter_listening.hpp +++ b/src/catch2/reporters/catch_reporter_listening.hpp @@ -13,9 +13,20 @@ namespace Catch { class ListeningReporter final : public IStreamingReporter { - using Reporters = std::vector; - Reporters m_listeners; - IStreamingReporterPtr m_reporter = nullptr; + /* + * Stores all added reporters and listeners + * + * All Listeners are stored before all reporters, and individual + * listeners/reporters are stored in order of insertion. + */ + std::vector m_reporterLikes; + bool m_haveNoncapturingReporters = false; + + // Keep track of how many listeners we have already inserted, + // so that we can insert them into the main vector at the right place + size_t m_insertedListeners = 0; + + void updatePreferences(IStreamingReporter const& reporterish); public: ListeningReporter( IConfig const* config ): diff --git a/tests/SelfTest/Baselines/automake.sw.multi.approved.txt b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt new file mode 100644 index 0000000000..328fcf507d --- /dev/null +++ b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt @@ -0,0 +1,380 @@ +:test-result: PASS # A test name that starts with a # +:test-result: PASS #1005: Comparing pointer to int and long (NULL can be either on various systems) +:test-result: PASS #1027: Bitfields can be captured +:test-result: PASS #1147 +:test-result: PASS #1175 - Hidden Test +:test-result: PASS #1238 +:test-result: PASS #1245 +:test-result: PASS #1319: Sections can have description (even if it is not saved +:test-result: PASS #1403 +:test-result: FAIL #1455 - INFO and WARN can start with a linebreak +:test-result: FAIL #1514: stderr/stdout is not captured in tests aborted by an exception +:test-result: PASS #1548 +:test-result: PASS #1905 -- test spec parser properly clears internal state between compound tests +:test-result: PASS #1912 -- test spec parser handles escaping +:test-result: PASS #1913 - GENERATE inside a for loop should not keep recreating the generator +:test-result: PASS #1913 - GENERATEs can share a line +:test-result: PASS #1938 - GENERATE after a section +:test-result: PASS #1938 - Section followed by flat generate +:test-result: PASS #1938 - flat generate +:test-result: PASS #1938 - mixed sections and generates +:test-result: PASS #1938 - nested generate +:test-result: PASS #1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0 +:test-result: PASS #1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0 +:test-result: PASS #1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0 +:test-result: PASS #2152 - ULP checks between differently signed values were wrong - double +:test-result: PASS #2152 - ULP checks between differently signed values were wrong - float +:test-result: XFAIL #748 - captures with unexpected exceptions +:test-result: PASS #809 +:test-result: PASS #833 +:test-result: XFAIL #835 -- errno should not be touched by Catch +:test-result: PASS #872 +:test-result: PASS #961 -- Dynamically created sections should all be reported +:test-result: FAIL 'Not' checks that should fail +:test-result: PASS 'Not' checks that should succeed +:test-result: PASS (unimplemented) static bools can be evaluated +:test-result: PASS 3x3x3 ints +:test-result: FAIL A METHOD_AS_TEST_CASE based test run that fails +:test-result: PASS A METHOD_AS_TEST_CASE based test run that succeeds +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2 +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2 +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array +:test-result: FAIL A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2 +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2 +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array +:test-result: PASS A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD based test run that fails - double +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD based test run that fails - float +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD based test run that fails - int +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1 +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3 +:test-result: FAIL A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6 +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1 +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3 +:test-result: PASS A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6 +:test-result: FAIL A TEST_CASE_METHOD based test run that fails +:test-result: PASS A TEST_CASE_METHOD based test run that succeeds +:test-result: PASS A Template product test case - Foo +:test-result: PASS A Template product test case - Foo +:test-result: PASS A Template product test case - std::vector +:test-result: PASS A Template product test case - std::vector +:test-result: PASS A Template product test case with array signature - Bar +:test-result: PASS A Template product test case with array signature - Bar +:test-result: PASS A Template product test case with array signature - std::array +:test-result: PASS A Template product test case with array signature - std::array +:test-result: PASS A comparison that uses literals instead of the normal constructor +:test-result: FAIL A couple of nested sections followed by a failure +:test-result: FAIL A failing expression with a non streamable type is still captured +:test-result: PASS Absolute margin +:test-result: FAIL An empty test with no assertions +:test-result: PASS An expression with side-effects should only be evaluated once +:test-result: FAIL An unchecked exception reports the line of the last assertion +:test-result: PASS Anonymous test case 1 +:test-result: PASS Approx setters validate their arguments +:test-result: PASS Approx with exactly-representable margin +:test-result: PASS Approximate PI +:test-result: PASS Approximate comparisons with different epsilons +:test-result: PASS Approximate comparisons with floats +:test-result: PASS Approximate comparisons with ints +:test-result: PASS Approximate comparisons with mixed numeric types +:test-result: PASS Arbitrary predicate matcher +:test-result: PASS Assertion macros support bit operators and bool conversions +:test-result: PASS Assertions then sections +:test-result: PASS Basic use of the Contains range matcher +:test-result: PASS Basic use of the Empty range matcher +:test-result: PASS CAPTURE can deal with complex expressions +:test-result: PASS CAPTURE can deal with complex expressions involving commas +:test-result: PASS CAPTURE parses string and character constants +:test-result: PASS Capture and info messages +:test-result: PASS CaseInsensitiveEqualsTo is case insensitive +:test-result: PASS CaseInsensitiveLess is case insensitive +:test-result: PASS Character pretty printing +:test-result: PASS Clara::Arg supports single-arg parse the way Opt does +:test-result: PASS Clara::Opt supports accept-many lambdas +:test-result: PASS Combining MatchAllOfGeneric does not nest +:test-result: PASS Combining MatchAnyOfGeneric does not nest +:test-result: PASS Combining MatchNotOfGeneric does not nest +:test-result: PASS Combining concrete matchers does not use templated matchers +:test-result: PASS Combining only templated matchers +:test-result: PASS Combining templated and concrete matchers +:test-result: PASS Combining templated matchers +:test-result: PASS Commas in various macros are allowed +:test-result: PASS Comparing function pointers +:test-result: PASS Comparison ops +:test-result: PASS Comparison with explicitly convertible types +:test-result: PASS Comparisons between ints where one side is computed +:test-result: PASS Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +:test-result: PASS Comparisons with int literals don't warn when mixing signed/ unsigned +:test-result: PASS Composed generic matchers shortcircuit +:test-result: PASS Composed matchers shortcircuit +:test-result: FAIL Contains string matcher +:test-result: PASS Copy and then generate a range +:test-result: FAIL Custom exceptions can be translated when testing for nothrow +:test-result: FAIL Custom exceptions can be translated when testing for throwing as something else +:test-result: FAIL Custom std-exceptions can be custom translated +:test-result: PASS Default scale is invisible to comparison +:test-result: PASS Directly creating an EnumInfo +:test-result: PASS Empty tag is not allowed +:test-result: FAIL EndsWith string matcher +:test-result: PASS Enums can quickly have stringification enabled using REGISTER_ENUM +:test-result: PASS Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM +:test-result: PASS Epsilon only applies to Approx's value +:test-result: XFAIL Equality checks that should fail +:test-result: PASS Equality checks that should succeed +:test-result: PASS Equals +:test-result: FAIL Equals string matcher +:test-result: PASS Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified +:test-result: FAIL Exception matchers that fail +:test-result: PASS Exception matchers that succeed +:test-result: PASS Exception messages can be tested for +:test-result: PASS Exceptions matchers +:test-result: FAIL Expected exceptions that don't throw or unexpected exceptions fail the test +:test-result: FAIL FAIL aborts the test +:test-result: FAIL FAIL does not require an argument +:test-result: FAIL FAIL_CHECK does not abort the test +:test-result: PASS Factorials are computed +:test-result: PASS Floating point matchers: double +:test-result: PASS Floating point matchers: float +:test-result: PASS Generators -- adapters +:test-result: PASS Generators -- simple +:test-result: PASS Generators internals +:test-result: PASS Greater-than inequalities with different epsilons +:test-result: FAIL INFO and WARN do not abort tests +:test-result: FAIL INFO gets logged on failure +:test-result: FAIL INFO gets logged on failure, even if captured before successful assertions +:test-result: FAIL INFO is reset for each loop +:test-result: XFAIL Inequality checks that should fail +:test-result: PASS Inequality checks that should succeed +:test-result: PASS Lambdas in assertions +:test-result: PASS Less-than inequalities with different epsilons +:test-result: PASS ManuallyRegistered +:test-result: PASS Matchers can be (AllOf) composed with the && operator +:test-result: PASS Matchers can be (AnyOf) composed with the || operator +:test-result: PASS Matchers can be composed with both && and || +:test-result: FAIL Matchers can be composed with both && and || - failing +:test-result: PASS Matchers can be negated (Not) with the ! operator +:test-result: FAIL Matchers can be negated (Not) with the ! operator - failing +:test-result: XFAIL Mayfail test case with nested sections +:test-result: FAIL Mismatching exception messages failing the test +:test-result: PASS Nested generators and captured variables +:test-result: FAIL Nice descriptive name +:test-result: FAIL Non-std exceptions can be translated +:test-result: PASS Objects that evaluated in boolean contexts can be checked +:test-result: PASS Optionally static assertions +:test-result: FAIL Ordering comparison checks that should fail +:test-result: PASS Ordering comparison checks that should succeed +:test-result: PASS Our PCG implementation provides expected results for known seeds +:test-result: FAIL Output from all sections is reported +:test-result: PASS Overloaded comma or address-of operators are not used +:test-result: PASS Parse test names and tags +:test-result: PASS Parsed tags are matched case insensitive +:test-result: PASS Parsing sharding-related cli flags +:test-result: PASS Parsing tags with non-alphabetical characters is pass-through +:test-result: PASS Parsing warnings +:test-result: PASS Pointers can be compared to null +:test-result: PASS Precision of floating point stringification can be set +:test-result: PASS Predicate matcher can accept const char* +:test-result: PASS Process can be configured on command line +:test-result: PASS Product with differing arities - std::tuple +:test-result: PASS Product with differing arities - std::tuple +:test-result: PASS Product with differing arities - std::tuple +:test-result: PASS Random seed generation accepts known methods +:test-result: PASS Random seed generation reports unknown methods +:test-result: PASS Range type with sentinel +:test-result: FAIL Reconstruction should be based on stringification: #914 +:test-result: FAIL Regex string matcher +:test-result: PASS Regression test #1 +:test-result: PASS Reporter's write listings to provided stream +:test-result: PASS Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla +:test-result: PASS SUCCEED counts as a test pass +:test-result: PASS SUCCEED does not require an argument +:test-result: PASS Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods +:test-result: PASS Scenario: Do that thing with the thing +:test-result: PASS Scenario: This is a really long scenario name to see how the list command deals with wrapping +:test-result: PASS Scenario: Vector resizing affects size and capacity +:test-result: FAIL Sends stuff to stdout and stderr +:test-result: PASS Some simple comparisons between doubles +:test-result: FAIL Standard output from all sections is reported +:test-result: FAIL StartsWith string matcher +:test-result: PASS Static arrays are convertible to string +:test-result: PASS String matchers +:test-result: PASS StringRef +:test-result: PASS StringRef at compilation time +:test-result: PASS Stringifying char arrays with statically known sizes - char +:test-result: PASS Stringifying char arrays with statically known sizes - signed char +:test-result: PASS Stringifying char arrays with statically known sizes - unsigned char +:test-result: PASS Stringifying std::chrono::duration helpers +:test-result: PASS Stringifying std::chrono::duration with weird ratios +:test-result: PASS Stringifying std::chrono::time_point +:test-result: FAIL Tabs and newlines show in output +:test-result: PASS Tag alias can be registered against tag patterns +:test-result: PASS Tags with spaces and non-alphanumerical characters are accepted +:test-result: PASS Template test case method with test types specified inside std::tuple - MyTypes - 0 +:test-result: PASS Template test case method with test types specified inside std::tuple - MyTypes - 1 +:test-result: PASS Template test case method with test types specified inside std::tuple - MyTypes - 2 +:test-result: PASS Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 0 +:test-result: PASS Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 1 +:test-result: PASS Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0 +:test-result: PASS Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1 +:test-result: PASS Template test case with test types specified inside std::tuple - MyTypes - 0 +:test-result: PASS Template test case with test types specified inside std::tuple - MyTypes - 1 +:test-result: PASS Template test case with test types specified inside std::tuple - MyTypes - 2 +:test-result: PASS TemplateTest: vectors can be sized and resized - float +:test-result: PASS TemplateTest: vectors can be sized and resized - int +:test-result: PASS TemplateTest: vectors can be sized and resized - std::string +:test-result: PASS TemplateTest: vectors can be sized and resized - std::tuple +:test-result: PASS TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +:test-result: PASS TemplateTestSig: vectors can be sized and resized - float,4 +:test-result: PASS TemplateTestSig: vectors can be sized and resized - int,5 +:test-result: PASS TemplateTestSig: vectors can be sized and resized - std::string,15 +:test-result: PASS Test case with identical tags keeps just one +:test-result: PASS Test case with one argument +:test-result: PASS Test enum bit values +:test-result: PASS Test with special, characters "in name +:test-result: PASS Testing checked-if +:test-result: XFAIL Testing checked-if 2 +:test-result: XFAIL Testing checked-if 3 +:test-result: FAIL The NO_FAIL macro reports a failure but does not fail the test +:test-result: PASS The default listing implementation write to provided stream +:test-result: FAIL This test 'should' fail but doesn't +:test-result: FAIL Thrown string literals are translated +:test-result: PASS Tracker +:test-result: PASS Trim strings +:test-result: FAIL Unexpected exceptions can be translated +:test-result: PASS Upcasting special member functions +:test-result: PASS Usage of AllMatch range matcher +:test-result: PASS Usage of AnyMatch range matcher +:test-result: PASS Usage of NoneMatch range matcher +:test-result: PASS Usage of the SizeIs range matcher +:test-result: PASS Use a custom approx +:test-result: PASS Variadic macros +:test-result: PASS Vector Approx matcher +:test-result: FAIL Vector Approx matcher -- failing +:test-result: PASS Vector matchers +:test-result: FAIL Vector matchers that fail +:test-result: PASS When checked exceptions are thrown they can be expected or unexpected +:test-result: FAIL When unchecked exceptions are thrown directly they are always failures +:test-result: FAIL When unchecked exceptions are thrown during a CHECK the test should continue +:test-result: FAIL When unchecked exceptions are thrown during a REQUIRE the test should abort fail +:test-result: FAIL When unchecked exceptions are thrown from functions they are always failures +:test-result: FAIL When unchecked exceptions are thrown from sections they are always failures +:test-result: FAIL When unchecked exceptions are thrown, but caught, they do not affect the test +:test-result: PASS X/level/0/a +:test-result: PASS X/level/0/b +:test-result: PASS X/level/1/a +:test-result: PASS X/level/1/b +:test-result: PASS XmlEncode +:test-result: PASS XmlWriter writes boolean attributes as true/false +:test-result: PASS analyse no analysis +:test-result: PASS array -> toString +:test-result: PASS benchmark function call +:test-result: PASS boolean member +:test-result: PASS checkedElse +:test-result: FAIL checkedElse, failing +:test-result: PASS checkedIf +:test-result: FAIL checkedIf, failing +:test-result: PASS classify_outliers +:test-result: PASS comparisons between const int variables +:test-result: PASS comparisons between int variables +:test-result: PASS convertToBits +:test-result: PASS empty tags are not allowed +:test-result: PASS erfc_inv +:test-result: PASS estimate_clock_resolution +:test-result: PASS even more nested SECTION tests +:test-result: FAIL first tag +:test-result: FAIL has printf +:test-result: PASS is_unary_function +:test-result: FAIL just failure +:test-result: FAIL just failure after unscoped info +:test-result: FAIL just info +:test-result: FAIL just unscoped info +:test-result: PASS long long +:test-result: FAIL looped SECTION tests +:test-result: FAIL looped tests +:test-result: PASS make_unique reimplementation +:test-result: PASS mean +:test-result: PASS measure +:test-result: FAIL mix info, unscoped info and warning +:test-result: FAIL more nested SECTION tests +:test-result: PASS nested SECTION tests +:test-result: PASS non streamable - with conv. op +:test-result: PASS non-copyable objects +:test-result: PASS normal_cdf +:test-result: PASS normal_quantile +:test-result: PASS not allowed +:test-result: FAIL not prints unscoped info from previous failures +:test-result: PASS null strings +:test-result: PASS null_ptr +:test-result: PASS pair > -> toString +:test-result: PASS parseEnums +:test-result: PASS pointer to class +:test-result: PASS print unscoped info if passing unscoped info is printed +:test-result: FAIL prints unscoped info on failure +:test-result: FAIL prints unscoped info only for the first assertion +:test-result: PASS random SECTION tests +:test-result: PASS replaceInPlace +:test-result: PASS resolution +:test-result: PASS run_for_at_least, chronometer +:test-result: PASS run_for_at_least, int +:test-result: FAIL second tag +:test-result: FAIL send a single char to INFO +:test-result: FAIL sends information to INFO +:test-result: PASS shortened hide tags are split apart +:test-result: PASS splitString +:test-result: FAIL stacks unscoped info in loops +:test-result: PASS startsWith +:test-result: PASS std::map is convertible string +:test-result: PASS std::pair -> toString +:test-result: PASS std::pair -> toString +:test-result: PASS std::set is convertible string +:test-result: PASS std::vector > -> toString +:test-result: PASS stringify ranges +:test-result: PASS stringify( has_maker ) +:test-result: PASS stringify( has_maker_and_operator ) +:test-result: PASS stringify( has_neither ) +:test-result: PASS stringify( has_operator ) +:test-result: PASS stringify( has_template_operator ) +:test-result: PASS stringify( vectors ) +:test-result: PASS stringify( vectors ) +:test-result: PASS stringify( vectors ) +:test-result: PASS strlen3 +:test-result: PASS tables +:test-result: PASS tags with dots in later positions are not parsed as hidden +:test-result: FAIL thrown std::strings are translated +:test-result: PASS toString on const wchar_t const pointer returns the string contents +:test-result: PASS toString on const wchar_t pointer returns the string contents +:test-result: PASS toString on wchar_t const pointer returns the string contents +:test-result: PASS toString on wchar_t returns the string contents +:test-result: PASS toString(enum class w/operator<<) +:test-result: PASS toString(enum class) +:test-result: PASS toString(enum w/operator<<) +:test-result: PASS toString(enum) +:test-result: PASS tuple<> +:test-result: PASS tuple +:test-result: PASS tuple +:test-result: PASS tuple<0,int,const char *> +:test-result: PASS tuple +:test-result: PASS tuple,tuple<>,float> +:test-result: PASS uniform samples +:test-result: PASS unique_ptr reimplementation: basic functionality +:test-result: PASS vec> -> toString +:test-result: PASS vector -> toString +:test-result: PASS vector -> toString +:test-result: PASS vector -> toString +:test-result: PASS vector -> toString +:test-result: PASS vectors can be sized and resized +:test-result: PASS warmup +:test-result: PASS weighted_average_quantile +:test-result: PASS xmlentitycheck diff --git a/tests/SelfTest/Baselines/compact.sw.approved.txt b/tests/SelfTest/Baselines/compact.sw.approved.txt index f7aaa5b377..517b4d93e3 100644 --- a/tests/SelfTest/Baselines/compact.sw.approved.txt +++ b/tests/SelfTest/Baselines/compact.sw.approved.txt @@ -1250,7 +1250,9 @@ CmdLine.tests.cpp:: passed: config.processName == "test" for: "test CmdLine.tests.cpp:: passed: config.shouldDebugBreak == false for: false == false CmdLine.tests.cpp:: passed: config.abortAfter == -1 for: -1 == -1 CmdLine.tests.cpp:: passed: config.noThrow == false for: false == false -CmdLine.tests.cpp:: passed: config.reporterName == "console" for: "console" == "console" +CmdLine.tests.cpp:: passed: config.reporterSpecifications == std::vector{ {"console", {}} } for: { { console, } } +== +{ { console, } } CmdLine.tests.cpp:: passed: !(cfg.hasTestFilters()) for: !false CmdLine.tests.cpp:: passed: result for: {?} CmdLine.tests.cpp:: passed: cfg.hasTestFilters() for: true @@ -1264,15 +1266,40 @@ CmdLine.tests.cpp:: passed: result for: {?} CmdLine.tests.cpp:: passed: cfg.hasTestFilters() for: true CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("test1")) == false for: false == false CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true -CmdLine.tests.cpp:: passed: cli.parse({"test", "-r", "console"}) for: {?} -CmdLine.tests.cpp:: passed: config.reporterName == "console" for: "console" == "console" -CmdLine.tests.cpp:: passed: cli.parse({"test", "-r", "xml"}) for: {?} -CmdLine.tests.cpp:: passed: config.reporterName == "xml" for: "xml" == "xml" -CmdLine.tests.cpp:: passed: cli.parse({"test", "--reporter", "junit"}) for: {?} -CmdLine.tests.cpp:: passed: config.reporterName == "junit" for: "junit" == "junit" -CmdLine.tests.cpp:: passed: !(cli.parse({ "test", "-r", "xml", "-r", "junit" })) for: !{?} +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } for: { { console, } } +== +{ { console, } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } for: { { xml, } } +== +{ { xml, } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } for: { { junit, } } +== +{ { junit, } } with 1 message: 'result.errorMessage() := ""' CmdLine.tests.cpp:: passed: !result for: true CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Unrecognized reporter") for: "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } for: { { console, out.txt } } +== +{ { console, out.txt } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } for: { { console, C:\Temp\out.txt } } +== +{ { console, C:\Temp\out.txt } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("empty filename") for: "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename" +CmdLine.tests.cpp:: passed: cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) for: {?} +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } for: { { xml, output.xml }, { junit, output-junit.xml } } +== +{ { xml, output.xml }, { junit, output-junit.xml } } +CmdLine.tests.cpp:: passed: cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) for: {?} +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } for: { { xml, output.xml }, { console, } } +== +{ { xml, output.xml }, { console, } } +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") for: "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." CmdLine.tests.cpp:: passed: cli.parse({"test", "-b"}) for: {?} CmdLine.tests.cpp:: passed: config.shouldDebugBreak == true for: true == true CmdLine.tests.cpp:: passed: cli.parse({"test", "--break"}) for: {?} @@ -1298,9 +1325,9 @@ CmdLine.tests.cpp:: passed: config.noThrow for: true CmdLine.tests.cpp:: passed: cli.parse({"test", "--nothrow"}) for: {?} CmdLine.tests.cpp:: passed: config.noThrow for: true CmdLine.tests.cpp:: passed: cli.parse({"test", "-o", "filename.ext"}) for: {?} -CmdLine.tests.cpp:: passed: config.outputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +CmdLine.tests.cpp:: passed: config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" CmdLine.tests.cpp:: passed: cli.parse({"test", "--out", "filename.ext"}) for: {?} -CmdLine.tests.cpp:: passed: config.outputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +CmdLine.tests.cpp:: passed: config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" CmdLine.tests.cpp:: passed: cli.parse({"test", "-abe"}) for: {?} CmdLine.tests.cpp:: passed: config.abortAfter == 1 for: 1 == 1 CmdLine.tests.cpp:: passed: config.shouldDebugBreak for: true diff --git a/tests/SelfTest/Baselines/compact.sw.multi.approved.txt b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt new file mode 100644 index 0000000000..7196e8318e --- /dev/null +++ b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt @@ -0,0 +1,2480 @@ +Misc.tests.cpp:: passed: with 1 message: 'yay' +Decomposition.tests.cpp:: passed: fptr == 0 for: 0 == 0 +Decomposition.tests.cpp:: passed: fptr == 0l for: 0 == 0 +Compilation.tests.cpp:: passed: y.v == 0 for: 0 == 0 +Compilation.tests.cpp:: passed: 0 == y.v for: 0 == 0 +Compilation.tests.cpp:: passed: t1 == t2 for: {?} == {?} +Compilation.tests.cpp:: passed: t1 != t2 for: {?} != {?} +Compilation.tests.cpp:: passed: t1 < t2 for: {?} < {?} +Compilation.tests.cpp:: passed: t1 > t2 for: {?} > {?} +Compilation.tests.cpp:: passed: t1 <= t2 for: {?} <= {?} +Compilation.tests.cpp:: passed: t1 >= t2 for: {?} >= {?} +Misc.tests.cpp:: passed: +Compilation.tests.cpp:: passed: std::memcmp(uarr, "123", sizeof(uarr)) == 0 for: 0 == 0 with 2 messages: 'uarr := "123"' and 'sarr := "456"' +Compilation.tests.cpp:: passed: std::memcmp(sarr, "456", sizeof(sarr)) == 0 for: 0 == 0 with 2 messages: 'uarr := "123"' and 'sarr := "456"' +Compilation.tests.cpp:: passed: +Compilation.tests.cpp:: passed: +Compilation.tests.cpp:: passed: h1 == h2 for: [1403 helper] == [1403 helper] +Message.tests.cpp:: warning: ' +This info message starts with a linebreak' with 1 message: ' +This warning message starts with a linebreak' +Tricky.tests.cpp:: failed: explicitly with 1 message: '1514' +Compilation.tests.cpp:: passed: std::is_same, TypeList>::value for: true +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase("spec . char")) for: true +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase("spec , char")) for: true +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase(R"(spec \ char)")) for: true +Generators.tests.cpp:: passed: counter < 7 for: 3 < 7 +Generators.tests.cpp:: passed: counter < 7 for: 6 < 7 +Generators.tests.cpp:: passed: i != j for: 1 != 3 +Generators.tests.cpp:: passed: i != j for: 1 != 4 +Generators.tests.cpp:: passed: i != j for: 2 != 3 +Generators.tests.cpp:: passed: i != j for: 2 != 4 +PartTracker.tests.cpp:: passed: with 1 message: 'A' +PartTracker.tests.cpp:: passed: m for: 1 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: 1 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: m for: 1 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: with 1 message: 'A' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 1' and 'j := 3' and 'k := 5' +PartTracker.tests.cpp:: passed: with 1 message: 'B' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 1' and 'j := 3' and 'k := 6' +PartTracker.tests.cpp:: passed: with 1 message: 'B' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 1' and 'j := 4' and 'k := 5' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 1' and 'j := 4' and 'k := 6' +PartTracker.tests.cpp:: passed: with 1 message: 'A' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 2' and 'j := 3' and 'k := 5' +PartTracker.tests.cpp:: passed: with 1 message: 'B' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 2' and 'j := 3' and 'k := 6' +PartTracker.tests.cpp:: passed: with 1 message: 'B' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 2' and 'j := 4' and 'k := 5' +PartTracker.tests.cpp:: passed: with 3 messages: 'i := 2' and 'j := 4' and 'k := 6' +PartTracker.tests.cpp:: passed: m for: 1 +PartTracker.tests.cpp:: passed: n for: 1 +PartTracker.tests.cpp:: passed: m for: 1 +PartTracker.tests.cpp:: passed: n for: 2 +PartTracker.tests.cpp:: passed: m for: 1 +PartTracker.tests.cpp:: passed: n for: 3 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: n for: 1 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: n for: 2 +PartTracker.tests.cpp:: passed: m for: 2 +PartTracker.tests.cpp:: passed: n for: 3 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: n for: 1 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: n for: 2 +PartTracker.tests.cpp:: passed: m for: 3 +PartTracker.tests.cpp:: passed: n for: 3 +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: +Matchers.tests.cpp:: passed: smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0 is within 2 ULPs of -4.9406564584124654e-324 ([-1.4821969375237396e-323, 4.9406564584124654e-324]) +Matchers.tests.cpp:: passed: smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0 not is within 1 ULPs of -4.9406564584124654e-324 ([-9.8813129168249309e-324, -0.0000000000000000e+00]) +Matchers.tests.cpp:: passed: smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0f is within 2 ULPs of -1.40129846e-45f ([-4.20389539e-45, 1.40129846e-45]) +Matchers.tests.cpp:: passed: smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0f not is within 1 ULPs of -1.40129846e-45f ([-2.80259693e-45, -0.00000000e+00]) +Exception.tests.cpp:: failed: unexpected exception with message: 'answer := 42' with 1 message: 'expected exception' +Exception.tests.cpp:: failed: unexpected exception with message: 'answer := 42'; expression was: thisThrows() with 1 message: 'expected exception' +Exception.tests.cpp:: passed: thisThrows() with 1 message: 'answer := 42' +Compilation.tests.cpp:: passed: 42 == f for: 42 == {?} +Compilation.tests.cpp:: passed: a == t for: 3 == 3 +Compilation.tests.cpp:: passed: a == t for: 3 == 3 +Compilation.tests.cpp:: passed: throws_int(true) +Compilation.tests.cpp:: passed: throws_int(true), int +Compilation.tests.cpp:: passed: throws_int(false) +Compilation.tests.cpp:: passed: "aaa", Catch::Matchers::EndsWith("aaa") for: "aaa" ends with: "aaa" +Compilation.tests.cpp:: passed: templated_tests(3) for: true +Misc.tests.cpp:: failed: f() == 0 for: 1 == 0 +Misc.tests.cpp:: passed: errno == 1 for: 1 == 1 +Compilation.tests.cpp:: passed: x == 4 for: {?} == 4 with 1 message: 'dummy := 0' +Misc.tests.cpp:: passed: with 1 message: 'Everything is OK' +Misc.tests.cpp:: passed: with 1 message: 'Everything is OK' +Misc.tests.cpp:: passed: with 1 message: 'Everything is OK' +Misc.tests.cpp:: passed: with 1 message: 'Everything is OK' +Misc.tests.cpp:: passed: with 1 message: 'Everything is OK' +Condition.tests.cpp:: failed: false != false +Condition.tests.cpp:: failed: true != true +Condition.tests.cpp:: failed: !true for: false +Condition.tests.cpp:: failed: !(true) for: !true +Condition.tests.cpp:: failed: !trueValue for: false +Condition.tests.cpp:: failed: !(trueValue) for: !true +Condition.tests.cpp:: failed: !(1 == 1) for: false +Condition.tests.cpp:: failed: !(1 == 1) +Condition.tests.cpp:: passed: false == false +Condition.tests.cpp:: passed: true == true +Condition.tests.cpp:: passed: !false for: true +Condition.tests.cpp:: passed: !(false) for: !false +Condition.tests.cpp:: passed: !falseValue for: true +Condition.tests.cpp:: passed: !(falseValue) for: !false +Condition.tests.cpp:: passed: !(1 == 2) for: true +Condition.tests.cpp:: passed: !(1 == 2) +Tricky.tests.cpp:: passed: is_true::value == true for: true == true +Tricky.tests.cpp:: passed: true == is_true::value for: true == true +Tricky.tests.cpp:: passed: is_true::value == false for: false == false +Tricky.tests.cpp:: passed: false == is_true::value for: false == false +Tricky.tests.cpp:: passed: !is_true::value for: true +Tricky.tests.cpp:: passed: !!is_true::value for: true +Tricky.tests.cpp:: passed: is_true::value for: true +Tricky.tests.cpp:: passed: !(is_true::value) for: !false +Generators.tests.cpp:: passed: x < y for: 1 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 7 +Generators.tests.cpp:: passed: x < z for: 1 < 7 +Generators.tests.cpp:: passed: x < y for: 1 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 8 +Generators.tests.cpp:: passed: x < z for: 1 < 8 +Generators.tests.cpp:: passed: x < y for: 1 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 9 +Generators.tests.cpp:: passed: x < z for: 1 < 9 +Generators.tests.cpp:: passed: x < y for: 1 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 7 +Generators.tests.cpp:: passed: x < z for: 1 < 7 +Generators.tests.cpp:: passed: x < y for: 1 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 8 +Generators.tests.cpp:: passed: x < z for: 1 < 8 +Generators.tests.cpp:: passed: x < y for: 1 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 9 +Generators.tests.cpp:: passed: x < z for: 1 < 9 +Generators.tests.cpp:: passed: x < y for: 1 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 7 +Generators.tests.cpp:: passed: x < z for: 1 < 7 +Generators.tests.cpp:: passed: x < y for: 1 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 8 +Generators.tests.cpp:: passed: x < z for: 1 < 8 +Generators.tests.cpp:: passed: x < y for: 1 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 9 +Generators.tests.cpp:: passed: x < z for: 1 < 9 +Generators.tests.cpp:: passed: x < y for: 2 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 7 +Generators.tests.cpp:: passed: x < z for: 2 < 7 +Generators.tests.cpp:: passed: x < y for: 2 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 8 +Generators.tests.cpp:: passed: x < z for: 2 < 8 +Generators.tests.cpp:: passed: x < y for: 2 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 9 +Generators.tests.cpp:: passed: x < z for: 2 < 9 +Generators.tests.cpp:: passed: x < y for: 2 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 7 +Generators.tests.cpp:: passed: x < z for: 2 < 7 +Generators.tests.cpp:: passed: x < y for: 2 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 8 +Generators.tests.cpp:: passed: x < z for: 2 < 8 +Generators.tests.cpp:: passed: x < y for: 2 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 9 +Generators.tests.cpp:: passed: x < z for: 2 < 9 +Generators.tests.cpp:: passed: x < y for: 2 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 7 +Generators.tests.cpp:: passed: x < z for: 2 < 7 +Generators.tests.cpp:: passed: x < y for: 2 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 8 +Generators.tests.cpp:: passed: x < z for: 2 < 8 +Generators.tests.cpp:: passed: x < y for: 2 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 9 +Generators.tests.cpp:: passed: x < z for: 2 < 9 +Generators.tests.cpp:: passed: x < y for: 3 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 7 +Generators.tests.cpp:: passed: x < z for: 3 < 7 +Generators.tests.cpp:: passed: x < y for: 3 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 8 +Generators.tests.cpp:: passed: x < z for: 3 < 8 +Generators.tests.cpp:: passed: x < y for: 3 < 4 +Generators.tests.cpp:: passed: y < z for: 4 < 9 +Generators.tests.cpp:: passed: x < z for: 3 < 9 +Generators.tests.cpp:: passed: x < y for: 3 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 7 +Generators.tests.cpp:: passed: x < z for: 3 < 7 +Generators.tests.cpp:: passed: x < y for: 3 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 8 +Generators.tests.cpp:: passed: x < z for: 3 < 8 +Generators.tests.cpp:: passed: x < y for: 3 < 5 +Generators.tests.cpp:: passed: y < z for: 5 < 9 +Generators.tests.cpp:: passed: x < z for: 3 < 9 +Generators.tests.cpp:: passed: x < y for: 3 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 7 +Generators.tests.cpp:: passed: x < z for: 3 < 7 +Generators.tests.cpp:: passed: x < y for: 3 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 8 +Generators.tests.cpp:: passed: x < z for: 3 < 8 +Generators.tests.cpp:: passed: x < y for: 3 < 6 +Generators.tests.cpp:: passed: y < z for: 6 < 9 +Generators.tests.cpp:: passed: x < z for: 3 < 9 +Class.tests.cpp:: failed: s == "world" for: "hello" == "world" +Class.tests.cpp:: passed: s == "hello" for: "hello" == "hello" +Class.tests.cpp:: failed: Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +Class.tests.cpp:: failed: Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +Class.tests.cpp:: failed: Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +Class.tests.cpp:: failed: Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +Class.tests.cpp:: passed: Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +Class.tests.cpp:: passed: Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +Class.tests.cpp:: passed: Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +Class.tests.cpp:: passed: Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +Class.tests.cpp:: failed: Template_Fixture_2{}.m_a.size() < 2 for: 6 < 2 +Class.tests.cpp:: failed: Template_Fixture_2{}.m_a.size() < 2 for: 2 < 2 +Class.tests.cpp:: failed: Template_Fixture_2{}.m_a.size() < 2 for: 6 < 2 +Class.tests.cpp:: failed: Template_Fixture_2{}.m_a.size() < 2 for: 2 < 2 +Class.tests.cpp:: passed: Template_Fixture_2{}.m_a.size() >= 2 for: 6 >= 2 +Class.tests.cpp:: passed: Template_Fixture_2{}.m_a.size() >= 2 for: 2 >= 2 +Class.tests.cpp:: passed: Template_Fixture_2{}.m_a.size() >= 2 for: 6 >= 2 +Class.tests.cpp:: passed: Template_Fixture_2{}.m_a.size() >= 2 for: 2 >= 2 +Class.tests.cpp:: failed: Template_Fixture::m_a == 2 for: 1.0 == 2 +Class.tests.cpp:: failed: Template_Fixture::m_a == 2 for: 1.0f == 2 +Class.tests.cpp:: failed: Template_Fixture::m_a == 2 for: 1 == 2 +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1.0 == 1 +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1.0f == 1 +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1 == 1 +Class.tests.cpp:: failed: Nttp_Fixture::value == 0 for: 1 == 0 +Class.tests.cpp:: failed: Nttp_Fixture::value == 0 for: 3 == 0 +Class.tests.cpp:: failed: Nttp_Fixture::value == 0 for: 6 == 0 +Class.tests.cpp:: passed: Nttp_Fixture::value > 0 for: 1 > 0 +Class.tests.cpp:: passed: Nttp_Fixture::value > 0 for: 3 > 0 +Class.tests.cpp:: passed: Nttp_Fixture::value > 0 for: 6 > 0 +Class.tests.cpp:: failed: m_a == 2 for: 1 == 2 +Class.tests.cpp:: passed: m_a == 1 for: 1 == 1 +Misc.tests.cpp:: passed: x.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: x.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: x.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: x.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: x.size() > 0 for: 42 > 0 +Misc.tests.cpp:: passed: x.size() > 0 for: 9 > 0 +Misc.tests.cpp:: passed: x.size() > 0 for: 42 > 0 +Misc.tests.cpp:: passed: x.size() > 0 for: 9 > 0 +Approx.tests.cpp:: passed: d == 1.23_a for: 1.23 == Approx( 1.23 ) +Approx.tests.cpp:: passed: d != 1.22_a for: 1.23 != Approx( 1.22 ) +Approx.tests.cpp:: passed: -d == -1.23_a for: -1.23 == Approx( -1.23 ) +Approx.tests.cpp:: passed: d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 ) +Approx.tests.cpp:: passed: d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 ) +Approx.tests.cpp:: passed: d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 ) +Misc.tests.cpp:: passed: with 1 message: 'that's not flying - that's failing in style' +Misc.tests.cpp:: failed: explicitly with 1 message: 'to infinity and beyond' +Tricky.tests.cpp:: failed: &o1 == &o2 for: 0x == 0x +Tricky.tests.cpp:: failed: o1 == o2 for: {?} == {?} +Approx.tests.cpp:: passed: 104.0 != Approx(100.0) for: 104.0 != Approx( 100.0 ) +Approx.tests.cpp:: passed: 104.0 == Approx(100.0).margin(5) for: 104.0 == Approx( 100.0 ) +Approx.tests.cpp:: passed: 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0 ) +Approx.tests.cpp:: passed: 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 ) +Approx.tests.cpp:: passed: 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 ) +Approx.tests.cpp:: passed: 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 ) +Tricky.tests.cpp:: passed: i++ == 7 for: 7 == 7 +Tricky.tests.cpp:: passed: i++ == 8 for: 8 == 8 +Exception.tests.cpp:: passed: 1 == 1 +Exception.tests.cpp:: failed: unexpected exception with message: 'unexpected exception'; expression was: {Unknown expression after the reported line} +VariadicMacros.tests.cpp:: passed: with 1 message: 'anonymous test case' +Approx.tests.cpp:: passed: Approx(0).margin(0) +Approx.tests.cpp:: passed: Approx(0).margin(1234656) +Approx.tests.cpp:: passed: Approx(0).margin(-2), std::domain_error +Approx.tests.cpp:: passed: Approx(0).epsilon(0) +Approx.tests.cpp:: passed: Approx(0).epsilon(1) +Approx.tests.cpp:: passed: Approx(0).epsilon(-0.001), std::domain_error +Approx.tests.cpp:: passed: Approx(0).epsilon(1.0001), std::domain_error +Approx.tests.cpp:: passed: 0.25f == Approx(0.0f).margin(0.25f) for: 0.25f == Approx( 0.0 ) +Approx.tests.cpp:: passed: 0.0f == Approx(0.25f).margin(0.25f) for: 0.0f == Approx( 0.25 ) +Approx.tests.cpp:: passed: 0.5f == Approx(0.25f).margin(0.25f) for: 0.5f == Approx( 0.25 ) +Approx.tests.cpp:: passed: 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx( 245.25 ) +Approx.tests.cpp:: passed: 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 ) +Approx.tests.cpp:: passed: divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 ) +Approx.tests.cpp:: passed: divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 ) +Approx.tests.cpp:: passed: d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 ) +Approx.tests.cpp:: passed: d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 ) +Approx.tests.cpp:: passed: 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 ) +Approx.tests.cpp:: passed: 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 ) +Approx.tests.cpp:: passed: 1 == Approx( 1 ) for: 1 == Approx( 1.0 ) +Approx.tests.cpp:: passed: 0 == Approx( 0 ) for: 0 == Approx( 0.0 ) +Approx.tests.cpp:: passed: 1.0f == Approx( 1 ) for: 1.0f == Approx( 1.0 ) +Approx.tests.cpp:: passed: 0 == Approx( dZero) for: 0 == Approx( 0.0 ) +Approx.tests.cpp:: passed: 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 ) +Approx.tests.cpp:: passed: 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 ) +Approx.tests.cpp:: passed: dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 ) +Matchers.tests.cpp:: passed: 1, Predicate( alwaysTrue, "always true" ) for: 1 matches predicate: "always true" +Matchers.tests.cpp:: passed: 1, !Predicate( alwaysFalse, "always false" ) for: 1 not matches predicate: "always false" +Matchers.tests.cpp:: passed: "Hello olleH", Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) for: "Hello olleH" matches predicate: "First and last character should be equal" +Matchers.tests.cpp:: passed: "This wouldn't pass", !Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); } ) for: "This wouldn't pass" not matches undescribed predicate +Compilation.tests.cpp:: passed: lhs | rhs for: Val: 1 | Val: 2 +Compilation.tests.cpp:: passed: !(lhs & rhs) for: !(Val: 1 & Val: 2) +Compilation.tests.cpp:: passed: HasBitOperators{ 1 } & HasBitOperators{ 1 } for: Val: 1 & Val: 1 +Compilation.tests.cpp:: passed: lhs ^ rhs for: Val: 1 ^ Val: 2 +Compilation.tests.cpp:: passed: !(lhs ^ lhs) for: !(Val: 1 ^ Val: 1) +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: true +MatchersRanges.tests.cpp:: passed: a, Contains(1) for: { 1, 2, 3 } contains element 1 +MatchersRanges.tests.cpp:: passed: b, Contains(1) for: { 0, 1, 2 } contains element 1 +MatchersRanges.tests.cpp:: passed: c, !Contains(1) for: { 4, 5, 6 } not contains element 1 +MatchersRanges.tests.cpp:: passed: a, Contains(0, close_enough) for: { 1, 2, 3 } contains element 0 +MatchersRanges.tests.cpp:: passed: b, Contains(0, close_enough) for: { 0, 1, 2 } contains element 0 +MatchersRanges.tests.cpp:: passed: c, !Contains(0, close_enough) for: { 4, 5, 6 } not contains element 0 +MatchersRanges.tests.cpp:: passed: a, Contains(4, [](auto&& lhs, size_t sz) { return lhs.size() == sz; }) for: { "abc", "abcd", "abcde" } contains element 4 +MatchersRanges.tests.cpp:: passed: in, Contains(1) for: { 1, 2, 3, 4, 5 } contains element 1 +MatchersRanges.tests.cpp:: passed: in, !Contains(8) for: { 1, 2, 3, 4, 5 } not contains element 8 +MatchersRanges.tests.cpp:: passed: in, Contains(MoveOnlyTestElement{ 2 }) for: { 1, 2, 3 } contains element 2 +MatchersRanges.tests.cpp:: passed: in, !Contains(MoveOnlyTestElement{ 9 }) for: { 1, 2, 3 } not contains element 9 +MatchersRanges.tests.cpp:: passed: in, Contains(Catch::Matchers::WithinAbs(0.5, 0.5)) for: { 1.0, 2.0, 3.0, 0.0 } contains element matching is within 0.5 of 0.5 +MatchersRanges.tests.cpp:: passed: empty_array, IsEmpty() for: { } is empty +MatchersRanges.tests.cpp:: passed: non_empty_array, !IsEmpty() for: { 0.0 } not is empty +MatchersRanges.tests.cpp:: passed: empty_vec, IsEmpty() for: { } is empty +MatchersRanges.tests.cpp:: passed: non_empty_vec, !IsEmpty() for: { 'a', 'b', 'c' } not is empty +MatchersRanges.tests.cpp:: passed: inner_lists_are_empty, !IsEmpty() for: { { } } not is empty +MatchersRanges.tests.cpp:: passed: inner_lists_are_empty.front(), IsEmpty() for: { } is empty +MatchersRanges.tests.cpp:: passed: has_empty{}, !IsEmpty() for: {?} not is empty +MatchersRanges.tests.cpp:: passed: unrelated::ADL_empty{}, IsEmpty() for: {?} is empty +Message.tests.cpp:: passed: with 7 messages: 'a := 1' and 'b := 2' and 'c := 3' and 'a + b := 3' and 'a+b := 3' and 'c > b := true' and 'a == 1 := true' +Message.tests.cpp:: passed: with 7 messages: 'std::vector{1, 2, 3}[0, 1, 2] := 3' and 'std::vector{1, 2, 3}[(0, 1)] := 2' and 'std::vector{1, 2, 3}[0] := 1' and '(helper_1436{12, -12}) := { 12, -12 }' and '(helper_1436(-12, 12)) := { -12, 12 }' and '(1, 2) := 2' and '(2, 3) := 3' +Message.tests.cpp:: passed: with 11 messages: '("comma, in string", "escaped, \", ") := "escaped, ", "' and '"single quote in string,'," := "single quote in string,',"' and '"some escapes, \\,\\\\" := "some escapes, \,\\"' and '"some, ), unmatched, } prenheses {[<" := "some, ), unmatched, } prenheses {[<"' and ''"' := '"'' and ''\'' := '''' and '',' := ','' and ''}' := '}'' and '')' := ')'' and ''(' := '('' and ''{' := '{'' +ToStringGeneral.tests.cpp:: passed: true with 1 message: 'i := 2' +ToStringGeneral.tests.cpp:: passed: true with 1 message: '3' +Details.tests.cpp:: passed: eq( "", "" ) for: true +Details.tests.cpp:: passed: !(eq( "", "a" )) for: !false +Details.tests.cpp:: passed: eq( "a", "a" ) for: true +Details.tests.cpp:: passed: eq( "a", "A" ) for: true +Details.tests.cpp:: passed: eq( "A", "a" ) for: true +Details.tests.cpp:: passed: eq( "A", "A" ) for: true +Details.tests.cpp:: passed: !(eq( "a", "b" )) for: !false +Details.tests.cpp:: passed: !(eq( "a", "B" )) for: !false +Details.tests.cpp:: passed: lt( "", "a" ) for: true +Details.tests.cpp:: passed: !(lt( "a", "a" )) for: !false +Details.tests.cpp:: passed: !(lt( "", "" )) for: !false +Details.tests.cpp:: passed: lt( "a", "b" ) for: true +Details.tests.cpp:: passed: lt( "a", "B" ) for: true +Details.tests.cpp:: passed: lt( "A", "b" ) for: true +Details.tests.cpp:: passed: lt( "A", "B" ) for: true +ToStringGeneral.tests.cpp:: passed: tab == '\t' for: '\t' == '\t' +ToStringGeneral.tests.cpp:: passed: newline == '\n' for: '\n' == '\n' +ToStringGeneral.tests.cpp:: passed: carr_return == '\r' for: '\r' == '\r' +ToStringGeneral.tests.cpp:: passed: form_feed == '\f' for: '\f' == '\f' +ToStringGeneral.tests.cpp:: passed: space == ' ' for: ' ' == ' ' +ToStringGeneral.tests.cpp:: passed: c == chars[i] for: 'a' == 'a' +ToStringGeneral.tests.cpp:: passed: c == chars[i] for: 'z' == 'z' +ToStringGeneral.tests.cpp:: passed: c == chars[i] for: 'A' == 'A' +ToStringGeneral.tests.cpp:: passed: c == chars[i] for: 'Z' == 'Z' +ToStringGeneral.tests.cpp:: passed: null_terminator == '\0' for: 0 == 0 +ToStringGeneral.tests.cpp:: passed: c == i for: 2 == 2 +ToStringGeneral.tests.cpp:: passed: c == i for: 3 == 3 +ToStringGeneral.tests.cpp:: passed: c == i for: 4 == 4 +ToStringGeneral.tests.cpp:: passed: c == i for: 5 == 5 +Clara.tests.cpp:: passed: name.empty() for: true +Clara.tests.cpp:: passed: name == "foo" for: "foo" == "foo" +Clara.tests.cpp:: passed: !(parse_result) for: !{?} +Clara.tests.cpp:: passed: parse_result for: {?} +Clara.tests.cpp:: passed: res == std::vector{ "aaa", "bbb" } for: { "aaa", "bbb" } == { "aaa", "bbb" } +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( ( MatcherA() && MatcherB() ) && MatcherC() ), Catch::Matchers::Detail:: MatchAllOfGeneric>::value' +Matchers.tests.cpp:: passed: 1, ( MatcherA() && MatcherB() ) && MatcherC() for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( MatcherA() && ( MatcherB() && MatcherC() ) ), Catch::Matchers::Detail:: MatchAllOfGeneric>::value' +Matchers.tests.cpp:: passed: 1, MatcherA() && ( MatcherB() && MatcherC() ) for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) ), Catch::Matchers::Detail:: MatchAllOfGeneric>:: value' +Matchers.tests.cpp:: passed: 1, ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 and equals: true ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( ( MatcherA() || MatcherB() ) || MatcherC() ), Catch::Matchers::Detail:: MatchAnyOfGeneric>::value' +Matchers.tests.cpp:: passed: 1, ( MatcherA() || MatcherB() ) || MatcherC() for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( MatcherA() || ( MatcherB() || MatcherC() ) ), Catch::Matchers::Detail:: MatchAnyOfGeneric>::value' +Matchers.tests.cpp:: passed: 1, MatcherA() || ( MatcherB() || MatcherC() ) for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) ), Catch::Matchers::Detail:: MatchAnyOfGeneric>:: value' +Matchers.tests.cpp:: passed: 1, ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 or equals: true ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( !MatcherA() ), Catch::Matchers::Detail::MatchNotOfGeneric>::value' +Matchers.tests.cpp:: passed: 0, !MatcherA() for: 0 not equals: (int) 1 or (float) 1.0f +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same::value' +Matchers.tests.cpp:: passed: 1, !!MatcherA() for: 1 equals: (int) 1 or (float) 1.0f +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( !!!MatcherA() ), Catch::Matchers::Detail::MatchNotOfGeneric>::value' +Matchers.tests.cpp:: passed: 0, !!!MatcherA() for: 0 not equals: (int) 1 or (float) 1.0f +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same::value' +Matchers.tests.cpp:: passed: 1, !!!!MatcherA() for: 1 equals: (int) 1 or (float) 1.0f +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same>::value' +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same>::value' +Matchers.tests.cpp:: passed: 1, MatcherA() || MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same>::value' +Matchers.tests.cpp:: passed: 1, MatcherA() && MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 ) +Matchers.tests.cpp:: passed: with 1 message: 'std::is_same< decltype( MatcherA() || !MatcherB() ), Catch::Matchers::Detail::MatchAnyOfGeneric< MatcherA, Catch::Matchers::Detail::MatchNotOfGeneric>>::value' +Matchers.tests.cpp:: passed: 1, MatcherA() || !MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or not equals: (long long) 1 ) +Matchers.tests.cpp:: passed: vec, Predicate>( []( auto const& v ) { return std::all_of( v.begin(), v.end(), []( int elem ) { return elem % 2 == 1; } ); }, "All elements are odd" ) && !EqualsRange( a ) for: { 1, 3, 5 } ( matches predicate: "All elements are odd" and not Equals: { 5, 3, 1 } ) +Matchers.tests.cpp:: passed: str, StartsWith( "foo" ) && EqualsRange( arr ) && EndsWith( "bar" ) for: "foobar" ( starts with: "foo" and Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and ends with: "bar" ) +Matchers.tests.cpp:: passed: str, StartsWith( "foo" ) && !EqualsRange( bad_arr ) && EndsWith( "bar" ) for: "foobar" ( starts with: "foo" and not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and ends with: "bar" ) +Matchers.tests.cpp:: passed: str, EqualsRange( arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) for: "foobar" ( Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) +Matchers.tests.cpp:: passed: str, !EqualsRange( bad_arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) for: "foobar" ( not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) +Matchers.tests.cpp:: passed: str, EqualsRange( bad_arr ) || ( StartsWith( "foo" ) && EndsWith( "bar" ) ) for: "foobar" ( Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } or ( starts with: "foo" and ends with: "bar" ) ) +Matchers.tests.cpp:: passed: str, ( StartsWith( "foo" ) && EndsWith( "bar" ) ) || EqualsRange( bad_arr ) for: "foobar" ( ( starts with: "foo" and ends with: "bar" ) or Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } ) +Matchers.tests.cpp:: passed: container, EqualsRange( a ) || EqualsRange( b ) || EqualsRange( c ) for: { 1, 2, 3 } ( Equals: { 1, 2, 3 } or Equals: { 0, 1, 2 } or Equals: { 4, 5, 6 } ) +Tricky.tests.cpp:: passed: std::vector{constructor_throws{}, constructor_throws{}} +Tricky.tests.cpp:: passed: std::vector{constructor_throws{}, constructor_throws{}} +Tricky.tests.cpp:: passed: std::vector{1, 2, 3} == std::vector{1, 2, 3} +Tricky.tests.cpp:: passed: std::vector{1, 2, 3} == std::vector{1, 2, 3} +Tricky.tests.cpp:: passed: std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +Tricky.tests.cpp:: passed: std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +Tricky.tests.cpp:: passed: !(std::vector{1, 2} == std::vector{1, 2, 3}) for: !({ 1, 2 } == { 1, 2, 3 }) +Tricky.tests.cpp:: passed: !(std::vector{1, 2} == std::vector{1, 2, 3}) for: !({ 1, 2 } == { 1, 2, 3 }) +Tricky.tests.cpp:: passed: std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +Tricky.tests.cpp:: passed: std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +Tricky.tests.cpp:: passed: true +Tricky.tests.cpp:: passed: std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +Tricky.tests.cpp:: passed: a for: 0x +Tricky.tests.cpp:: passed: a == &foo for: 0x == 0x +RandomNumberGeneration.tests.cpp:: passed: SimplePcg32{} == SimplePcg32{} for: {?} == {?} +RandomNumberGeneration.tests.cpp:: passed: SimplePcg32{ 0 } != SimplePcg32{} for: {?} != {?} +RandomNumberGeneration.tests.cpp:: passed: !(SimplePcg32{ 1 } == SimplePcg32{ 2 }) for: !({?} == {?}) +RandomNumberGeneration.tests.cpp:: passed: !(SimplePcg32{ 1 } != SimplePcg32{ 1 }) for: !({?} != {?}) +Approx.tests.cpp:: passed: td == Approx(10.0) for: StrongDoubleTypedef(10) == Approx( 10.0 ) +Approx.tests.cpp:: passed: Approx(10.0) == td for: Approx( 10.0 ) == StrongDoubleTypedef(10) +Approx.tests.cpp:: passed: td != Approx(11.0) for: StrongDoubleTypedef(10) != Approx( 11.0 ) +Approx.tests.cpp:: passed: Approx(11.0) != td for: Approx( 11.0 ) != StrongDoubleTypedef(10) +Approx.tests.cpp:: passed: td <= Approx(10.0) for: StrongDoubleTypedef(10) <= Approx( 10.0 ) +Approx.tests.cpp:: passed: td <= Approx(11.0) for: StrongDoubleTypedef(10) <= Approx( 11.0 ) +Approx.tests.cpp:: passed: Approx(10.0) <= td for: Approx( 10.0 ) <= StrongDoubleTypedef(10) +Approx.tests.cpp:: passed: Approx(9.0) <= td for: Approx( 9.0 ) <= StrongDoubleTypedef(10) +Approx.tests.cpp:: passed: td >= Approx(9.0) for: StrongDoubleTypedef(10) >= Approx( 9.0 ) +Approx.tests.cpp:: passed: td >= Approx(td) for: StrongDoubleTypedef(10) >= Approx( 10.0 ) +Approx.tests.cpp:: passed: Approx(td) >= td for: Approx( 10.0 ) >= StrongDoubleTypedef(10) +Approx.tests.cpp:: passed: Approx(11.0) >= td for: Approx( 11.0 ) >= StrongDoubleTypedef(10) +Condition.tests.cpp:: passed: 54 == 6*9 for: 54 == 54 +Condition.tests.cpp:: passed: ( -1 > 2u ) for: true +Condition.tests.cpp:: passed: -1 > 2u for: -1 > 2 +Condition.tests.cpp:: passed: ( 2u < -1 ) for: true +Condition.tests.cpp:: passed: 2u < -1 for: 2 < -1 +Condition.tests.cpp:: passed: ( minInt > 2u ) for: true +Condition.tests.cpp:: passed: minInt > 2u for: -2147483648 > 2 +Condition.tests.cpp:: passed: i == 1 for: 1 == 1 +Condition.tests.cpp:: passed: ui == 2 for: 2 == 2 +Condition.tests.cpp:: passed: l == 3 for: 3 == 3 +Condition.tests.cpp:: passed: ul == 4 for: 4 == 4 +Condition.tests.cpp:: passed: c == 5 for: 5 == 5 +Condition.tests.cpp:: passed: uc == 6 for: 6 == 6 +Condition.tests.cpp:: passed: 1 == i for: 1 == 1 +Condition.tests.cpp:: passed: 2 == ui for: 2 == 2 +Condition.tests.cpp:: passed: 3 == l for: 3 == 3 +Condition.tests.cpp:: passed: 4 == ul for: 4 == 4 +Condition.tests.cpp:: passed: 5 == c for: 5 == 5 +Condition.tests.cpp:: passed: 6 == uc for: 6 == 6 +Condition.tests.cpp:: passed: (std::numeric_limits::max)() > ul for: 4294967295 (0x) > 4 +Matchers.tests.cpp:: passed: !(matcher.match( 1 )) for: !false +Matchers.tests.cpp:: passed: first.matchCalled for: true +Matchers.tests.cpp:: passed: !second.matchCalled for: true +Matchers.tests.cpp:: passed: matcher.match( 1 ) for: true +Matchers.tests.cpp:: passed: first.matchCalled for: true +Matchers.tests.cpp:: passed: !second.matchCalled for: true +Matchers.tests.cpp:: passed: !(matcher.match( 1 )) for: !false +Matchers.tests.cpp:: passed: first.matchCalled for: true +Matchers.tests.cpp:: passed: !second.matchCalled for: true +Matchers.tests.cpp:: passed: matcher.match( 1 ) for: true +Matchers.tests.cpp:: passed: first.matchCalled for: true +Matchers.tests.cpp:: passed: !second.matchCalled for: true +Matchers.tests.cpp:: failed: testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "not there" (case insensitive) +Matchers.tests.cpp:: failed: testStringForMatching(), ContainsSubstring( "STRING" ) for: "this string contains 'abc' as a substring" contains: "STRING" +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: elem % 2 == 1 for: 1 == 1 +Generators.tests.cpp:: passed: call_count == 1 for: 1 == 1 +Generators.tests.cpp:: passed: make_data().size() == test_count for: 6 == 6 +Exception.tests.cpp:: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom() +Exception.tests.cpp:: failed: unexpected exception with message: 'custom exception - not std'; expression was: throwCustom(), std::exception +Exception.tests.cpp:: failed: unexpected exception with message: 'custom std exception' +Approx.tests.cpp:: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 ) +Approx.tests.cpp:: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 ) +ToString.tests.cpp:: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1" +ToString.tests.cpp:: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2" +ToString.tests.cpp:: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} +== +"{** unexpected enum value **}" +Tag.tests.cpp:: passed: Catch::TestCaseInfo( "", { "fake test name", "[]" }, dummySourceLineInfo ) +Matchers.tests.cpp:: failed: testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring" +Matchers.tests.cpp:: failed: testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive) +EnumToString.tests.cpp:: passed: stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1" +EnumToString.tests.cpp:: passed: stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2" +EnumToString.tests.cpp:: passed: stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3" +EnumToString.tests.cpp:: passed: stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" for: "{** unexpected enum value **}" +== +"{** unexpected enum value **}" +EnumToString.tests.cpp:: passed: stringify( ec3 ) == "Value2" for: "Value2" == "Value2" +EnumToString.tests.cpp:: passed: stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red" +EnumToString.tests.cpp:: passed: stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue" +Approx.tests.cpp:: passed: 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 ) +Condition.tests.cpp:: failed: data.int_seven == 6 for: 7 == 6 +Condition.tests.cpp:: failed: data.int_seven == 8 for: 7 == 8 +Condition.tests.cpp:: failed: data.int_seven == 0 for: 7 == 0 +Condition.tests.cpp:: failed: data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 ) +Condition.tests.cpp:: failed: data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 ) +Condition.tests.cpp:: failed: data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 ) +Condition.tests.cpp:: failed: data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 ) +Condition.tests.cpp:: failed: data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 ) +Condition.tests.cpp:: failed: data.str_hello == "goodbye" for: "hello" == "goodbye" +Condition.tests.cpp:: failed: data.str_hello == "hell" for: "hello" == "hell" +Condition.tests.cpp:: failed: data.str_hello == "hello1" for: "hello" == "hello1" +Condition.tests.cpp:: failed: data.str_hello.size() == 6 for: 5 == 6 +Condition.tests.cpp:: failed: x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 ) +Condition.tests.cpp:: passed: data.int_seven == 7 for: 7 == 7 +Condition.tests.cpp:: passed: data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 ) +Condition.tests.cpp:: passed: data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 ) +Condition.tests.cpp:: passed: data.str_hello == "hello" for: "hello" == "hello" +Condition.tests.cpp:: passed: "hello" == data.str_hello for: "hello" == "hello" +Condition.tests.cpp:: passed: data.str_hello.size() == 5 for: 5 == 5 +Condition.tests.cpp:: passed: x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 ) +Matchers.tests.cpp:: passed: testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" +Matchers.tests.cpp:: passed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive) +Matchers.tests.cpp:: failed: testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring" +Matchers.tests.cpp:: failed: testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "something else" (case insensitive) +ToStringGeneral.tests.cpp:: passed: ::Catch::Detail::stringify(WhatException{}) == "This exception has overridden what() method" for: "This exception has overridden what() method" +== +"This exception has overridden what() method" +ToStringGeneral.tests.cpp:: passed: ::Catch::Detail::stringify(OperatorException{}) == "OperatorException" for: "OperatorException" == "OperatorException" +ToStringGeneral.tests.cpp:: passed: ::Catch::Detail::stringify(StringMakerException{}) == "StringMakerException" for: "StringMakerException" +== +"StringMakerException" +Matchers.tests.cpp:: failed: expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } +Matchers.tests.cpp:: failed: expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } +Matchers.tests.cpp:: failed: unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } +Matchers.tests.cpp:: failed: unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } +Matchers.tests.cpp:: failed: throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +Matchers.tests.cpp:: failed: throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +Matchers.tests.cpp:: passed: throwsSpecialException( 1 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +Matchers.tests.cpp:: passed: throwsSpecialException( 2 ), SpecialException, ExceptionMatcher{ 2 } for: SpecialException::what special exception has value of 2 +Exception.tests.cpp:: passed: thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" +Exception.tests.cpp:: passed: thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) for: "expected exception" equals: "expected exception" (case insensitive) +Exception.tests.cpp:: passed: thisThrows(), StartsWith( "expected" ) for: "expected exception" starts with: "expected" +Exception.tests.cpp:: passed: thisThrows(), EndsWith( "exception" ) for: "expected exception" ends with: "exception" +Exception.tests.cpp:: passed: thisThrows(), ContainsSubstring( "except" ) for: "expected exception" contains: "except" +Exception.tests.cpp:: passed: thisThrows(), ContainsSubstring( "exCept", Catch::CaseSensitive::No ) for: "expected exception" contains: "except" (case insensitive) +Matchers.tests.cpp:: passed: throwsDerivedException(), DerivedException, Message( "DerivedException::what" ) for: DerivedException::what exception message matches "DerivedException::what" +Matchers.tests.cpp:: passed: throwsDerivedException(), DerivedException, !Message( "derivedexception::what" ) for: DerivedException::what not exception message matches "derivedexception::what" +Matchers.tests.cpp:: passed: throwsSpecialException( 2 ), SpecialException, !Message( "DerivedException::what" ) for: SpecialException::what not exception message matches "DerivedException::what" +Matchers.tests.cpp:: passed: throwsSpecialException( 2 ), SpecialException, Message( "SpecialException::what" ) for: SpecialException::what exception message matches "SpecialException::what" +Exception.tests.cpp:: failed: unexpected exception with message: 'expected exception'; expression was: thisThrows(), std::string +Exception.tests.cpp:: failed: expected exception, got none; expression was: thisDoesntThrow(), std::domain_error +Exception.tests.cpp:: failed: unexpected exception with message: 'expected exception'; expression was: thisThrows() +Message.tests.cpp:: failed: explicitly with 1 message: 'This is a failure' +Message.tests.cpp:: failed: explicitly +Message.tests.cpp:: failed: explicitly with 1 message: 'This is a failure' +Message.tests.cpp:: warning: 'This message appears in the output' +Misc.tests.cpp:: passed: Factorial(0) == 1 for: 1 == 1 +Misc.tests.cpp:: passed: Factorial(1) == 1 for: 1 == 1 +Misc.tests.cpp:: passed: Factorial(2) == 2 for: 2 == 2 +Misc.tests.cpp:: passed: Factorial(3) == 6 for: 6 == 6 +Misc.tests.cpp:: passed: Factorial(10) == 3628800 for: 3628800 (0x) == 3628800 (0x) +Matchers.tests.cpp:: passed: 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other +Matchers.tests.cpp:: passed: 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other +Matchers.tests.cpp:: passed: 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other +Matchers.tests.cpp:: passed: -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other +Matchers.tests.cpp:: passed: v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other +Matchers.tests.cpp:: passed: 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0 +Matchers.tests.cpp:: passed: 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0 +Matchers.tests.cpp:: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0 +Matchers.tests.cpp:: passed: 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0 +Matchers.tests.cpp:: passed: 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0 +Matchers.tests.cpp:: passed: 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11.0 +Matchers.tests.cpp:: passed: -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0 +Matchers.tests.cpp:: passed: -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6 +Matchers.tests.cpp:: passed: 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) +Matchers.tests.cpp:: passed: nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00]) +Matchers.tests.cpp:: passed: 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324]) +Matchers.tests.cpp:: passed: 1., WithinULP( nextafter( 1., 0. ), 1 ) for: 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00]) +Matchers.tests.cpp:: passed: 1., !WithinULP( nextafter( 1., 2. ), 0 ) for: 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00]) +Matchers.tests.cpp:: passed: 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) +Matchers.tests.cpp:: passed: -0., WithinULP( 0., 0 ) for: -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00]) +Matchers.tests.cpp:: passed: 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) ) +Matchers.tests.cpp:: passed: 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) ) +Matchers.tests.cpp:: passed: 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) +Matchers.tests.cpp:: passed: WithinAbs( 1., 0. ) +Matchers.tests.cpp:: passed: WithinAbs( 1., -1. ), std::domain_error +Matchers.tests.cpp:: passed: WithinULP( 1., 0 ) +Matchers.tests.cpp:: passed: WithinRel( 1., 0. ) +Matchers.tests.cpp:: passed: WithinRel( 1., -0.2 ), std::domain_error +Matchers.tests.cpp:: passed: WithinRel( 1., 1. ), std::domain_error +Matchers.tests.cpp:: passed: 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other +Matchers.tests.cpp:: passed: 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other +Matchers.tests.cpp:: passed: 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other +Matchers.tests.cpp:: passed: -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other +Matchers.tests.cpp:: passed: v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other +Matchers.tests.cpp:: passed: 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0 +Matchers.tests.cpp:: passed: 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0 +Matchers.tests.cpp:: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0 +Matchers.tests.cpp:: passed: 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0 +Matchers.tests.cpp:: passed: 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0 +Matchers.tests.cpp:: passed: 11.f, !WithinAbs( 10.f, 0.5f ) for: 11.0f not is within 0.5 of 10.0 +Matchers.tests.cpp:: passed: 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 of 11.0 +Matchers.tests.cpp:: passed: -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0 +Matchers.tests.cpp:: passed: -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815 +Matchers.tests.cpp:: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) +Matchers.tests.cpp:: passed: -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00]) +Matchers.tests.cpp:: passed: nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) +Matchers.tests.cpp:: passed: 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45]) +Matchers.tests.cpp:: passed: 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) for: 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00]) +Matchers.tests.cpp:: passed: 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) for: 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00]) +Matchers.tests.cpp:: passed: 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) +Matchers.tests.cpp:: passed: -0.f, WithinULP( 0.f, 0 ) for: -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00]) +Matchers.tests.cpp:: passed: 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) ) +Matchers.tests.cpp:: passed: 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) ) +Matchers.tests.cpp:: passed: 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) +Matchers.tests.cpp:: passed: WithinAbs( 1.f, 0.f ) +Matchers.tests.cpp:: passed: WithinAbs( 1.f, -1.f ), std::domain_error +Matchers.tests.cpp:: passed: WithinULP( 1.f, 0 ) +Matchers.tests.cpp:: passed: WithinULP( 1.f, static_cast( -1 ) ), std::domain_error +Matchers.tests.cpp:: passed: WithinRel( 1.f, 0.f ) +Matchers.tests.cpp:: passed: WithinRel( 1.f, -0.2f ), std::domain_error +Matchers.tests.cpp:: passed: WithinRel( 1.f, 1.f ), std::domain_error +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: filter([] (int) {return false; }, value(1)), Catch::GeneratorException +Generators.tests.cpp:: passed: i < 4 for: 1 < 4 +Generators.tests.cpp:: passed: i < 4 for: 2 < 4 +Generators.tests.cpp:: passed: i < 4 for: 3 < 4 +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: i % 2 == 0 for: 0 == 0 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: i.size() == 1 for: 1 == 1 +Generators.tests.cpp:: passed: j > 0 for: 1 > 0 +Generators.tests.cpp:: passed: j > 0 for: 2 > 0 +Generators.tests.cpp:: passed: j > 0 for: 3 > 0 +Generators.tests.cpp:: passed: j > 0 for: 1 > 0 +Generators.tests.cpp:: passed: j > 0 for: 2 > 0 +Generators.tests.cpp:: passed: j > 0 for: 3 > 0 +Generators.tests.cpp:: passed: chunk2.size() == 2 for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() == chunk2.back() for: 1 == 1 +Generators.tests.cpp:: passed: chunk2.size() == 2 for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() == chunk2.back() for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.size() == 2 for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() == chunk2.back() for: 3 == 3 +Generators.tests.cpp:: passed: chunk2.size() == 2 for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() == chunk2.back() for: 1 == 1 +Generators.tests.cpp:: passed: chunk2.front() < 3 for: 1 < 3 +Generators.tests.cpp:: passed: chunk2.size() == 2 for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() == chunk2.back() for: 2 == 2 +Generators.tests.cpp:: passed: chunk2.front() < 3 for: 2 < 3 +Generators.tests.cpp:: passed: chunk2.size() == 0 for: 0 == 0 +Generators.tests.cpp:: passed: chunk2.size() == 0 for: 0 == 0 +Generators.tests.cpp:: passed: chunk2.size() == 0 for: 0 == 0 +Generators.tests.cpp:: passed: chunk(2, value(1)), Catch::GeneratorException +Generators.tests.cpp:: passed: j < i for: -3 < 1 +Generators.tests.cpp:: passed: j < i for: -2 < 1 +Generators.tests.cpp:: passed: j < i for: -1 < 1 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 4 > 1 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 4 > 2 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 4 > 3 +Generators.tests.cpp:: passed: j < i for: -3 < 2 +Generators.tests.cpp:: passed: j < i for: -2 < 2 +Generators.tests.cpp:: passed: j < i for: -1 < 2 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 8 > 1 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 8 > 2 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 8 > 3 +Generators.tests.cpp:: passed: j < i for: -3 < 3 +Generators.tests.cpp:: passed: j < i for: -2 < 3 +Generators.tests.cpp:: passed: j < i for: -1 < 3 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 12 > 1 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 12 > 2 +Generators.tests.cpp:: passed: 4u * i > str.size() for: 12 > 3 +GeneratorsImpl.tests.cpp:: passed: gen.get() == 123 for: 123 == 123 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 4 for: 4 == 4 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 0 for: 0 == 0 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get().size() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.get() == "aa" for: "aa" == "aa" +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == "bb" for: "bb" == "bb" +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == "cc" for: "cc" == "cc" +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: filter([](int) { return false; }, value(1)), Catch::GeneratorException +GeneratorsImpl.tests.cpp:: passed: filter([](int) { return false; }, values({ 1, 2, 3 })), Catch::GeneratorException +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2.0 for: 2.0 == 2.0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 4.0 for: 4.0 == 4.0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 6.0 for: 6.0 == 6.0 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2.0 for: 2.0 == 2.0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 4.0 for: 4.0 == 4.0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 6.0 for: 6.0 == 6.0 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 3 for: 3 == 3 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == -2 for: -2 == -2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 0 for: 0 == 0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 1 for: 1 == 1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 0 for: 0 == 0 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == -7 for: -7 == -7 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == -7 for: -7 == -7 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == -7 for: -7 == -7 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.9' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.8' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.6' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.5' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.3' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.2' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.3' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.4' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.6' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.7' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.8' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.9' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 ) +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.7' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.4' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is -0.1' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.2' +GeneratorsImpl.tests.cpp:: passed: gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true with 1 message: 'Current expected value is 0.5' +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +GeneratorsImpl.tests.cpp:: passed: gen.get() == 5 for: 5 == 5 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == 2 for: 2 == 2 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -1 for: -1 == -1 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -4 for: -4 == -4 +GeneratorsImpl.tests.cpp:: passed: gen.next() for: true +GeneratorsImpl.tests.cpp:: passed: gen.get() == -7 for: -7 == -7 +GeneratorsImpl.tests.cpp:: passed: !(gen.next()) for: !false +Approx.tests.cpp:: passed: d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 ) +Approx.tests.cpp:: passed: d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 ) +Approx.tests.cpp:: passed: !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 )) +Approx.tests.cpp:: passed: d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 ) +Message.tests.cpp:: warning: 'this is a message' with 1 message: 'this is a warning' +Message.tests.cpp:: failed: a == 1 for: 2 == 1 with 2 messages: 'this message should be logged' and 'so should this' +Message.tests.cpp:: passed: a == 2 for: 2 == 2 with 1 message: 'this message may be logged later' +Message.tests.cpp:: failed: a == 1 for: 2 == 1 with 2 messages: 'this message may be logged later' and 'this message should be logged' +Message.tests.cpp:: failed: a == 0 for: 2 == 0 with 3 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later' +Message.tests.cpp:: passed: a == 2 for: 2 == 2 with 4 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later' and 'but not this' +Message.tests.cpp:: passed: i < 10 for: 0 < 10 with 2 messages: 'current counter 0' and 'i := 0' +Message.tests.cpp:: passed: i < 10 for: 1 < 10 with 2 messages: 'current counter 1' and 'i := 1' +Message.tests.cpp:: passed: i < 10 for: 2 < 10 with 2 messages: 'current counter 2' and 'i := 2' +Message.tests.cpp:: passed: i < 10 for: 3 < 10 with 2 messages: 'current counter 3' and 'i := 3' +Message.tests.cpp:: passed: i < 10 for: 4 < 10 with 2 messages: 'current counter 4' and 'i := 4' +Message.tests.cpp:: passed: i < 10 for: 5 < 10 with 2 messages: 'current counter 5' and 'i := 5' +Message.tests.cpp:: passed: i < 10 for: 6 < 10 with 2 messages: 'current counter 6' and 'i := 6' +Message.tests.cpp:: passed: i < 10 for: 7 < 10 with 2 messages: 'current counter 7' and 'i := 7' +Message.tests.cpp:: passed: i < 10 for: 8 < 10 with 2 messages: 'current counter 8' and 'i := 8' +Message.tests.cpp:: passed: i < 10 for: 9 < 10 with 2 messages: 'current counter 9' and 'i := 9' +Message.tests.cpp:: failed: i < 10 for: 10 < 10 with 2 messages: 'current counter 10' and 'i := 10' +Condition.tests.cpp:: failed: data.int_seven != 7 for: 7 != 7 +Condition.tests.cpp:: failed: data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 ) +Condition.tests.cpp:: failed: data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 ) +Condition.tests.cpp:: failed: data.str_hello != "hello" for: "hello" != "hello" +Condition.tests.cpp:: failed: data.str_hello.size() != 5 for: 5 != 5 +Condition.tests.cpp:: passed: data.int_seven != 6 for: 7 != 6 +Condition.tests.cpp:: passed: data.int_seven != 8 for: 7 != 8 +Condition.tests.cpp:: passed: data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 ) +Condition.tests.cpp:: passed: data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 ) +Condition.tests.cpp:: passed: data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 ) +Condition.tests.cpp:: passed: data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 ) +Condition.tests.cpp:: passed: data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 ) +Condition.tests.cpp:: passed: data.str_hello != "goodbye" for: "hello" != "goodbye" +Condition.tests.cpp:: passed: data.str_hello != "hell" for: "hello" != "hell" +Condition.tests.cpp:: passed: data.str_hello != "hello1" for: "hello" != "hello1" +Condition.tests.cpp:: passed: data.str_hello.size() != 6 for: 5 != 6 +Compilation.tests.cpp:: passed: []() { return true; }() for: true +Approx.tests.cpp:: passed: d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 ) +Approx.tests.cpp:: passed: d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 ) +Approx.tests.cpp:: passed: !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 )) +Approx.tests.cpp:: passed: d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 ) +Misc.tests.cpp:: passed: with 1 message: 'was called' +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) for: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) +Matchers.tests.cpp:: passed: testStringForMatching2(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) +Matchers.tests.cpp:: passed: testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) +Matchers.tests.cpp:: failed: testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) +Matchers.tests.cpp:: passed: testStringForMatching(), !ContainsSubstring( "different" ) for: "this string contains 'abc' as a substring" not contains: "different" +Matchers.tests.cpp:: failed: testStringForMatching(), !ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" not contains: "substring" +Condition.tests.cpp:: failed: explicitly +Condition.tests.cpp:: failed: explicitly +Condition.tests.cpp:: failed: explicitly +Condition.tests.cpp:: failed: explicitly +Exception.tests.cpp:: passed: thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" +Exception.tests.cpp:: failed: thisThrows(), "should fail" for: "expected exception" equals: "should fail" +Generators.tests.cpp:: passed: values > -6 for: 3 > -6 +Generators.tests.cpp:: passed: values > -6 for: 4 > -6 +Generators.tests.cpp:: passed: values > -6 for: 5 > -6 +Generators.tests.cpp:: passed: values > -6 for: 6 > -6 +Generators.tests.cpp:: passed: values > -6 for: -5 > -6 +Generators.tests.cpp:: passed: values > -6 for: -4 > -6 +Generators.tests.cpp:: passed: values > -6 for: 90 > -6 +Generators.tests.cpp:: passed: values > -6 for: 91 > -6 +Generators.tests.cpp:: passed: values > -6 for: 92 > -6 +Generators.tests.cpp:: passed: values > -6 for: 93 > -6 +Generators.tests.cpp:: passed: values > -6 for: 94 > -6 +Generators.tests.cpp:: passed: values > -6 for: 95 > -6 +Generators.tests.cpp:: passed: values > -6 for: 96 > -6 +Generators.tests.cpp:: passed: values > -6 for: 97 > -6 +Generators.tests.cpp:: passed: values > -6 for: 98 > -6 +Generators.tests.cpp:: passed: values > -6 for: 99 > -6 +Misc.tests.cpp:: warning: 'This one ran' +Exception.tests.cpp:: failed: unexpected exception with message: 'custom exception' +Tricky.tests.cpp:: passed: True for: {?} +Tricky.tests.cpp:: passed: !False for: true +Tricky.tests.cpp:: passed: !(False) for: !{?} +Compilation.tests.cpp:: passed: with 1 message: 'std::is_void::value' +Compilation.tests.cpp:: passed: with 1 message: '!(std::is_void::value)' +Compilation.tests.cpp:: passed: with 1 message: 'std::is_void::value' +Compilation.tests.cpp:: passed: with 1 message: '!(std::is_void::value)' +Condition.tests.cpp:: failed: data.int_seven > 7 for: 7 > 7 +Condition.tests.cpp:: failed: data.int_seven < 7 for: 7 < 7 +Condition.tests.cpp:: failed: data.int_seven > 8 for: 7 > 8 +Condition.tests.cpp:: failed: data.int_seven < 6 for: 7 < 6 +Condition.tests.cpp:: failed: data.int_seven < 0 for: 7 < 0 +Condition.tests.cpp:: failed: data.int_seven < -1 for: 7 < -1 +Condition.tests.cpp:: failed: data.int_seven >= 8 for: 7 >= 8 +Condition.tests.cpp:: failed: data.int_seven <= 6 for: 7 <= 6 +Condition.tests.cpp:: failed: data.float_nine_point_one < 9 for: 9.1f < 9 +Condition.tests.cpp:: failed: data.float_nine_point_one > 10 for: 9.1f > 10 +Condition.tests.cpp:: failed: data.float_nine_point_one > 9.2 for: 9.1f > 9.2 +Condition.tests.cpp:: failed: data.str_hello > "hello" for: "hello" > "hello" +Condition.tests.cpp:: failed: data.str_hello < "hello" for: "hello" < "hello" +Condition.tests.cpp:: failed: data.str_hello > "hellp" for: "hello" > "hellp" +Condition.tests.cpp:: failed: data.str_hello > "z" for: "hello" > "z" +Condition.tests.cpp:: failed: data.str_hello < "hellm" for: "hello" < "hellm" +Condition.tests.cpp:: failed: data.str_hello < "a" for: "hello" < "a" +Condition.tests.cpp:: failed: data.str_hello >= "z" for: "hello" >= "z" +Condition.tests.cpp:: failed: data.str_hello <= "a" for: "hello" <= "a" +Condition.tests.cpp:: passed: data.int_seven < 8 for: 7 < 8 +Condition.tests.cpp:: passed: data.int_seven > 6 for: 7 > 6 +Condition.tests.cpp:: passed: data.int_seven > 0 for: 7 > 0 +Condition.tests.cpp:: passed: data.int_seven > -1 for: 7 > -1 +Condition.tests.cpp:: passed: data.int_seven >= 7 for: 7 >= 7 +Condition.tests.cpp:: passed: data.int_seven >= 6 for: 7 >= 6 +Condition.tests.cpp:: passed: data.int_seven <= 7 for: 7 <= 7 +Condition.tests.cpp:: passed: data.int_seven <= 8 for: 7 <= 8 +Condition.tests.cpp:: passed: data.float_nine_point_one > 9 for: 9.1f > 9 +Condition.tests.cpp:: passed: data.float_nine_point_one < 10 for: 9.1f < 10 +Condition.tests.cpp:: passed: data.float_nine_point_one < 9.2 for: 9.1f < 9.2 +Condition.tests.cpp:: passed: data.str_hello <= "hello" for: "hello" <= "hello" +Condition.tests.cpp:: passed: data.str_hello >= "hello" for: "hello" >= "hello" +Condition.tests.cpp:: passed: data.str_hello < "hellp" for: "hello" < "hellp" +Condition.tests.cpp:: passed: data.str_hello < "zebra" for: "hello" < "zebra" +Condition.tests.cpp:: passed: data.str_hello > "hellm" for: "hello" > "hellm" +Condition.tests.cpp:: passed: data.str_hello > "a" for: "hello" > "a" +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 4242248763 (0x) +== +4242248763 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1867888929 (0x) +== +1867888929 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1276619030 (0x) +== +1276619030 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1911218783 (0x) +== +1911218783 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1827115164 (0x) +== +1827115164 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1472234645 (0x) +== +1472234645 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 868832940 (0x) +== +868832940 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 570883446 (0x) +== +570883446 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 889299803 (0x) +== +889299803 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 4261393167 (0x) +== +4261393167 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 1472234645 (0x) +== +1472234645 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 868832940 (0x) +== +868832940 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 570883446 (0x) +== +570883446 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 889299803 (0x) +== +889299803 (0x) +RandomNumberGeneration.tests.cpp:: passed: rng() == 0x for: 4261393167 (0x) +== +4261393167 (0x) +Message.tests.cpp:: failed: explicitly with 1 message: 'Message from section one' +Message.tests.cpp:: failed: explicitly with 1 message: 'Message from section two' +Matchers.tests.cpp:: passed: ( EvilMatcher(), EvilMatcher() ), EvilCommaOperatorUsed +Matchers.tests.cpp:: passed: &EvilMatcher(), EvilAddressOfOperatorUsed +Matchers.tests.cpp:: passed: EvilMatcher() || ( EvilMatcher() && !EvilMatcher() ) +Matchers.tests.cpp:: passed: ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher() +CmdLine.tests.cpp:: passed: spec.hasFilters() == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.hasFilters() == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *tcA ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcB ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcC ) == false for: false == false +CmdLine.tests.cpp:: passed: spec.matches( *tcD ) == true for: true == true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark" ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( " aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( "aardvark " ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches( *fakeTestCase( "aardvark" ) ) for: true +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false +CmdLine.tests.cpp:: passed: !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false +CmdLine.tests.cpp:: passed: spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true +TestSpecParser.tests.cpp:: passed: spec.hasFilters() for: true +TestSpecParser.tests.cpp:: passed: spec.getInvalidSpecs().empty() for: true +TestSpecParser.tests.cpp:: passed: spec.matches( testCase ) for: true +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--shard-count=8" }) for: {?} +CmdLine.tests.cpp:: passed: config.shardCount == 8 for: 8 == 8 +CmdLine.tests.cpp:: passed: !(result) for: !{?} +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number" +CmdLine.tests.cpp:: passed: !(result) for: !{?} +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number" +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--shard-index=2" }) for: {?} +CmdLine.tests.cpp:: passed: config.shardIndex == 2 for: 2 == 2 +CmdLine.tests.cpp:: passed: !(result) for: !{?} +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Shard index must be a non-negative number") for: "Shard index must be a non-negative number" contains: "Shard index must be a non-negative number" +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--shard-index=0" }) for: {?} +CmdLine.tests.cpp:: passed: config.shardIndex == 0 for: 0 == 0 +TestSpecParser.tests.cpp:: passed: spec.hasFilters() for: true with 1 message: 'tagString := "[tag with spaces]"' +TestSpecParser.tests.cpp:: passed: spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[tag with spaces]"' +TestSpecParser.tests.cpp:: passed: spec.matches( testCase ) for: true with 1 message: 'tagString := "[tag with spaces]"' +TestSpecParser.tests.cpp:: passed: spec.hasFilters() for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +TestSpecParser.tests.cpp:: passed: spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +TestSpecParser.tests.cpp:: passed: spec.matches( testCase ) for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +CmdLine.tests.cpp:: passed: cli.parse( { "test", "-w", "NoAssertions" } ) for: {?} +CmdLine.tests.cpp:: passed: config.warnings == WarnAbout::NoAssertions for: 1 == 1 +CmdLine.tests.cpp:: passed: !(cli.parse( { "test", "-w", "NoTests" } )) for: !{?} +CmdLine.tests.cpp:: passed: cli.parse( { "test", "--warn", "NoAssertions", "--warn", "UnmatchedTestSpec" } ) for: {?} +CmdLine.tests.cpp:: passed: config.warnings == ( WarnAbout::NoAssertions | WarnAbout::UnmatchedTestSpec ) for: 3 == 3 +Condition.tests.cpp:: passed: p == 0 for: 0 == 0 +Condition.tests.cpp:: passed: p == pNULL for: 0 == 0 +Condition.tests.cpp:: passed: p != 0 for: 0x != 0 +Condition.tests.cpp:: passed: cp != 0 for: 0x != 0 +Condition.tests.cpp:: passed: cpc != 0 for: 0x != 0 +Condition.tests.cpp:: passed: returnsNull() == 0 for: {null string} == 0 +Condition.tests.cpp:: passed: returnsConstNull() == 0 for: {null string} == 0 +Condition.tests.cpp:: passed: 0 != p for: 0 != 0x +ToStringGeneral.tests.cpp:: passed: str1.size() == 3 + 5 for: 8 == 8 +ToStringGeneral.tests.cpp:: passed: str2.size() == 3 + 10 for: 13 == 13 +ToStringGeneral.tests.cpp:: passed: str1.size() == 2 + 5 for: 7 == 7 +ToStringGeneral.tests.cpp:: passed: str2.size() == 2 + 15 for: 17 == 17 +Matchers.tests.cpp:: passed: "foo", Predicate( []( const char* const& ) { return true; } ) for: "foo" matches undescribed predicate +CmdLine.tests.cpp:: passed: result for: {?} +CmdLine.tests.cpp:: passed: config.processName == "" for: "" == "" +CmdLine.tests.cpp:: passed: result for: {?} +CmdLine.tests.cpp:: passed: config.processName == "test" for: "test" == "test" +CmdLine.tests.cpp:: passed: config.shouldDebugBreak == false for: false == false +CmdLine.tests.cpp:: passed: config.abortAfter == -1 for: -1 == -1 +CmdLine.tests.cpp:: passed: config.noThrow == false for: false == false +CmdLine.tests.cpp:: passed: config.reporterSpecifications == std::vector{ {"console", {}} } for: { { console, } } +== +{ { console, } } +CmdLine.tests.cpp:: passed: !(cfg.hasTestFilters()) for: !false +CmdLine.tests.cpp:: passed: result for: {?} +CmdLine.tests.cpp:: passed: cfg.hasTestFilters() for: true +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("notIncluded")) == false for: false == false +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("test1")) for: true +CmdLine.tests.cpp:: passed: result for: {?} +CmdLine.tests.cpp:: passed: cfg.hasTestFilters() for: true +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("test1")) == false for: false == false +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true +CmdLine.tests.cpp:: passed: result for: {?} +CmdLine.tests.cpp:: passed: cfg.hasTestFilters() for: true +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("test1")) == false for: false == false +CmdLine.tests.cpp:: passed: cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } for: { { console, } } +== +{ { console, } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } for: { { xml, } } +== +{ { xml, } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } for: { { junit, } } +== +{ { junit, } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Unrecognized reporter") for: "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } for: { { console, out.txt } } +== +{ { console, out.txt } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: result for: {?} with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } for: { { console, C:\Temp\out.txt } } +== +{ { console, C:\Temp\out.txt } } with 1 message: 'result.errorMessage() := ""' +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("empty filename") for: "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename" +CmdLine.tests.cpp:: passed: cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) for: {?} +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } for: { { xml, output.xml }, { junit, output-junit.xml } } +== +{ { xml, output.xml }, { junit, output-junit.xml } } +CmdLine.tests.cpp:: passed: cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) for: {?} +CmdLine.tests.cpp:: passed: config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } for: { { xml, output.xml }, { console, } } +== +{ { xml, output.xml }, { console, } } +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") for: "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." +CmdLine.tests.cpp:: passed: cli.parse({"test", "-b"}) for: {?} +CmdLine.tests.cpp:: passed: config.shouldDebugBreak == true for: true == true +CmdLine.tests.cpp:: passed: cli.parse({"test", "--break"}) for: {?} +CmdLine.tests.cpp:: passed: config.shouldDebugBreak for: true +CmdLine.tests.cpp:: passed: cli.parse({"test", "-a"}) for: {?} +CmdLine.tests.cpp:: passed: config.abortAfter == 1 for: 1 == 1 +CmdLine.tests.cpp:: passed: cli.parse({"test", "-x", "2"}) for: {?} +CmdLine.tests.cpp:: passed: config.abortAfter == 2 for: 2 == 2 +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("convert") && ContainsSubstring("oops") for: "Unable to convert 'oops' to destination type" ( contains: "convert" and contains: "oops" ) +CmdLine.tests.cpp:: passed: cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +CmdLine.tests.cpp:: passed: config.waitForKeypress == std::get<1>(input) for: 0 == 0 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +CmdLine.tests.cpp:: passed: config.waitForKeypress == std::get<1>(input) for: 1 == 1 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +CmdLine.tests.cpp:: passed: config.waitForKeypress == std::get<1>(input) for: 2 == 2 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +CmdLine.tests.cpp:: passed: config.waitForKeypress == std::get<1>(input) for: 3 == 3 +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring("never") && ContainsSubstring("both") for: "keypress argument must be one of: never, start, exit or both. 'sometimes' not recognised" ( contains: "never" and contains: "both" ) +CmdLine.tests.cpp:: passed: cli.parse({"test", "-e"}) for: {?} +CmdLine.tests.cpp:: passed: config.noThrow for: true +CmdLine.tests.cpp:: passed: cli.parse({"test", "--nothrow"}) for: {?} +CmdLine.tests.cpp:: passed: config.noThrow for: true +CmdLine.tests.cpp:: passed: cli.parse({"test", "-o", "filename.ext"}) for: {?} +CmdLine.tests.cpp:: passed: config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +CmdLine.tests.cpp:: passed: cli.parse({"test", "--out", "filename.ext"}) for: {?} +CmdLine.tests.cpp:: passed: config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +CmdLine.tests.cpp:: passed: cli.parse({"test", "-abe"}) for: {?} +CmdLine.tests.cpp:: passed: config.abortAfter == 1 for: 1 == 1 +CmdLine.tests.cpp:: passed: config.shouldDebugBreak for: true +CmdLine.tests.cpp:: passed: config.noThrow == true for: true == true +CmdLine.tests.cpp:: passed: cli.parse({"test"}) for: {?} +CmdLine.tests.cpp:: passed: config.useColour == UseColour::Auto for: 0 == 0 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--use-colour", "auto"}) for: {?} +CmdLine.tests.cpp:: passed: config.useColour == UseColour::Auto for: 0 == 0 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--use-colour", "yes"}) for: {?} +CmdLine.tests.cpp:: passed: config.useColour == UseColour::Yes for: 1 == 1 +CmdLine.tests.cpp:: passed: cli.parse({"test", "--use-colour", "no"}) for: {?} +CmdLine.tests.cpp:: passed: config.useColour == UseColour::No for: 2 == 2 +CmdLine.tests.cpp:: passed: !result for: true +CmdLine.tests.cpp:: passed: result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of" +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--benchmark-samples=200" }) for: {?} +CmdLine.tests.cpp:: passed: config.benchmarkSamples == 200 for: 200 == 200 +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?} +CmdLine.tests.cpp:: passed: config.benchmarkResamples == 20000 for: 20000 (0x) == 20000 (0x) +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?} +CmdLine.tests.cpp:: passed: config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 ) +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--benchmark-no-analysis" }) for: {?} +CmdLine.tests.cpp:: passed: config.benchmarkNoAnalysis for: true +CmdLine.tests.cpp:: passed: cli.parse({ "test", "--benchmark-warmup-time=10" }) for: {?} +CmdLine.tests.cpp:: passed: config.benchmarkWarmupTime == 10 for: 10 == 10 +Misc.tests.cpp:: passed: std::tuple_size::value >= 1 for: 3 >= 1 +Misc.tests.cpp:: passed: std::tuple_size::value >= 1 for: 2 >= 1 +Misc.tests.cpp:: passed: std::tuple_size::value >= 1 for: 1 >= 1 +RandomNumberGeneration.tests.cpp:: passed: Catch::generateRandomSeed(method) +RandomNumberGeneration.tests.cpp:: passed: Catch::generateRandomSeed(method) +RandomNumberGeneration.tests.cpp:: passed: Catch::generateRandomSeed(method) +RandomNumberGeneration.tests.cpp:: passed: Catch::generateRandomSeed(static_cast(77)) +ToString.tests.cpp:: passed: Catch::Detail::stringify(UsesSentinel{}) == "{ }" for: "{ }" == "{ }" +Decomposition.tests.cpp:: failed: truthy(false) for: Hey, its truthy! +Matchers.tests.cpp:: failed: testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively +Matchers.tests.cpp:: failed: testStringForMatching(), Matches( "contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively +Matchers.tests.cpp:: failed: testStringForMatching(), Matches( "this string contains 'abc' as a" ) for: "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively +Matchers.tests.cpp:: passed: actual, !UnorderedEquals( expected ) for: { 'a', 'b' } not UnorderedEquals: { 'c', 'b' } +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: Automake' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: Automake' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: Automake' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: compact' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: compact' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: compact' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: console' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: console' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: console' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: " +All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: JUnit' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: " +Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: JUnit' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " +All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: JUnit' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: " +All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: SonarQube' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: " +Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: SonarQube' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " +All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: SonarQube' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: TAP' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: TAP' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TAP' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" with 1 message: 'Tested reporter: TeamCity' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: TeamCity' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TeamCity' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fakeTag"s) for: " + + + 1 + + fakeTag + + +" contains: "fakeTag" with 1 message: 'Tested reporter: XML' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: " + + + fake reporter + fake description + +" contains: "fake reporter" with 1 message: 'Tested reporter: XML' +Reporters.tests.cpp:: passed: !(factories.empty()) for: !false +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " + + + fake test name + + [fakeTestTag] + + fake-file.cpp + 123456789 + + +" ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: XML' +Reporters.tests.cpp:: passed: +Message.tests.cpp:: passed: with 1 message: 'this is a success' +Message.tests.cpp:: passed: +BDD.tests.cpp:: passed: before == 0 for: 0 == 0 +BDD.tests.cpp:: passed: after > before for: 1 > 0 +BDD.tests.cpp:: passed: itDoesThis() for: true +BDD.tests.cpp:: passed: itDoesThat() for: true +BDD.tests.cpp:: passed: with 1 message: 'boo!' +BDD.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +BDD.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +BDD.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +BDD.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +BDD.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +BDD.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +BDD.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +BDD.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Approx.tests.cpp:: passed: d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 ) +Approx.tests.cpp:: passed: d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 ) +Approx.tests.cpp:: passed: d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 ) +Approx.tests.cpp:: passed: d == 1.23_a for: 1.23 == Approx( 1.23 ) +Approx.tests.cpp:: passed: d != 1.22_a for: 1.23 != Approx( 1.22 ) +Approx.tests.cpp:: passed: Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23 +Approx.tests.cpp:: passed: Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22 +Approx.tests.cpp:: passed: Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24 +Matchers.tests.cpp:: failed: testStringForMatching(), StartsWith( "This String" ) for: "this string contains 'abc' as a substring" starts with: "This String" +Matchers.tests.cpp:: failed: testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" starts with: "string" (case insensitive) +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify(singular) == "{ 1 }" for: "{ 1 }" == "{ 1 }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify(arr) == "{ 3, 2, 1 }" for: "{ 3, 2, 1 }" == "{ 3, 2, 1 }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify(arr) == R"({ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } })" for: "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" +== +"{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "string" ) for: "this string contains 'abc' as a substring" contains: "string" +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "string", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "string" (case insensitive) +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "abc" ) for: "this string contains 'abc' as a substring" contains: "abc" +Matchers.tests.cpp:: passed: testStringForMatching(), ContainsSubstring( "aBC", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "abc" (case insensitive) +Matchers.tests.cpp:: passed: testStringForMatching(), StartsWith( "this" ) for: "this string contains 'abc' as a substring" starts with: "this" +Matchers.tests.cpp:: passed: testStringForMatching(), StartsWith( "THIS", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" starts with: "this" (case insensitive) +Matchers.tests.cpp:: passed: testStringForMatching(), EndsWith( "substring" ) for: "this string contains 'abc' as a substring" ends with: "substring" +Matchers.tests.cpp:: passed: testStringForMatching(), EndsWith( " SuBsTrInG", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: " substring" (case insensitive) +String.tests.cpp:: passed: empty.empty() for: true +String.tests.cpp:: passed: empty.size() == 0 for: 0 == 0 +String.tests.cpp:: passed: std::strcmp( empty.data(), "" ) == 0 for: 0 == 0 +String.tests.cpp:: passed: s.empty() == false for: false == false +String.tests.cpp:: passed: s.size() == 5 for: 5 == 5 +String.tests.cpp:: passed: std::strcmp( rawChars, "hello" ) == 0 for: 0 == 0 +String.tests.cpp:: passed: s.data() == rawChars for: "hello" == "hello" +String.tests.cpp:: passed: original == "original" +String.tests.cpp:: passed: original.data() +String.tests.cpp:: passed: original.begin() == copy.begin() for: "original string" == "original string" +String.tests.cpp:: passed: original.begin() == copy.begin() for: "original string" == "original string" +String.tests.cpp:: passed: ss.empty() == false for: false == false +String.tests.cpp:: passed: ss.size() == 5 for: 5 == 5 +String.tests.cpp:: passed: std::strncmp( ss.data(), "hello", 5 ) == 0 for: 0 == 0 +String.tests.cpp:: passed: ss == "hello" for: hello == "hello" +String.tests.cpp:: passed: ss.size() == 6 for: 6 == 6 +String.tests.cpp:: passed: std::strcmp( ss.data(), "world!" ) == 0 for: 0 == 0 +String.tests.cpp:: passed: s.data() == s2.data() for: "hello world!" == "hello world!" +String.tests.cpp:: passed: s.data() == ss.data() for: "hello world!" == "hello world!" +String.tests.cpp:: passed: s.substr(s.size() + 1, 123).empty() for: true +String.tests.cpp:: passed: std::strcmp(ss.data(), "world!") == 0 for: 0 == 0 +String.tests.cpp:: passed: s.substr(1'000'000, 1).empty() for: true +String.tests.cpp:: passed: reinterpret_cast(buffer1) != reinterpret_cast(buffer2) for: "Hello" != "Hello" +String.tests.cpp:: passed: left == right for: Hello == Hello +String.tests.cpp:: passed: left != left.substr(0, 3) for: Hello != Hel +String.tests.cpp:: passed: sr == "a standard string" for: a standard string == "a standard string" +String.tests.cpp:: passed: sr.size() == stdStr.size() for: 17 == 17 +String.tests.cpp:: passed: sr == "a standard string" for: a standard string == "a standard string" +String.tests.cpp:: passed: sr.size() == stdStr.size() for: 17 == 17 +String.tests.cpp:: passed: sr == "a standard string" for: a standard string == "a standard string" +String.tests.cpp:: passed: sr.size() == stdStr.size() for: 17 == 17 +String.tests.cpp:: passed: stdStr == "a stringref" for: "a stringref" == "a stringref" +String.tests.cpp:: passed: stdStr.size() == sr.size() for: 11 == 11 +String.tests.cpp:: passed: stdStr == "a stringref" for: "a stringref" == "a stringref" +String.tests.cpp:: passed: stdStr.size() == sr.size() for: 11 == 11 +String.tests.cpp:: passed: lhs == "some string += the stringref contents" for: "some string += the stringref contents" +== +"some string += the stringref contents" +String.tests.cpp:: passed: together == "abrakadabra" for: "abrakadabra" == "abrakadabra" +String.tests.cpp:: passed: with 1 message: 'empty.size() == 0' +String.tests.cpp:: passed: with 1 message: 'empty.begin() == empty.end()' +String.tests.cpp:: passed: with 1 message: 'stringref.size() == 3' +String.tests.cpp:: passed: with 1 message: 'stringref.data() == abc' +String.tests.cpp:: passed: with 1 message: 'stringref.begin() == abc' +String.tests.cpp:: passed: with 1 message: 'stringref.begin() != stringref.end()' +String.tests.cpp:: passed: with 1 message: 'stringref.substr(10, 0).empty()' +String.tests.cpp:: passed: with 1 message: 'stringref.substr(2, 1).data() == abc + 2' +String.tests.cpp:: passed: with 1 message: 'stringref[1] == 'b'' +String.tests.cpp:: passed: with 1 message: 'shortened.size() == 2' +String.tests.cpp:: passed: with 1 message: 'shortened.data() == abc' +String.tests.cpp:: passed: with 1 message: 'shortened.begin() != shortened.end()' +String.tests.cpp:: passed: with 1 message: '!(sr1.empty())' +String.tests.cpp:: passed: with 1 message: 'sr1.size() == 3' +String.tests.cpp:: passed: with 1 message: 'sr2.empty()' +String.tests.cpp:: passed: with 1 message: 'sr2.size() == 0' +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToString.tests.cpp:: passed: ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +ToStringChrono.tests.cpp:: passed: minute == seconds for: 1 m == 60 s +ToStringChrono.tests.cpp:: passed: hour != seconds for: 1 h != 60 s +ToStringChrono.tests.cpp:: passed: micro != milli for: 1 us != 1 ms +ToStringChrono.tests.cpp:: passed: nano != micro for: 1 ns != 1 us +ToStringChrono.tests.cpp:: passed: half_minute != femto_second for: 1 [30/1]s != 1 fs +ToStringChrono.tests.cpp:: passed: pico_second != atto_second for: 1 ps != 1 as +ToStringChrono.tests.cpp:: passed: now != later for: {iso8601-timestamp} +!= +{iso8601-timestamp} +Misc.tests.cpp:: failed: s1 == s2 for: "if ($b == 10) { + $a = 20; +}" +== +"if ($b == 10) { + $a = 20; +} +" +Tag.tests.cpp:: passed: what, ContainsSubstring( "[@zzz]" ) for: "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "[@zzz]" +Tag.tests.cpp:: passed: what, ContainsSubstring( "file" ) for: "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "file" +Tag.tests.cpp:: passed: what, ContainsSubstring( "2" ) for: "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "2" +Tag.tests.cpp:: passed: what, ContainsSubstring( "10" ) for: "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "10" +Tag.tests.cpp:: passed: registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) +Tag.tests.cpp:: passed: registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) +Tag.tests.cpp:: passed: registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) +Tag.tests.cpp:: passed: registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) +Tag.tests.cpp:: passed: testCase.tags.size() == 2 for: 2 == 2 +Tag.tests.cpp:: passed: testCase.tags, VectorContains( Tag( "tag with spaces" ) ) && VectorContains( Tag( "I said \"good day\" sir!"_catch_sr ) ) for: { {?}, {?} } ( Contains: {?} and Contains: {?} ) +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1 == 1 +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1 == 1 +Class.tests.cpp:: passed: Template_Fixture::m_a == 1 for: 1.0 == 1 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 1 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 4 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 1 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 4 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 4 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 1 > 0 +Misc.tests.cpp:: passed: sizeof(TestType) > 0 for: 4 > 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.size() == 2 * V for: 12 == 12 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 12 >= 12 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 12 >= 12 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.size() == V for: 6 == 6 +Misc.tests.cpp:: passed: v.capacity() >= V for: 6 >= 6 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.size() == 2 * V for: 8 == 8 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 8 >= 8 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 8 >= 8 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.size() == V for: 4 == 4 +Misc.tests.cpp:: passed: v.capacity() >= V for: 4 >= 4 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 2 * V for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == V for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= V for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Misc.tests.cpp:: passed: v.size() == 2 * V for: 30 == 30 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 30 >= 30 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= 2 * V for: 30 >= 30 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Misc.tests.cpp:: passed: v.size() == V for: 15 == 15 +Misc.tests.cpp:: passed: v.capacity() >= V for: 15 >= 15 +Tag.tests.cpp:: passed: testCase.tags.size() == 1 for: 1 == 1 +Tag.tests.cpp:: passed: testCase.tags[0] == Tag( "tag1" ) for: {?} == {?} +VariadicMacros.tests.cpp:: passed: with 1 message: 'no assertions' +Tricky.tests.cpp:: passed: 0x == bit30and31 for: 3221225472 (0x) == 3221225472 +CmdLine.tests.cpp:: passed: +Misc.tests.cpp:: passed: true +Misc.tests.cpp:: passed: +Misc.tests.cpp:: failed - but was ok: false +Misc.tests.cpp:: passed: true +Misc.tests.cpp:: failed - but was ok: false +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: true +Misc.tests.cpp:: failed: explicitly +Misc.tests.cpp:: failed - but was ok: false +Misc.tests.cpp:: failed: explicitly +Message.tests.cpp:: failed - but was ok: 1 == 2 +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("[fakeTag]"s) for: "All available tags: + 1 [fakeTag] +1 tag + +" contains: "[fakeTag]" +Reporters.tests.cpp:: passed: listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +Reporters.tests.cpp:: passed: listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +Misc.tests.cpp:: passed: with 1 message: 'oops!' +Exception.tests.cpp:: failed: unexpected exception with message: 'For some reason someone is throwing a string literal!' +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: testCase.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isComplete() for: true +PartTracker.tests.cpp:: passed: s1.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: testCase.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isOpen() for: true +PartTracker.tests.cpp:: passed: s1b.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: testCase.isComplete() for: true +PartTracker.tests.cpp:: passed: testCase.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isComplete() for: true +PartTracker.tests.cpp:: passed: s1.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: testCase.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isOpen() for: true +PartTracker.tests.cpp:: passed: s1b.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: s2.isOpen() for: true +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: testCase.isComplete() for: true +PartTracker.tests.cpp:: passed: testCase.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s2.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isOpen() for: true +PartTracker.tests.cpp:: passed: s1b.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: s2b.isOpen() for: true +PartTracker.tests.cpp:: passed: ctx.completedCycle() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: s2b.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase2.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s2.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isOpen() for: true +PartTracker.tests.cpp:: passed: s1b.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: s2b.isOpen() for: true +PartTracker.tests.cpp:: passed: ctx.completedCycle() == false for: false == false +PartTracker.tests.cpp:: passed: ctx.completedCycle() for: true +PartTracker.tests.cpp:: passed: s2b.isComplete() for: true +PartTracker.tests.cpp:: passed: s2b.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase2.isSuccessfullyCompleted() == false for: false == false +PartTracker.tests.cpp:: passed: testCase3.isOpen() for: true +PartTracker.tests.cpp:: passed: s1c.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: s2c.isOpen() == false for: false == false +PartTracker.tests.cpp:: passed: testCase3.isSuccessfullyCompleted() for: true +PartTracker.tests.cpp:: passed: testCase.isOpen() for: true +PartTracker.tests.cpp:: passed: s1.isOpen() for: true +PartTracker.tests.cpp:: passed: s2.isOpen() for: true +PartTracker.tests.cpp:: passed: s2.isComplete() for: true +PartTracker.tests.cpp:: passed: s1.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: s1.isComplete() for: true +PartTracker.tests.cpp:: passed: testCase.isComplete() == false for: false == false +PartTracker.tests.cpp:: passed: testCase.isComplete() for: true +StringManip.tests.cpp:: passed: trim(std::string(no_whitespace)) == no_whitespace for: "There is no extra whitespace here" +== +"There is no extra whitespace here" +StringManip.tests.cpp:: passed: trim(std::string(leading_whitespace)) == no_whitespace for: "There is no extra whitespace here" +== +"There is no extra whitespace here" +StringManip.tests.cpp:: passed: trim(std::string(trailing_whitespace)) == no_whitespace for: "There is no extra whitespace here" +== +"There is no extra whitespace here" +StringManip.tests.cpp:: passed: trim(std::string(whitespace_at_both_ends)) == no_whitespace for: "There is no extra whitespace here" +== +"There is no extra whitespace here" +StringManip.tests.cpp:: passed: trim(StringRef(no_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here +== +There is no extra whitespace here +StringManip.tests.cpp:: passed: trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here +== +There is no extra whitespace here +StringManip.tests.cpp:: passed: trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here +== +There is no extra whitespace here +StringManip.tests.cpp:: passed: trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) for: There is no extra whitespace here +== +There is no extra whitespace here +Exception.tests.cpp:: failed: unexpected exception with message: '3.14' +UniquePtr.tests.cpp:: passed: bptr->i == 3 for: 3 == 3 +UniquePtr.tests.cpp:: passed: bptr->i == 3 for: 3 == 3 +MatchersRanges.tests.cpp:: passed: data, AllMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } all match has size == 5 +MatchersRanges.tests.cpp:: passed: data, !AllMatch(Contains(0) && Contains(1)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not all match ( contains element 0 and contains element 1 ) +MatchersRanges.tests.cpp:: passed: needs_adl, AllMatch( Predicate( []( int elem ) { return elem < 6; } ) ) for: { 1, 2, 3, 4, 5 } all match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked, allMatch for: { 1, 2, 3, 4, 5 } all match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[1] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[2] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[3] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[4] for: true +MatchersRanges.tests.cpp:: passed: mocked, !allMatch for: { 1, 2, 3, 4, 5 } not all match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[1] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[2] for: true +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[3]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[4]) for: !false +MatchersRanges.tests.cpp:: passed: data, AnyMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } any match has size == 5 +MatchersRanges.tests.cpp:: passed: data, !AnyMatch(Contains(0) && Contains(10)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not any match ( contains element 0 and contains element 10 ) +MatchersRanges.tests.cpp:: passed: needs_adl, AnyMatch( Predicate( []( int elem ) { return elem < 3; } ) ) for: { 1, 2, 3, 4, 5 } any match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked, !anyMatch for: { 1, 2, 3, 4, 5 } not any match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[1] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[2] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[3] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[4] for: true +MatchersRanges.tests.cpp:: passed: mocked, anyMatch for: { 1, 2, 3, 4, 5 } any match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[1]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[2]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[3]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[4]) for: !false +MatchersRanges.tests.cpp:: passed: data, NoneMatch(SizeIs(6)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } none match has size == 6 +MatchersRanges.tests.cpp:: passed: data, !NoneMatch(Contains(0) && Contains(1)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not none match ( contains element 0 and contains element 1 ) +MatchersRanges.tests.cpp:: passed: needs_adl, NoneMatch( Predicate( []( int elem ) { return elem > 6; } ) ) for: { 1, 2, 3, 4, 5 } none match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked, noneMatch for: { 1, 2, 3, 4, 5 } none match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[1] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[2] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[3] for: true +MatchersRanges.tests.cpp:: passed: mocked.derefed[4] for: true +MatchersRanges.tests.cpp:: passed: mocked, !noneMatch for: { 1, 2, 3, 4, 5 } not none match matches undescribed predicate +MatchersRanges.tests.cpp:: passed: mocked.derefed[0] for: true +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[1]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[2]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[3]) for: !false +MatchersRanges.tests.cpp:: passed: !(mocked.derefed[4]) for: !false +MatchersRanges.tests.cpp:: passed: empty_vec, SizeIs(0) for: { } has size == 0 +MatchersRanges.tests.cpp:: passed: empty_vec, !SizeIs(2) for: { } not has size == 2 +MatchersRanges.tests.cpp:: passed: empty_vec, SizeIs(Lt(2)) for: { } size matches is less than 2 +MatchersRanges.tests.cpp:: passed: arr, SizeIs(2) for: { 0, 0 } has size == 2 +MatchersRanges.tests.cpp:: passed: arr, SizeIs( Lt(3)) for: { 0, 0 } size matches is less than 3 +MatchersRanges.tests.cpp:: passed: arr, !SizeIs(!Lt(3)) for: { 0, 0 } not size matches not is less than 3 +MatchersRanges.tests.cpp:: passed: map, SizeIs(3) for: { {?}, {?}, {?} } has size == 3 +MatchersRanges.tests.cpp:: passed: unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12 +MatchersRanges.tests.cpp:: passed: has_size{}, SizeIs(13) for: {?} has size == 13 +Approx.tests.cpp:: passed: d == approx( 1.23 ) for: 1.23 == Approx( 1.23 ) +Approx.tests.cpp:: passed: d == approx( 1.22 ) for: 1.23 == Approx( 1.22 ) +Approx.tests.cpp:: passed: d == approx( 1.24 ) for: 1.23 == Approx( 1.24 ) +Approx.tests.cpp:: passed: d != approx( 1.25 ) for: 1.23 != Approx( 1.25 ) +Approx.tests.cpp:: passed: approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23 +Approx.tests.cpp:: passed: approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22 +Approx.tests.cpp:: passed: approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24 +Approx.tests.cpp:: passed: approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25 +VariadicMacros.tests.cpp:: passed: with 1 message: 'no assertions' +Matchers.tests.cpp:: passed: empty, Approx( empty ) for: { } is approx: { } +Matchers.tests.cpp:: passed: v1, Approx( v1 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } +Matchers.tests.cpp:: passed: v1, Approx( { 1., 2., 3. } ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } +Matchers.tests.cpp:: passed: v1, !Approx( temp ) for: { 1.0, 2.0, 3.0 } not is approx: { 1.0, 2.0, 3.0, 4.0 } +Matchers.tests.cpp:: passed: v1, !Approx( v2 ) for: { 1.0, 2.0, 3.0 } not is approx: { 1.5, 2.5, 3.5 } +Matchers.tests.cpp:: passed: v1, Approx( v2 ).margin( 0.5 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +Matchers.tests.cpp:: passed: v1, Approx( v2 ).epsilon( 0.5 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +Matchers.tests.cpp:: passed: v1, Approx( v2 ).epsilon( 0.1 ).scale( 500 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +Matchers.tests.cpp:: failed: empty, Approx( t1 ) for: { } is approx: { 1.0, 2.0 } +Matchers.tests.cpp:: failed: v1, Approx( v2 ) for: { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } +Matchers.tests.cpp:: passed: v, VectorContains( 1 ) for: { 1, 2, 3 } Contains: 1 +Matchers.tests.cpp:: passed: v, VectorContains( 2 ) for: { 1, 2, 3 } Contains: 2 +Matchers.tests.cpp:: passed: v5, ( VectorContains>( 2 ) ) for: { 1, 2, 3 } Contains: 2 +Matchers.tests.cpp:: passed: v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2 } +Matchers.tests.cpp:: passed: v, Contains( { 1, 2 } ) for: { 1, 2, 3 } Contains: { 1, 2 } +Matchers.tests.cpp:: passed: v5, ( Contains, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Contains: { 1, 2 } +Matchers.tests.cpp:: passed: v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v, Contains( empty ) for: { 1, 2, 3 } Contains: { } +Matchers.tests.cpp:: passed: empty, Contains( empty ) for: { } Contains: { } +Matchers.tests.cpp:: passed: v5, ( Contains, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Contains: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v5, Contains( v6 ) for: { 1, 2, 3 } Contains: { 1, 2 } +Matchers.tests.cpp:: passed: v, VectorContains( 1 ) && VectorContains( 2 ) for: { 1, 2, 3 } ( Contains: 1 and Contains: 2 ) +Matchers.tests.cpp:: passed: v, Equals( v ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: empty, Equals( empty ) for: { } Equals: { } +Matchers.tests.cpp:: passed: v, Equals( { 1, 2, 3 } ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v, Equals( v2 ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v5, ( Equals, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v5, Equals( v6 ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v, UnorderedEquals( v ) for: { 1, 2, 3 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v, UnorderedEquals( { 3, 2, 1 } ) for: { 1, 2, 3 } UnorderedEquals: { 3, 2, 1 } +Matchers.tests.cpp:: passed: empty, UnorderedEquals( empty ) for: { } UnorderedEquals: { } +Matchers.tests.cpp:: passed: permuted, UnorderedEquals( v ) for: { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: permuted, UnorderedEquals( v ) for: { 2, 3, 1 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: passed: v5, ( UnorderedEquals, CustomAllocator>( permuted ) ) for: { 1, 2, 3 } UnorderedEquals: { 2, 3, 1 } +Matchers.tests.cpp:: passed: v5_permuted, UnorderedEquals( v5 ) for: { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: failed: v, VectorContains( -1 ) for: { 1, 2, 3 } Contains: -1 +Matchers.tests.cpp:: failed: empty, VectorContains( 1 ) for: { } Contains: 1 +Matchers.tests.cpp:: failed: empty, Contains( v ) for: { } Contains: { 1, 2, 3 } +Matchers.tests.cpp:: failed: v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2, 4 } +Matchers.tests.cpp:: failed: v, Equals( v2 ) for: { 1, 2, 3 } Equals: { 1, 2 } +Matchers.tests.cpp:: failed: v2, Equals( v ) for: { 1, 2 } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: failed: empty, Equals( v ) for: { } Equals: { 1, 2, 3 } +Matchers.tests.cpp:: failed: v, Equals( empty ) for: { 1, 2, 3 } Equals: { } +Matchers.tests.cpp:: failed: v, UnorderedEquals( empty ) for: { 1, 2, 3 } UnorderedEquals: { } +Matchers.tests.cpp:: failed: empty, UnorderedEquals( v ) for: { } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: failed: permuted, UnorderedEquals( v ) for: { 1, 3 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp:: failed: permuted, UnorderedEquals( v ) for: { 3, 1 } UnorderedEquals: { 1, 2, 3 } +Exception.tests.cpp:: passed: thisThrows(), std::domain_error +Exception.tests.cpp:: passed: thisDoesntThrow() +Exception.tests.cpp:: passed: thisThrows() +Exception.tests.cpp:: failed: unexpected exception with message: 'unexpected exception' +Exception.tests.cpp:: failed: unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +Exception.tests.cpp:: failed: unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +Exception.tests.cpp:: failed: unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +Exception.tests.cpp:: failed: unexpected exception with message: 'unexpected exception' +Tricky.tests.cpp:: passed: +Tricky.tests.cpp:: passed: +Tricky.tests.cpp:: passed: +Tricky.tests.cpp:: passed: +Xml.tests.cpp:: passed: encode( "normal string" ) == "normal string" for: "normal string" == "normal string" +Xml.tests.cpp:: passed: encode( "" ) == "" for: "" == "" +Xml.tests.cpp:: passed: encode( "smith & jones" ) == "smith & jones" for: "smith & jones" == "smith & jones" +Xml.tests.cpp:: passed: encode( "smith < jones" ) == "smith < jones" for: "smith < jones" == "smith < jones" +Xml.tests.cpp:: passed: encode( "smith > jones" ) == "smith > jones" for: "smith > jones" == "smith > jones" +Xml.tests.cpp:: passed: encode( "smith ]]> jones" ) == "smith ]]> jones" for: "smith ]]> jones" +== +"smith ]]> jones" +Xml.tests.cpp:: passed: encode( stringWithQuotes ) == stringWithQuotes for: "don't "quote" me on that" +== +"don't "quote" me on that" +Xml.tests.cpp:: passed: encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" for: "don't "quote" me on that" +== +"don't "quote" me on that" +Xml.tests.cpp:: passed: encode( "[\x01]" ) == "[\\x01]" for: "[\x01]" == "[\x01]" +Xml.tests.cpp:: passed: encode( "[\x7F]" ) == "[\\x7F]" for: "[\x7F]" == "[\x7F]" +Xml.tests.cpp:: passed: stream.str(), ContainsSubstring(R"(attr1="true")") && ContainsSubstring(R"(attr2="false")") for: " + +" ( contains: "attr1="true"" and contains: "attr2="false"" ) +InternalBenchmark.tests.cpp:: passed: analysis.mean.point.count() == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: analysis.mean.lower_bound.count() == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: analysis.mean.upper_bound.count() == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: analysis.standard_deviation.point.count() == 0 for: 0.0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.standard_deviation.lower_bound.count() == 0 for: 0.0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.standard_deviation.upper_bound.count() == 0 for: 0.0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.total() == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.low_mild == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.low_severe == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.high_mild == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.high_severe == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outliers.samples_seen == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: analysis.outlier_variance == 0 for: 0.0 == 0 +ToStringVector.tests.cpp:: passed: Catch::Detail::stringify( empty ) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: Catch::Detail::stringify( oneValue ) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +ToStringVector.tests.cpp:: passed: Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +InternalBenchmark.tests.cpp:: passed: model.started == 1 for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: model.finished == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: model.started == 1 for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: model.finished == 1 for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: called == 1 for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: model.started == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: model.finished == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: model.started == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: model.finished == 0 for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: called == 1 for: 1 == 1 +Tricky.tests.cpp:: passed: obj.prop != 0 for: 0x != 0 +Misc.tests.cpp:: passed: flag for: true +Misc.tests.cpp:: passed: testCheckedElse( true ) for: true +Misc.tests.cpp:: failed - but was ok: flag for: false +Misc.tests.cpp:: failed: testCheckedElse( false ) for: false +Misc.tests.cpp:: passed: flag for: true +Misc.tests.cpp:: passed: testCheckedIf( true ) for: true +Misc.tests.cpp:: failed - but was ok: flag for: false +Misc.tests.cpp:: failed: testCheckedIf( false ) for: false +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.samples_seen == static_cast(x.size()) for: 6 == 6 +InternalBenchmark.tests.cpp:: passed: o.low_severe == los for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.low_mild == lom for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.high_mild == him for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: o.high_severe == his for: 0 == 0 +InternalBenchmark.tests.cpp:: passed: o.total() == los + lom + him + his for: 2 == 2 +Condition.tests.cpp:: passed: unsigned_char_var == 1 for: 1 == 1 +Condition.tests.cpp:: passed: unsigned_short_var == 1 for: 1 == 1 +Condition.tests.cpp:: passed: unsigned_int_var == 1 for: 1 == 1 +Condition.tests.cpp:: passed: unsigned_long_var == 1 for: 1 == 1 +Condition.tests.cpp:: passed: long_var == unsigned_char_var for: 1 == 1 +Condition.tests.cpp:: passed: long_var == unsigned_short_var for: 1 == 1 +Condition.tests.cpp:: passed: long_var == unsigned_int_var for: 1 == 1 +Condition.tests.cpp:: passed: long_var == unsigned_long_var for: 1 == 1 +FloatingPoint.tests.cpp:: passed: convertToBits( 0.f ) == 0 for: 0 == 0 +FloatingPoint.tests.cpp:: passed: convertToBits( -0.f ) == ( 1ULL << 31 ) for: 2147483648 (0x) +== +2147483648 (0x) +FloatingPoint.tests.cpp:: passed: convertToBits( 0. ) == 0 for: 0 == 0 +FloatingPoint.tests.cpp:: passed: convertToBits( -0. ) == ( 1ULL << 63 ) for: 9223372036854775808 (0x) +== +9223372036854775808 (0x) +FloatingPoint.tests.cpp:: passed: convertToBits( std::numeric_limits::denorm_min() ) == 1 for: 1 == 1 +FloatingPoint.tests.cpp:: passed: convertToBits( std::numeric_limits::denorm_min() ) == 1 for: 1 == 1 +Tag.tests.cpp:: passed: Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo) +InternalBenchmark.tests.cpp:: passed: erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 ) +InternalBenchmark.tests.cpp:: passed: erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 ) +InternalBenchmark.tests.cpp:: passed: erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 ) +InternalBenchmark.tests.cpp:: passed: res.mean.count() == rate for: 2000.0 == 2000 (0x) +InternalBenchmark.tests.cpp:: passed: res.outliers.total() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Clara.tests.cpp:: passed: with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +Message.tests.cpp:: failed: explicitly with 1 message: 'Previous info should not be seen' +Message.tests.cpp:: failed: explicitly with 1 message: 'previous unscoped info SHOULD not be seen' +Misc.tests.cpp:: passed: l == std::numeric_limits::max() for: 9223372036854775807 (0x) +== +9223372036854775807 (0x) +Misc.tests.cpp:: failed: b > a for: 0 > 1 +Misc.tests.cpp:: failed: b > a for: 1 > 1 +Misc.tests.cpp:: passed: b > a for: 2 > 1 +Misc.tests.cpp:: passed: b > a for: 3 > 1 +Misc.tests.cpp:: passed: b > a for: 4 > 1 +Misc.tests.cpp:: passed: b > a for: 5 > 1 +Misc.tests.cpp:: passed: b > a for: 6 > 1 +Misc.tests.cpp:: passed: b > a for: 7 > 1 +Misc.tests.cpp:: passed: b > a for: 8 > 1 +Misc.tests.cpp:: passed: b > a for: 9 > 1 +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[0] (1) is even' +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[1] (1) is even' +Misc.tests.cpp:: passed: ( fib[i] % 2 ) == 0 for: 0 == 0 with 1 message: 'Testing if fib[2] (2) is even' +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[3] (3) is even' +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[4] (5) is even' +Misc.tests.cpp:: passed: ( fib[i] % 2 ) == 0 for: 0 == 0 with 1 message: 'Testing if fib[5] (8) is even' +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[6] (13) is even' +Misc.tests.cpp:: failed: ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[7] (21) is even' +UniquePtr.tests.cpp:: passed: !(lval.has_moved) for: !false +UniquePtr.tests.cpp:: passed: rval.has_moved for: true +UniquePtr.tests.cpp:: passed: *ptr == std::tuple{1, 2., 3} for: {?} == {?} +InternalBenchmark.tests.cpp:: passed: m == 19. for: 19.0 == 19.0 +InternalBenchmark.tests.cpp:: passed: x == 17 for: 17 == 17 +InternalBenchmark.tests.cpp:: passed: x == 23 for: 23 == 23 +InternalBenchmark.tests.cpp:: passed: r.elapsed.count() == 42 for: 42 == 42 +InternalBenchmark.tests.cpp:: passed: r.result == 23 for: 23 == 23 +InternalBenchmark.tests.cpp:: passed: r.iterations == 1 for: 1 == 1 +InternalBenchmark.tests.cpp:: passed: s.elapsed.count() == 69 for: 69 == 69 +InternalBenchmark.tests.cpp:: passed: s.result == 17 for: 17 == 17 +InternalBenchmark.tests.cpp:: passed: s.iterations == 1 for: 1 == 1 +Message.tests.cpp:: warning: 'info' with 2 messages: 'unscoped info' and 'and warn may mix' +Message.tests.cpp:: warning: 'info' with 2 messages: 'unscoped info' and 'they are not cleared after warnings' +Misc.tests.cpp:: failed: a == b for: 1 == 2 +Misc.tests.cpp:: passed: a != b for: 1 != 2 +Misc.tests.cpp:: passed: a < b for: 1 < 2 +Misc.tests.cpp:: passed: a != b for: 1 != 2 +Misc.tests.cpp:: passed: b != a for: 2 != 1 +Misc.tests.cpp:: passed: a != b for: 1 != 2 +Tricky.tests.cpp:: passed: s == "7" for: "7" == "7" +Tricky.tests.cpp:: passed: ti == typeid(int) for: {?} == {?} +InternalBenchmark.tests.cpp:: passed: normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 ) +InternalBenchmark.tests.cpp:: passed: normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 ) +InternalBenchmark.tests.cpp:: passed: normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 ) +InternalBenchmark.tests.cpp:: passed: normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 ) +InternalBenchmark.tests.cpp:: passed: normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 ) +InternalBenchmark.tests.cpp:: passed: normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 ) +InternalBenchmark.tests.cpp:: passed: normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 ) +InternalBenchmark.tests.cpp:: passed: normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 ) +Misc.tests.cpp:: passed: +Message.tests.cpp:: passed: true with 1 message: 'this MAY be seen only for the FIRST assertion IF info is printed for passing assertions' +Message.tests.cpp:: passed: true with 1 message: 'this MAY be seen only for the SECOND assertion IF info is printed for passing assertions' +Message.tests.cpp:: failed: false with 1 message: 'this SHOULD be seen' +Misc.tests.cpp:: passed: makeString( false ) != static_cast(0) for: "valid string" != {null string} +Misc.tests.cpp:: passed: makeString( true ) == static_cast(0) for: {null string} == {null string} +Tricky.tests.cpp:: passed: ptr.get() == 0 for: 0 == 0 +ToStringPair.tests.cpp:: passed: ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" for: "{ { 42, "Arthur" }, { "Ford", 24 } }" +== +"{ { 42, "Arthur" }, { "Ford", 24 } }" +ToString.tests.cpp:: passed: parseEnums( "" ), Equals( std::vector{} ) for: { } Equals: { } +ToString.tests.cpp:: passed: parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +ToString.tests.cpp:: passed: parseEnums( "Value1" ), Equals( std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +ToString.tests.cpp:: passed: parseEnums( "EnumName::Value1" ), Equals(std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +ToString.tests.cpp:: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } +ToString.tests.cpp:: passed: parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +ToString.tests.cpp:: passed: parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +Tricky.tests.cpp:: passed: p == 0 for: 0 == 0 +Message.tests.cpp:: passed: true with 1 message: 'this MAY be seen IF info is printed for passing assertions' +Message.tests.cpp:: failed: false with 2 messages: 'this SHOULD be seen' and 'this SHOULD also be seen' +Message.tests.cpp:: failed: false with 1 message: 'this SHOULD be seen only ONCE' +Message.tests.cpp:: passed: true +Message.tests.cpp:: passed: true with 1 message: 'this MAY also be seen only ONCE IF info is printed for passing assertions' +Message.tests.cpp:: passed: true +Misc.tests.cpp:: passed: a != b for: 1 != 2 +Misc.tests.cpp:: passed: b != a for: 2 != 1 +Misc.tests.cpp:: passed: a != b for: 1 != 2 +StringManip.tests.cpp:: passed: Catch::replaceInPlace(letters, "b", "z") for: true +StringManip.tests.cpp:: passed: letters == "azcdefcg" for: "azcdefcg" == "azcdefcg" +StringManip.tests.cpp:: passed: Catch::replaceInPlace(letters, "c", "z") for: true +StringManip.tests.cpp:: passed: letters == "abzdefzg" for: "abzdefzg" == "abzdefzg" +StringManip.tests.cpp:: passed: Catch::replaceInPlace(letters, "a", "z") for: true +StringManip.tests.cpp:: passed: letters == "zbcdefcg" for: "zbcdefcg" == "zbcdefcg" +StringManip.tests.cpp:: passed: Catch::replaceInPlace(letters, "g", "z") for: true +StringManip.tests.cpp:: passed: letters == "abcdefcz" for: "abcdefcz" == "abcdefcz" +StringManip.tests.cpp:: passed: Catch::replaceInPlace(letters, letters, "replaced") for: true +StringManip.tests.cpp:: passed: letters == "replaced" for: "replaced" == "replaced" +StringManip.tests.cpp:: passed: !(Catch::replaceInPlace(letters, "x", "z")) for: !false +StringManip.tests.cpp:: passed: letters == letters for: "abcdefcg" == "abcdefcg" +StringManip.tests.cpp:: passed: Catch::replaceInPlace(s, "'", "|'") for: true +StringManip.tests.cpp:: passed: s == "didn|'t" for: "didn|'t" == "didn|'t" +InternalBenchmark.tests.cpp:: passed: res.size() == count for: 10 == 10 +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: res[i] == rate for: 1000.0 == 1000 (0x) +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 1 >= 1 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 2 >= 1 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 4 >= 2 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 8 >= 4 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 16 >= 8 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 32 >= 16 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 64 >= 32 +InternalBenchmark.tests.cpp:: passed: meter.runs() >= old_runs for: 128 >= 64 +InternalBenchmark.tests.cpp:: passed: Timing.elapsed >= time for: 128 ns >= 100 ns +InternalBenchmark.tests.cpp:: passed: Timing.result == Timing.iterations + 17 for: 145 == 145 +InternalBenchmark.tests.cpp:: passed: Timing.iterations >= time.count() for: 128 >= 100 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 1 >= 1 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 2 >= 1 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 4 >= 2 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 8 >= 4 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 16 >= 8 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 32 >= 16 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 64 >= 32 +InternalBenchmark.tests.cpp:: passed: x >= old_x for: 128 >= 64 +InternalBenchmark.tests.cpp:: passed: Timing.elapsed >= time for: 128 ns >= 100 ns +InternalBenchmark.tests.cpp:: passed: Timing.result == Timing.iterations + 17 for: 145 == 145 +InternalBenchmark.tests.cpp:: passed: Timing.iterations >= time.count() for: 128 >= 100 +Misc.tests.cpp:: failed: false with 1 message: '3' +Message.tests.cpp:: failed: false with 2 messages: 'hi' and 'i := 7' +Tag.tests.cpp:: passed: testcase.tags, VectorContains( Tag( "magic-tag" ) ) && VectorContains( Tag( "."_catch_sr ) ) for: { {?}, {?} } ( Contains: {?} and Contains: {?} ) +StringManip.tests.cpp:: passed: splitStringRef("", ','), Equals(std::vector()) for: { } Equals: { } +StringManip.tests.cpp:: passed: splitStringRef("abc", ','), Equals(std::vector{"abc"}) for: { abc } Equals: { abc } +StringManip.tests.cpp:: passed: splitStringRef("abc,def", ','), Equals(std::vector{"abc", "def"}) for: { abc, def } Equals: { abc, def } +Message.tests.cpp:: failed: false with 4 messages: 'Count 1 to 3...' and '1' and '2' and '3' +Message.tests.cpp:: failed: false with 4 messages: 'Count 4 to 6...' and '4' and '5' and '6' +StringManip.tests.cpp:: passed: !(startsWith("", 'c')) for: !false +StringManip.tests.cpp:: passed: startsWith(std::string("abc"), 'a') for: true +StringManip.tests.cpp:: passed: startsWith("def"_catch_sr, 'd') for: true +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( emptyMap ) == "{ }" for: "{ }" == "{ }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( map ) == "{ { \"one\", 1 } }" for: "{ { "one", 1 } }" == "{ { "one", 1 } }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( map ) == "{ { \"abc\", 1 }, { \"def\", 2 }, { \"ghi\", 3 } }" for: "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" +== +"{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" +ToStringPair.tests.cpp:: passed: ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" for: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" +ToStringPair.tests.cpp:: passed: ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" for: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( emptySet ) == "{ }" for: "{ }" == "{ }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( set ) == "{ \"one\" }" for: "{ "one" }" == "{ "one" }" +ToStringGeneral.tests.cpp:: passed: Catch::Detail::stringify( set ) == "{ \"abc\", \"def\", \"ghi\" }" for: "{ "abc", "def", "ghi" }" +== +"{ "abc", "def", "ghi" }" +ToStringPair.tests.cpp:: passed: ::Catch::Detail::stringify( pr ) == "{ { \"green\", 55 } }" for: "{ { "green", 55 } }" +== +"{ { "green", 55 } }" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify(streamable_range{}) == "op<<(streamable_range)" for: "op<<(streamable_range)" +== +"op<<(streamable_range)" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify(stringmaker_range{}) == "stringmaker(streamable_range)" for: "stringmaker(streamable_range)" +== +"stringmaker(streamable_range)" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify(just_range{}) == "{ 1, 2, 3, 4 }" for: "{ 1, 2, 3, 4 }" == "{ 1, 2, 3, 4 }" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify(disabled_range{}) == "{?}" for: "{?}" == "{?}" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( item ) == "StringMaker" for: "StringMaker" +== +"StringMaker" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( item ) == "StringMaker" for: "StringMaker" +== +"StringMaker" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify(item) == "{?}" for: "{?}" == "{?}" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" for: "operator<<( has_operator )" +== +"operator<<( has_operator )" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( item ) == "operator<<( has_template_operator )" for: "operator<<( has_template_operator )" +== +"operator<<( has_template_operator )" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( v ) == "{ StringMaker }" for: "{ StringMaker }" +== +"{ StringMaker }" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( v ) == "{ StringMaker }" for: "{ StringMaker }" +== +"{ StringMaker }" +ToStringWhich.tests.cpp:: passed: ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" for: "{ operator<<( has_operator ) }" +== +"{ operator<<( has_operator ) }" +Generators.tests.cpp:: passed: data.str.size() == data.len for: 3 == 3 +Generators.tests.cpp:: passed: data.str.size() == data.len for: 3 == 3 +Generators.tests.cpp:: passed: data.str.size() == data.len for: 5 == 5 +Generators.tests.cpp:: passed: data.str.size() == data.len for: 4 == 4 +Generators.tests.cpp:: passed: strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 5 == 5 +Generators.tests.cpp:: passed: strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 6 == 6 +Generators.tests.cpp:: passed: strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 5 == 5 +Generators.tests.cpp:: passed: strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 6 == 6 +Tag.tests.cpp:: passed: testcase.tags.size() == 1 for: 1 == 1 +Tag.tests.cpp:: passed: testcase.tags[0].original == "magic.tag"_catch_sr for: magic.tag == magic.tag +Exception.tests.cpp:: failed: unexpected exception with message: 'Why would you throw a std::string?' +Misc.tests.cpp:: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" +Misc.tests.cpp:: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" +Misc.tests.cpp:: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" +Misc.tests.cpp:: passed: result == "\"wide load\"" for: ""wide load"" == ""wide load"" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e0) == "E2/V0" for: "E2/V0" == "E2/V0" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e1) == "E2/V1" for: "E2/V1" == "E2/V1" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e3) == "Unknown enum value 10" for: "Unknown enum value 10" +== +"Unknown enum value 10" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e0) == "0" for: "0" == "0" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e1) == "1" for: "1" == "1" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e0) == "E2{0}" for: "E2{0}" == "E2{0}" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e1) == "E2{1}" for: "E2{1}" == "E2{1}" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e0) == "0" for: "0" == "0" +EnumToString.tests.cpp:: passed: ::Catch::Detail::stringify(e1) == "1" for: "1" == "1" +ToStringTuple.tests.cpp:: passed: "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{ }" +ToStringTuple.tests.cpp:: passed: "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }" +ToStringTuple.tests.cpp:: passed: "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f" +ToStringTuple.tests.cpp:: passed: "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }" +ToStringTuple.tests.cpp:: passed: "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }" +ToStringTuple.tests.cpp:: passed: "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) for: "{ 0, 42, "Catch me" }" +== +"{ 0, 42, "Catch me" }" +ToStringTuple.tests.cpp:: passed: "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }" +== +"{ "hello", "world" }" +ToStringTuple.tests.cpp:: passed: "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }" +== +"{ { 42 }, { }, 1.2f }" +InternalBenchmark.tests.cpp:: passed: e.point == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: e.upper_bound == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: e.lower_bound == 23 for: 23.0 == 23 +InternalBenchmark.tests.cpp:: passed: e.confidence_interval == 0.95 for: 0.95 == 0.95 +UniquePtr.tests.cpp:: passed: !(ptr) for: !{?} +UniquePtr.tests.cpp:: passed: ptr.get() == 0 for: 0 == 0 +UniquePtr.tests.cpp:: passed: ptr for: {?} +UniquePtr.tests.cpp:: passed: *ptr == 0 for: 0 == 0 +UniquePtr.tests.cpp:: passed: ptr.get() == naked_ptr for: 0x == 0x +UniquePtr.tests.cpp:: passed: !(ptr) for: !{?} +UniquePtr.tests.cpp:: passed: ptr.get() == 0 for: 0 == 0 +UniquePtr.tests.cpp:: passed: ptr for: {?} +UniquePtr.tests.cpp:: passed: *ptr == 0 for: 0 == 0 +UniquePtr.tests.cpp:: passed: ptr.get() == naked_ptr for: 0x == 0x +UniquePtr.tests.cpp:: passed: ptr for: {?} +UniquePtr.tests.cpp:: passed: ptr.get() != 0 for: 0x != 0 +UniquePtr.tests.cpp:: passed: *ptr == 2 for: 2 == 2 +UniquePtr.tests.cpp:: passed: !(ptr) for: !{?} +UniquePtr.tests.cpp:: passed: ptr.get() == 0 for: 0 == 0 +UniquePtr.tests.cpp:: passed: !(ptr1) for: !{?} +UniquePtr.tests.cpp:: passed: ptr2 for: {?} +UniquePtr.tests.cpp:: passed: *ptr2 == 1 for: 1 == 1 +UniquePtr.tests.cpp:: passed: !(ptr2) for: !{?} +UniquePtr.tests.cpp:: passed: ptr1 for: {?} +UniquePtr.tests.cpp:: passed: *ptr1 == 2 for: 2 == 2 +UniquePtr.tests.cpp:: passed: *ptr1 == 2 for: 2 == 2 +UniquePtr.tests.cpp:: passed: *ptr2 == 1 for: 1 == 1 +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(v) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" for: "{ { "hello" }, { "world" } }" +== +"{ { "hello" }, { "world" } }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(bools) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(bools) == "{ true }" for: "{ true }" == "{ true }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(bools) == "{ true, false }" for: "{ true, false }" == "{ true, false }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ \"hello\" }" for: "{ "hello" }" == "{ "hello" }" +ToStringVector.tests.cpp:: passed: ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" for: "{ "hello", "world" }" +== +"{ "hello", "world" }" +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 10 for: 10 == 10 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.capacity() == 0 for: 0 == 0 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 10 for: 10 >= 10 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +Misc.tests.cpp:: passed: v.size() == 5 for: 5 == 5 +Misc.tests.cpp:: passed: v.capacity() >= 5 for: 5 >= 5 +InternalBenchmark.tests.cpp:: passed: (iterations * rate) > Catch::Benchmark::Detail::warmup_time.count() for: 160000000 (0x) > 100 +InternalBenchmark.tests.cpp:: passed: (end - start) > Catch::Benchmark::Detail::warmup_time for: 310016000 ns > 100 ms +InternalBenchmark.tests.cpp:: passed: q1 == 14.5 for: 14.5 == 14.5 +InternalBenchmark.tests.cpp:: passed: med == 18. for: 18.0 == 18.0 +InternalBenchmark.tests.cpp:: passed: q3 == 23. for: 23.0 == 23.0 +Misc.tests.cpp:: passed: +Misc.tests.cpp:: passed: +Failed 83 test cases, failed 143 assertions. + diff --git a/tests/SelfTest/Baselines/console.std.approved.txt b/tests/SelfTest/Baselines/console.std.approved.txt index 51bb9e52fe..dfc8d3bdab 100644 --- a/tests/SelfTest/Baselines/console.std.approved.txt +++ b/tests/SelfTest/Baselines/console.std.approved.txt @@ -1396,5 +1396,5 @@ due to unexpected exception with message: =============================================================================== test cases: 380 | 304 passed | 69 failed | 7 failed as expected -assertions: 2183 | 2028 passed | 128 failed | 27 failed as expected +assertions: 2194 | 2039 passed | 128 failed | 27 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.approved.txt b/tests/SelfTest/Baselines/console.sw.approved.txt index a037f16f42..4b4a2ed028 100644 --- a/tests/SelfTest/Baselines/console.sw.approved.txt +++ b/tests/SelfTest/Baselines/console.sw.approved.txt @@ -9158,9 +9158,11 @@ with expansion: false == false CmdLine.tests.cpp:: PASSED: - CHECK( config.reporterName == "console" ) + CHECK( config.reporterSpecifications == std::vector{ {"console", {}} } ) with expansion: - "console" == "console" + { { console, } } + == + { { console, } } CmdLine.tests.cpp:: PASSED: CHECK_FALSE( cfg.hasTestFilters() ) @@ -9260,14 +9262,20 @@ CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: - CHECK( cli.parse({"test", "-r", "console"}) ) + CHECK( result ) with expansion: {?} +with message: + result.errorMessage() := "" CmdLine.tests.cpp:: PASSED: - REQUIRE( config.reporterName == "console" ) + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } ) with expansion: - "console" == "console" + { { console, } } + == + { { console, } } +with message: + result.errorMessage() := "" ------------------------------------------------------------------------------- Process can be configured on command line @@ -9278,14 +9286,20 @@ CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: - CHECK( cli.parse({"test", "-r", "xml"}) ) + CHECK( result ) with expansion: {?} +with message: + result.errorMessage() := "" CmdLine.tests.cpp:: PASSED: - REQUIRE( config.reporterName == "xml" ) + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } ) with expansion: - "xml" == "xml" + { { xml, } } + == + { { xml, } } +with message: + result.errorMessage() := "" ------------------------------------------------------------------------------- Process can be configured on command line @@ -9296,32 +9310,92 @@ CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: - CHECK( cli.parse({"test", "--reporter", "junit"}) ) + CHECK( result ) with expansion: {?} +with message: + result.errorMessage() := "" CmdLine.tests.cpp:: PASSED: - REQUIRE( config.reporterName == "junit" ) + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } ) with expansion: - "junit" == "junit" + { { junit, } } + == + { { junit, } } +with message: + result.errorMessage() := "" ------------------------------------------------------------------------------- Process can be configured on command line reporter - Only one reporter is accepted + must match one of the available ones ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... CmdLine.tests.cpp:: PASSED: - REQUIRE_FALSE( cli.parse({ "test", "-r", "xml", "-r", "junit" }) ) + CHECK( !result ) with expansion: - !{?} + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Unrecognized reporter") ) +with expansion: + "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" + contains: "Unrecognized reporter" ------------------------------------------------------------------------------- Process can be configured on command line reporter - must match one of the available ones + With output file +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } ) +with expansion: + { { console, out.txt } } + == + { { console, out.txt } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + With Windows-like absolute path as output file +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } ) +with expansion: + { { console, C:\Temp\out.txt } } + == + { { console, C:\Temp\out.txt } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Output file cannot be empty ------------------------------------------------------------------------------- CmdLine.tests.cpp: ............................................................................... @@ -9332,10 +9406,73 @@ with expansion: true CmdLine.tests.cpp:: PASSED: - REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Unrecognized reporter") ) + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("empty filename") ) with expansion: - "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" - contains: "Unrecognized reporter" + "Reporter 'console' has empty filename specified as its output. Supply a + filename or remove the colons to use the default output." contains: "empty + filename" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + All with output files +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } ) +with expansion: + { { xml, output.xml }, { junit, output-junit.xml } } + == + { { xml, output.xml }, { junit, output-junit.xml } } + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + Mixed output files and default output +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } ) +with expansion: + { { xml, output.xml }, { console, } } + == + { { xml, output.xml }, { console, } } + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + cannot have multiple reporters with default output +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") ) +with expansion: + "Only one reporter may have unspecified output file." contains: "Only one + reporter may have unspecified output file." ------------------------------------------------------------------------------- Process can be configured on command line @@ -9574,7 +9711,7 @@ with expansion: {?} CmdLine.tests.cpp:: PASSED: - REQUIRE( config.outputFilename == "filename.ext" ) + REQUIRE( config.defaultOutputFilename == "filename.ext" ) with expansion: "filename.ext" == "filename.ext" @@ -9592,7 +9729,7 @@ with expansion: {?} CmdLine.tests.cpp:: PASSED: - REQUIRE( config.outputFilename == "filename.ext" ) + REQUIRE( config.defaultOutputFilename == "filename.ext" ) with expansion: "filename.ext" == "filename.ext" @@ -17517,5 +17654,5 @@ Misc.tests.cpp:: PASSED: =============================================================================== test cases: 380 | 290 passed | 83 failed | 7 failed as expected -assertions: 2198 | 2028 passed | 143 failed | 27 failed as expected +assertions: 2209 | 2039 passed | 143 failed | 27 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.multi.approved.txt b/tests/SelfTest/Baselines/console.sw.multi.approved.txt new file mode 100644 index 0000000000..8c8d166f45 --- /dev/null +++ b/tests/SelfTest/Baselines/console.sw.multi.approved.txt @@ -0,0 +1,17650 @@ +Filters: ~[!nonportable]~[!benchmark]~[approvals] * + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + is a host application. +Run with -? for options + +Randomness seeded to: 1 + +------------------------------------------------------------------------------- +# A test name that starts with a # +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + yay + +------------------------------------------------------------------------------- +#1005: Comparing pointer to int and long (NULL can be either on various + systems) +------------------------------------------------------------------------------- +Decomposition.tests.cpp: +............................................................................... + +Decomposition.tests.cpp:: PASSED: + REQUIRE( fptr == 0 ) +with expansion: + 0 == 0 + +Decomposition.tests.cpp:: PASSED: + REQUIRE( fptr == 0l ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +#1027: Bitfields can be captured +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( y.v == 0 ) +with expansion: + 0 == 0 + +Compilation.tests.cpp:: PASSED: + REQUIRE( 0 == y.v ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +#1147 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 == t2 ) +with expansion: + {?} == {?} + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 != t2 ) +with expansion: + {?} != {?} + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 < t2 ) +with expansion: + {?} < {?} + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 > t2 ) +with expansion: + {?} > {?} + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 <= t2 ) +with expansion: + {?} <= {?} + +Compilation.tests.cpp:: PASSED: + REQUIRE( t1 >= t2 ) +with expansion: + {?} >= {?} + +------------------------------------------------------------------------------- +#1175 - Hidden Test +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#1238 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( std::memcmp(uarr, "123", sizeof(uarr)) == 0 ) +with expansion: + 0 == 0 +with messages: + uarr := "123" + sarr := "456" + +Compilation.tests.cpp:: PASSED: + REQUIRE( std::memcmp(sarr, "456", sizeof(sarr)) == 0 ) +with expansion: + 0 == 0 +with messages: + uarr := "123" + sarr := "456" + +------------------------------------------------------------------------------- +#1245 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#1319: Sections can have description (even if it is not saved + SectionName +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#1403 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( h1 == h2 ) +with expansion: + [1403 helper] == [1403 helper] + +------------------------------------------------------------------------------- +#1455 - INFO and WARN can start with a linebreak +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: warning: + +This info message starts with a linebreak + +This warning message starts with a linebreak + + +No assertions in test case '#1455 - INFO and WARN can start with a linebreak' + +------------------------------------------------------------------------------- +#1514: stderr/stdout is not captured in tests aborted by an exception +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: FAILED: +explicitly with message: + 1514 + +------------------------------------------------------------------------------- +#1548 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( std::is_same, TypeList>::value ) +with expansion: + true + +------------------------------------------------------------------------------- +#1905 -- test spec parser properly clears internal state between compound tests +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE( spec.matches(*fakeTestCase("spec . char")) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE( spec.matches(*fakeTestCase("spec , char")) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_FALSE( spec.matches(*fakeTestCase(R"(spec \, char)")) ) +with expansion: + !false + +------------------------------------------------------------------------------- +#1912 -- test spec parser handles escaping + Various parentheses +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE( spec.matches(*fakeTestCase(R"(spec {a} char)")) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE( spec.matches(*fakeTestCase(R"(spec [a] char)")) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_FALSE( spec.matches(*fakeTestCase("differs but has similar tag", "[a]")) ) +with expansion: + !false + +------------------------------------------------------------------------------- +#1912 -- test spec parser handles escaping + backslash in test name +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE( spec.matches(*fakeTestCase(R"(spec \ char)")) ) +with expansion: + true + +------------------------------------------------------------------------------- +#1913 - GENERATE inside a for loop should not keep recreating the generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( counter < 7 ) +with expansion: + 3 < 7 + +------------------------------------------------------------------------------- +#1913 - GENERATE inside a for loop should not keep recreating the generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( counter < 7 ) +with expansion: + 6 < 7 + +------------------------------------------------------------------------------- +#1913 - GENERATEs can share a line +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i != j ) +with expansion: + 1 != 3 + +------------------------------------------------------------------------------- +#1913 - GENERATEs can share a line +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i != j ) +with expansion: + 1 != 4 + +------------------------------------------------------------------------------- +#1913 - GENERATEs can share a line +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i != j ) +with expansion: + 2 != 3 + +------------------------------------------------------------------------------- +#1913 - GENERATEs can share a line +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i != j ) +with expansion: + 2 != 4 + +------------------------------------------------------------------------------- +#1938 - GENERATE after a section + A +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + A + +------------------------------------------------------------------------------- +#1938 - GENERATE after a section + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 1 + +------------------------------------------------------------------------------- +#1938 - GENERATE after a section + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - GENERATE after a section + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1938 - Section followed by flat generate + A +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( 1 ) + +------------------------------------------------------------------------------- +#1938 - Section followed by flat generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - Section followed by flat generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1938 - flat generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 1 + +------------------------------------------------------------------------------- +#1938 - flat generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - flat generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + A +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + A + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 1 + j := 3 + k := 5 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + B + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 1 + j := 3 + k := 6 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + B + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 1 + j := 4 + k := 5 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 1 + j := 4 + k := 6 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + A +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + A + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 2 + j := 3 + k := 5 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + B + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 2 + j := 3 + k := 6 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates + B +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with message: + B + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 2 + j := 4 + k := 5 + +------------------------------------------------------------------------------- +#1938 - mixed sections and generates +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: +with messages: + i := 2 + j := 4 + k := 6 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 1 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 1 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 1 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 1 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 1 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 2 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 1 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 2 + +------------------------------------------------------------------------------- +#1938 - nested generate +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( m ) +with expansion: + 3 + +PartTracker.tests.cpp:: PASSED: + REQUIRE( n ) +with expansion: + 3 + +------------------------------------------------------------------------------- +#1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +#2152 - ULP checks between differently signed values were wrong - double +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) ) +with expansion: + 0.0 is within 2 ULPs of -4.9406564584124654e-324 ([-1.4821969375237396e-323, + 4.9406564584124654e-324]) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) ) +with expansion: + 0.0 not is within 1 ULPs of -4.9406564584124654e-324 ([-9.8813129168249309e- + 324, -0.0000000000000000e+00]) + +------------------------------------------------------------------------------- +#2152 - ULP checks between differently signed values were wrong - float +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) ) +with expansion: + 0.0f is within 2 ULPs of -1.40129846e-45f ([-4.20389539e-45, 1.40129846e-45]) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) ) +with expansion: + 0.0f not is within 1 ULPs of -1.40129846e-45f ([-2.80259693e-45, -0. + 00000000e+00]) + +------------------------------------------------------------------------------- +#748 - captures with unexpected exceptions + outside assertions +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with messages: + answer := 42 + expected exception + +------------------------------------------------------------------------------- +#748 - captures with unexpected exceptions + inside REQUIRE_NOTHROW +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + REQUIRE_NOTHROW( thisThrows() ) +due to unexpected exception with messages: + answer := 42 + expected exception + +------------------------------------------------------------------------------- +#748 - captures with unexpected exceptions + inside REQUIRE_THROWS +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS( thisThrows() ) +with message: + answer := 42 + +------------------------------------------------------------------------------- +#809 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( 42 == f ) +with expansion: + 42 == {?} + +------------------------------------------------------------------------------- +#833 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( a == t ) +with expansion: + 3 == 3 + +Compilation.tests.cpp:: PASSED: + CHECK( a == t ) +with expansion: + 3 == 3 + +Compilation.tests.cpp:: PASSED: + REQUIRE_THROWS( throws_int(true) ) + +Compilation.tests.cpp:: PASSED: + CHECK_THROWS_AS( throws_int(true), int ) + +Compilation.tests.cpp:: PASSED: + REQUIRE_NOTHROW( throws_int(false) ) + +Compilation.tests.cpp:: PASSED: + REQUIRE_THAT( "aaa", Catch::Matchers::EndsWith("aaa") ) +with expansion: + "aaa" ends with: "aaa" + +Compilation.tests.cpp:: PASSED: + REQUIRE( templated_tests(3) ) +with expansion: + true + +------------------------------------------------------------------------------- +#835 -- errno should not be touched by Catch +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + CHECK( f() == 0 ) +with expansion: + 1 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( errno == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +#872 +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( x == 4 ) +with expansion: + {?} == 4 +with message: + dummy := 0 + +------------------------------------------------------------------------------- +#961 -- Dynamically created sections should all be reported + Looped section 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + Everything is OK + +------------------------------------------------------------------------------- +#961 -- Dynamically created sections should all be reported + Looped section 1 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + Everything is OK + +------------------------------------------------------------------------------- +#961 -- Dynamically created sections should all be reported + Looped section 2 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + Everything is OK + +------------------------------------------------------------------------------- +#961 -- Dynamically created sections should all be reported + Looped section 3 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + Everything is OK + +------------------------------------------------------------------------------- +#961 -- Dynamically created sections should all be reported + Looped section 4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + Everything is OK + +------------------------------------------------------------------------------- +'Not' checks that should fail +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + CHECK( false != false ) + +Condition.tests.cpp:: FAILED: + CHECK( true != true ) + +Condition.tests.cpp:: FAILED: + CHECK( !true ) +with expansion: + false + +Condition.tests.cpp:: FAILED: + CHECK_FALSE( true ) +with expansion: + !true + +Condition.tests.cpp:: FAILED: + CHECK( !trueValue ) +with expansion: + false + +Condition.tests.cpp:: FAILED: + CHECK_FALSE( trueValue ) +with expansion: + !true + +Condition.tests.cpp:: FAILED: + CHECK( !(1 == 1) ) +with expansion: + false + +Condition.tests.cpp:: FAILED: + CHECK_FALSE( 1 == 1 ) + +------------------------------------------------------------------------------- +'Not' checks that should succeed +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( false == false ) + +Condition.tests.cpp:: PASSED: + REQUIRE( true == true ) + +Condition.tests.cpp:: PASSED: + REQUIRE( !false ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + REQUIRE_FALSE( false ) +with expansion: + !false + +Condition.tests.cpp:: PASSED: + REQUIRE( !falseValue ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + REQUIRE_FALSE( falseValue ) +with expansion: + !false + +Condition.tests.cpp:: PASSED: + REQUIRE( !(1 == 2) ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + REQUIRE_FALSE( 1 == 2 ) + +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + compare to true +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( is_true::value == true ) +with expansion: + true == true + +Tricky.tests.cpp:: PASSED: + REQUIRE( true == is_true::value ) +with expansion: + true == true + +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + compare to false +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( is_true::value == false ) +with expansion: + false == false + +Tricky.tests.cpp:: PASSED: + REQUIRE( false == is_true::value ) +with expansion: + false == false + +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + negation +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( !is_true::value ) +with expansion: + true + +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + double negation +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( !!is_true::value ) +with expansion: + true + +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + direct +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( is_true::value ) +with expansion: + true + +Tricky.tests.cpp:: PASSED: + REQUIRE_FALSE( is_true::value ) +with expansion: + !false + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 1 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 1 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 2 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 2 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 4 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 4 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 5 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 5 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 9 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 7 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 7 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 8 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 8 + +------------------------------------------------------------------------------- +3x3x3 ints +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + CHECK( x < y ) +with expansion: + 3 < 6 + +Generators.tests.cpp:: PASSED: + CHECK( y < z ) +with expansion: + 6 < 9 + +Generators.tests.cpp:: PASSED: + REQUIRE( x < z ) +with expansion: + 3 < 9 + +------------------------------------------------------------------------------- +A METHOD_AS_TEST_CASE based test run that fails +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( s == "world" ) +with expansion: + "hello" == "world" + +------------------------------------------------------------------------------- +A METHOD_AS_TEST_CASE based test run that succeeds +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( s == "hello" ) +with expansion: + "hello" == "hello" + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2::m_a.size() == 1 ) +with expansion: + 0 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2::m_a.size() == 1 ) +with expansion: + 0 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2::m_a.size() == 1 ) +with expansion: + 0 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2::m_a.size() == 1 ) +with expansion: + 0 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2::m_a.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2::m_a.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2::m_a.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2::m_a.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - +Template_Foo_2 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2{}.m_a.size() < 2 ) +with expansion: + 6 < 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - +Template_Foo_2 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2{}.m_a.size() < 2 ) +with expansion: + 2 < 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2{}.m_a.size() < 2 ) +with expansion: + 6 < 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array + +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture_2{}.m_a.size() < 2 ) +with expansion: + 2 < 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - +Template_Foo_2 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2{}.m_a.size() >= 2 ) +with expansion: + 6 >= 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - +Template_Foo_2 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2{}.m_a.size() >= 2 ) +with expansion: + 2 >= 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std:: +array +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2{}.m_a.size() >= 2 ) +with expansion: + 6 >= 2 + +------------------------------------------------------------------------------- +A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std:: +array +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture_2{}.m_a.size() >= 2 ) +with expansion: + 2 >= 2 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that fails - double +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture::m_a == 2 ) +with expansion: + 1.0 == 2 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that fails - float +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture::m_a == 2 ) +with expansion: + 1.0f == 2 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that fails - int +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Template_Fixture::m_a == 2 ) +with expansion: + 1 == 2 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1.0 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1.0f == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Nttp_Fixture::value == 0 ) +with expansion: + 1 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Nttp_Fixture::value == 0 ) +with expansion: + 3 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( Nttp_Fixture::value == 0 ) +with expansion: + 6 == 0 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Nttp_Fixture::value > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Nttp_Fixture::value > 0 ) +with expansion: + 3 > 0 + +------------------------------------------------------------------------------- +A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Nttp_Fixture::value > 0 ) +with expansion: + 6 > 0 + +------------------------------------------------------------------------------- +A TEST_CASE_METHOD based test run that fails +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: FAILED: + REQUIRE( m_a == 2 ) +with expansion: + 1 == 2 + +------------------------------------------------------------------------------- +A TEST_CASE_METHOD based test run that succeeds +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( m_a == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +A Template product test case - Foo +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A Template product test case - Foo +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A Template product test case - std::vector +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A Template product test case - std::vector +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +A Template product test case with array signature - Bar +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() > 0 ) +with expansion: + 42 > 0 + +------------------------------------------------------------------------------- +A Template product test case with array signature - Bar +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() > 0 ) +with expansion: + 9 > 0 + +------------------------------------------------------------------------------- +A Template product test case with array signature - std::array +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() > 0 ) +with expansion: + 42 > 0 + +------------------------------------------------------------------------------- +A Template product test case with array signature - std::array +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( x.size() > 0 ) +with expansion: + 9 > 0 + +------------------------------------------------------------------------------- +A comparison that uses literals instead of the normal constructor +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d == 1.23_a ) +with expansion: + 1.23 == Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != 1.22_a ) +with expansion: + 1.23 != Approx( 1.22 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( -d == -1.23_a ) +with expansion: + -1.23 == Approx( -1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == 1.2_a .epsilon(.1) ) +with expansion: + 1.23 == Approx( 1.2 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != 1.2_a .epsilon(.001) ) +with expansion: + 1.23 != Approx( 1.2 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == 1_a .epsilon(.3) ) +with expansion: + 1.23 == Approx( 1.0 ) + +------------------------------------------------------------------------------- +A couple of nested sections followed by a failure + Outer + Inner +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + that's not flying - that's failing in style + +------------------------------------------------------------------------------- +A couple of nested sections followed by a failure +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: +explicitly with message: + to infinity and beyond + +------------------------------------------------------------------------------- +A failing expression with a non streamable type is still captured +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: FAILED: + CHECK( &o1 == &o2 ) +with expansion: + 0x == 0x + +Tricky.tests.cpp:: FAILED: + CHECK( o1 == o2 ) +with expansion: + {?} == {?} + +------------------------------------------------------------------------------- +Absolute margin +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 104.0 != Approx(100.0) ) +with expansion: + 104.0 != Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 104.0 == Approx(100.0).margin(5) ) +with expansion: + 104.0 == Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 104.0 == Approx(100.0).margin(4) ) +with expansion: + 104.0 == Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 104.0 != Approx(100.0).margin(3) ) +with expansion: + 104.0 != Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 100.3 != Approx(100.0) ) +with expansion: + 100.3 != Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 100.3 == Approx(100.0).margin(0.5) ) +with expansion: + 100.3 == Approx( 100.0 ) + +------------------------------------------------------------------------------- +An empty test with no assertions +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + + +No assertions in test case 'An empty test with no assertions' + +------------------------------------------------------------------------------- +An expression with side-effects should only be evaluated once +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( i++ == 7 ) +with expansion: + 7 == 7 + +Tricky.tests.cpp:: PASSED: + REQUIRE( i++ == 8 ) +with expansion: + 8 == 8 + +------------------------------------------------------------------------------- +An unchecked exception reports the line of the last assertion +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + CHECK( 1 == 1 ) + +Exception.tests.cpp:: FAILED: + {Unknown expression after the reported line} +due to unexpected exception with message: + unexpected exception + +------------------------------------------------------------------------------- +Anonymous test case 1 +------------------------------------------------------------------------------- +VariadicMacros.tests.cpp: +............................................................................... + +VariadicMacros.tests.cpp:: PASSED: +with message: + anonymous test case + +------------------------------------------------------------------------------- +Approx setters validate their arguments +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Approx(0).margin(0) ) + +Approx.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Approx(0).margin(1234656) ) + +Approx.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( Approx(0).margin(-2), std::domain_error ) + +Approx.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Approx(0).epsilon(0) ) + +Approx.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Approx(0).epsilon(1) ) + +Approx.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( Approx(0).epsilon(-0.001), std::domain_error ) + +Approx.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( Approx(0).epsilon(1.0001), std::domain_error ) + +------------------------------------------------------------------------------- +Approx with exactly-representable margin +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + CHECK( 0.25f == Approx(0.0f).margin(0.25f) ) +with expansion: + 0.25f == Approx( 0.0 ) + +Approx.tests.cpp:: PASSED: + CHECK( 0.0f == Approx(0.25f).margin(0.25f) ) +with expansion: + 0.0f == Approx( 0.25 ) + +Approx.tests.cpp:: PASSED: + CHECK( 0.5f == Approx(0.25f).margin(0.25f) ) +with expansion: + 0.5f == Approx( 0.25 ) + +Approx.tests.cpp:: PASSED: + CHECK( 245.0f == Approx(245.25f).margin(0.25f) ) +with expansion: + 245.0f == Approx( 245.25 ) + +Approx.tests.cpp:: PASSED: + CHECK( 245.5f == Approx(245.25f).margin(0.25f) ) +with expansion: + 245.5f == Approx( 245.25 ) + +------------------------------------------------------------------------------- +Approximate PI +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ) +with expansion: + 3.1428571429 == Approx( 3.141 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ) +with expansion: + 3.1428571429 != Approx( 3.141 ) + +------------------------------------------------------------------------------- +Approximate comparisons with different epsilons +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d != Approx( 1.231 ) ) +with expansion: + 1.23 != Approx( 1.231 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ) +with expansion: + 1.23 == Approx( 1.231 ) + +------------------------------------------------------------------------------- +Approximate comparisons with floats +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 1.23f == Approx( 1.23f ) ) +with expansion: + 1.23f == Approx( 1.2300000191 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 0.0f == Approx( 0.0f ) ) +with expansion: + 0.0f == Approx( 0.0 ) + +------------------------------------------------------------------------------- +Approximate comparisons with ints +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 1 == Approx( 1 ) ) +with expansion: + 1 == Approx( 1.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 0 == Approx( 0 ) ) +with expansion: + 0 == Approx( 0.0 ) + +------------------------------------------------------------------------------- +Approximate comparisons with mixed numeric types +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 1.0f == Approx( 1 ) ) +with expansion: + 1.0f == Approx( 1.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 0 == Approx( dZero) ) +with expansion: + 0 == Approx( 0.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 0 == Approx( dSmall ).margin( 0.001 ) ) +with expansion: + 0 == Approx( 0.00001 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( 1.234f == Approx( dMedium ) ) +with expansion: + 1.234f == Approx( 1.234 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( dMedium == Approx( 1.234f ) ) +with expansion: + 1.234 == Approx( 1.2339999676 ) + +------------------------------------------------------------------------------- +Arbitrary predicate matcher + Function pointer +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, Predicate( alwaysTrue, "always true" ) ) +with expansion: + 1 matches predicate: "always true" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, !Predicate( alwaysFalse, "always false" ) ) +with expansion: + 1 not matches predicate: "always false" + +------------------------------------------------------------------------------- +Arbitrary predicate matcher + Lambdas + different type +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( "Hello olleH", Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) ) +with expansion: + "Hello olleH" matches predicate: "First and last character should be equal" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( "This wouldn't pass", !Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); } ) ) +with expansion: + "This wouldn't pass" not matches undescribed predicate + +------------------------------------------------------------------------------- +Assertion macros support bit operators and bool conversions +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( lhs | rhs ) +with expansion: + Val: 1 | Val: 2 + +Compilation.tests.cpp:: PASSED: + REQUIRE_FALSE( lhs & rhs ) +with expansion: + !(Val: 1 & Val: 2) + +Compilation.tests.cpp:: PASSED: + REQUIRE( HasBitOperators{ 1 } & HasBitOperators{ 1 } ) +with expansion: + Val: 1 & Val: 1 + +Compilation.tests.cpp:: PASSED: + REQUIRE( lhs ^ rhs ) +with expansion: + Val: 1 ^ Val: 2 + +Compilation.tests.cpp:: PASSED: + REQUIRE_FALSE( lhs ^ lhs ) +with expansion: + !(Val: 1 ^ Val: 1) + +------------------------------------------------------------------------------- +Assertions then sections +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Assertions then sections + A section +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Assertions then sections + A section + Another section +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Assertions then sections +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Assertions then sections + A section +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Assertions then sections + A section + Another other section +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Different argument ranges, same element type, default comparison +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( a, Contains(1) ) +with expansion: + { 1, 2, 3 } contains element 1 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( b, Contains(1) ) +with expansion: + { 0, 1, 2 } contains element 1 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( c, !Contains(1) ) +with expansion: + { 4, 5, 6 } not contains element 1 + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Different argument ranges, same element type, custom comparison +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( a, Contains(0, close_enough) ) +with expansion: + { 1, 2, 3 } contains element 0 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( b, Contains(0, close_enough) ) +with expansion: + { 0, 1, 2 } contains element 0 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( c, !Contains(0, close_enough) ) +with expansion: + { 4, 5, 6 } not contains element 0 + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Different element type, custom comparisons +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( a, Contains(4, [](auto&& lhs, size_t sz) { return lhs.size() == sz; }) ) +with expansion: + { "abc", "abcd", "abcde" } contains element 4 + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Can handle type that requires ADL-found free function begin and end +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( in, Contains(1) ) +with expansion: + { 1, 2, 3, 4, 5 } contains element 1 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( in, !Contains(8) ) +with expansion: + { 1, 2, 3, 4, 5 } not contains element 8 + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Initialization with move only types +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( in, Contains(MoveOnlyTestElement{ 2 }) ) +with expansion: + { 1, 2, 3 } contains element 2 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( in, !Contains(MoveOnlyTestElement{ 9 }) ) +with expansion: + { 1, 2, 3 } not contains element 9 + +------------------------------------------------------------------------------- +Basic use of the Contains range matcher + Matching using matcher +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( in, Contains(Catch::Matchers::WithinAbs(0.5, 0.5)) ) +with expansion: + { 1.0, 2.0, 3.0, 0.0 } contains element matching is within 0.5 of 0.5 + +------------------------------------------------------------------------------- +Basic use of the Empty range matcher + Simple, std-provided containers +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( empty_array, IsEmpty() ) +with expansion: + { } is empty + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( non_empty_array, !IsEmpty() ) +with expansion: + { 0.0 } not is empty + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( empty_vec, IsEmpty() ) +with expansion: + { } is empty + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( non_empty_vec, !IsEmpty() ) +with expansion: + { 'a', 'b', 'c' } not is empty + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( inner_lists_are_empty, !IsEmpty() ) +with expansion: + { { } } not is empty + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( inner_lists_are_empty.front(), IsEmpty() ) +with expansion: + { } is empty + +------------------------------------------------------------------------------- +Basic use of the Empty range matcher + Type with empty +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( has_empty{}, !IsEmpty() ) +with expansion: + {?} not is empty + +------------------------------------------------------------------------------- +Basic use of the Empty range matcher + Type requires ADL found empty free function +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( unrelated::ADL_empty{}, IsEmpty() ) +with expansion: + {?} is empty + +------------------------------------------------------------------------------- +CAPTURE can deal with complex expressions +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: +with messages: + a := 1 + b := 2 + c := 3 + a + b := 3 + a+b := 3 + c > b := true + a == 1 := true + +------------------------------------------------------------------------------- +CAPTURE can deal with complex expressions involving commas +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: +with messages: + std::vector{1, 2, 3}[0, 1, 2] := 3 + std::vector{1, 2, 3}[(0, 1)] := 2 + std::vector{1, 2, 3}[0] := 1 + (helper_1436{12, -12}) := { 12, -12 } + (helper_1436(-12, 12)) := { -12, 12 } + (1, 2) := 2 + (2, 3) := 3 + +------------------------------------------------------------------------------- +CAPTURE parses string and character constants +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: +with messages: + ("comma, in string", "escaped, \", ") := "escaped, ", " + "single quote in string,'," := "single quote in string,'," + "some escapes, \\,\\\\" := "some escapes, \,\\" + "some, ), unmatched, } prenheses {[<" := "some, ), unmatched, } prenheses {[ + <" + '"' := '"' + '\'' := ''' + ',' := ',' + '}' := '}' + ')' := ')' + '(' := '(' + '{' := '{' + +------------------------------------------------------------------------------- +Capture and info messages + Capture should stringify like assertions +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( true ) +with message: + i := 2 + +------------------------------------------------------------------------------- +Capture and info messages + Info should NOT stringify the way assertions do +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( true ) +with message: + 3 + +------------------------------------------------------------------------------- +CaseInsensitiveEqualsTo is case insensitive + Degenerate cases +------------------------------------------------------------------------------- +Details.tests.cpp: +............................................................................... + +Details.tests.cpp:: PASSED: + REQUIRE( eq( "", "" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE_FALSE( eq( "", "a" ) ) +with expansion: + !false + +------------------------------------------------------------------------------- +CaseInsensitiveEqualsTo is case insensitive + Plain comparisons +------------------------------------------------------------------------------- +Details.tests.cpp: +............................................................................... + +Details.tests.cpp:: PASSED: + REQUIRE( eq( "a", "a" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( eq( "a", "A" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( eq( "A", "a" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( eq( "A", "A" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE_FALSE( eq( "a", "b" ) ) +with expansion: + !false + +Details.tests.cpp:: PASSED: + REQUIRE_FALSE( eq( "a", "B" ) ) +with expansion: + !false + +------------------------------------------------------------------------------- +CaseInsensitiveLess is case insensitive + Degenerate cases +------------------------------------------------------------------------------- +Details.tests.cpp: +............................................................................... + +Details.tests.cpp:: PASSED: + REQUIRE( lt( "", "a" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE_FALSE( lt( "a", "a" ) ) +with expansion: + !false + +Details.tests.cpp:: PASSED: + REQUIRE_FALSE( lt( "", "" ) ) +with expansion: + !false + +------------------------------------------------------------------------------- +CaseInsensitiveLess is case insensitive + Plain comparisons +------------------------------------------------------------------------------- +Details.tests.cpp: +............................................................................... + +Details.tests.cpp:: PASSED: + REQUIRE( lt( "a", "b" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( lt( "a", "B" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( lt( "A", "b" ) ) +with expansion: + true + +Details.tests.cpp:: PASSED: + REQUIRE( lt( "A", "B" ) ) +with expansion: + true + +------------------------------------------------------------------------------- +Character pretty printing + Specifically escaped +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( tab == '\t' ) +with expansion: + '\t' == '\t' + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( newline == '\n' ) +with expansion: + '\n' == '\n' + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( carr_return == '\r' ) +with expansion: + '\r' == '\r' + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( form_feed == '\f' ) +with expansion: + '\f' == '\f' + +------------------------------------------------------------------------------- +Character pretty printing + General chars +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( space == ' ' ) +with expansion: + ' ' == ' ' + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == chars[i] ) +with expansion: + 'a' == 'a' + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == chars[i] ) +with expansion: + 'z' == 'z' + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == chars[i] ) +with expansion: + 'A' == 'A' + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == chars[i] ) +with expansion: + 'Z' == 'Z' + +------------------------------------------------------------------------------- +Character pretty printing + Low ASCII +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( null_terminator == '\0' ) +with expansion: + 0 == 0 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == i ) +with expansion: + 2 == 2 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == i ) +with expansion: + 3 == 3 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == i ) +with expansion: + 4 == 4 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( c == i ) +with expansion: + 5 == 5 + +------------------------------------------------------------------------------- +Clara::Arg supports single-arg parse the way Opt does +------------------------------------------------------------------------------- +Clara.tests.cpp: +............................................................................... + +Clara.tests.cpp:: PASSED: + CHECK( name.empty() ) +with expansion: + true + +Clara.tests.cpp:: PASSED: + REQUIRE( name == "foo" ) +with expansion: + "foo" == "foo" + +------------------------------------------------------------------------------- +Clara::Opt supports accept-many lambdas + Parsing fails on multiple options without accept_many +------------------------------------------------------------------------------- +Clara.tests.cpp: +............................................................................... + +Clara.tests.cpp:: PASSED: + CHECK_FALSE( parse_result ) +with expansion: + !{?} + +------------------------------------------------------------------------------- +Clara::Opt supports accept-many lambdas + Parsing succeeds on multiple options with accept_many +------------------------------------------------------------------------------- +Clara.tests.cpp: +............................................................................... + +Clara.tests.cpp:: PASSED: + CHECK( parse_result ) +with expansion: + {?} + +Clara.tests.cpp:: PASSED: + CHECK( res == std::vector{ "aaa", "bbb" } ) +with expansion: + { "aaa", "bbb" } == { "aaa", "bbb" } + +------------------------------------------------------------------------------- +Combining MatchAllOfGeneric does not nest +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( ( MatcherA() && MatcherB() ) && MatcherC() ), Catch:: + Matchers::Detail:: MatchAllOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, ( MatcherA() && MatcherB() ) && MatcherC() ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) + 1 ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( MatcherA() && ( MatcherB() && MatcherC() ) ), Catch:: + Matchers::Detail:: MatchAllOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, MatcherA() && ( MatcherB() && MatcherC() ) ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) + 1 ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( ( MatcherA() && MatcherB() ) && ( MatcherC() && + MatcherD() ) ), Catch::Matchers::Detail:: MatchAllOfGeneric>:: value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) + 1 and equals: true ) + +------------------------------------------------------------------------------- +Combining MatchAnyOfGeneric does not nest +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( ( MatcherA() || MatcherB() ) || MatcherC() ), Catch:: + Matchers::Detail:: MatchAnyOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, ( MatcherA() || MatcherB() ) || MatcherC() ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 + ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( MatcherA() || ( MatcherB() || MatcherC() ) ), Catch:: + Matchers::Detail:: MatchAnyOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, MatcherA() || ( MatcherB() || MatcherC() ) ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 + ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( ( MatcherA() || MatcherB() ) || ( MatcherC() || + MatcherD() ) ), Catch::Matchers::Detail:: MatchAnyOfGeneric>:: value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 + or equals: true ) + +------------------------------------------------------------------------------- +Combining MatchNotOfGeneric does not nest +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( !MatcherA() ), Catch::Matchers::Detail:: + MatchNotOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0, !MatcherA() ) +with expansion: + 0 not equals: (int) 1 or (float) 1.0f + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, !!MatcherA() ) +with expansion: + 1 equals: (int) 1 or (float) 1.0f + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( !!!MatcherA() ), Catch::Matchers::Detail:: + MatchNotOfGeneric>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0, !!!MatcherA() ) +with expansion: + 0 not equals: (int) 1 or (float) 1.0f + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, !!!!MatcherA() ) +with expansion: + 1 equals: (int) 1 or (float) 1.0f + +------------------------------------------------------------------------------- +Combining concrete matchers does not use templated matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same>::value + +------------------------------------------------------------------------------- +Combining only templated matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, MatcherA() || MatcherB() ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, MatcherA() && MatcherB() ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 ) + +Matchers.tests.cpp:: PASSED: +with message: + std::is_same< decltype( MatcherA() || !MatcherB() ), Catch::Matchers::Detail: + :MatchAnyOfGeneric< MatcherA, Catch::Matchers::Detail::MatchNotOfGeneric + >>::value + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1, MatcherA() || !MatcherB() ) +with expansion: + 1 ( equals: (int) 1 or (float) 1.0f or not equals: (long long) 1 ) + +------------------------------------------------------------------------------- +Combining templated and concrete matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( vec, Predicate>( []( auto const& v ) { return std::all_of( v.begin(), v.end(), []( int elem ) { return elem % 2 == 1; } ); }, "All elements are odd" ) && !EqualsRange( a ) ) +with expansion: + { 1, 3, 5 } ( matches predicate: "All elements are odd" and not Equals: { 5, + 3, 1 } ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, StartsWith( "foo" ) && EqualsRange( arr ) && EndsWith( "bar" ) ) +with expansion: + "foobar" ( starts with: "foo" and Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } + and ends with: "bar" ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, StartsWith( "foo" ) && !EqualsRange( bad_arr ) && EndsWith( "bar" ) ) +with expansion: + "foobar" ( starts with: "foo" and not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' + } and ends with: "bar" ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, EqualsRange( arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) ) +with expansion: + "foobar" ( Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and starts with: "foo" + and ends with: "bar" ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, !EqualsRange( bad_arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) ) +with expansion: + "foobar" ( not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and starts with: + "foo" and ends with: "bar" ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, EqualsRange( bad_arr ) || ( StartsWith( "foo" ) && EndsWith( "bar" ) ) ) +with expansion: + "foobar" ( Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } or ( starts with: "foo" + and ends with: "bar" ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( str, ( StartsWith( "foo" ) && EndsWith( "bar" ) ) || EqualsRange( bad_arr ) ) +with expansion: + "foobar" ( ( starts with: "foo" and ends with: "bar" ) or Equals: { 'o', 'o', + 'f', 'b', 'a', 'r' } ) + +------------------------------------------------------------------------------- +Combining templated matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( container, EqualsRange( a ) || EqualsRange( b ) || EqualsRange( c ) ) +with expansion: + { 1, 2, 3 } ( Equals: { 1, 2, 3 } or Equals: { 0, 1, 2 } or Equals: { 4, 5, 6 + } ) + +------------------------------------------------------------------------------- +Commas in various macros are allowed +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE_THROWS( std::vector{constructor_throws{}, constructor_throws{}} ) + +Tricky.tests.cpp:: PASSED: + CHECK_THROWS( std::vector{constructor_throws{}, constructor_throws{}} ) + +Tricky.tests.cpp:: PASSED: + REQUIRE_NOTHROW( std::vector{1, 2, 3} == std::vector{1, 2, 3} ) + +Tricky.tests.cpp:: PASSED: + CHECK_NOTHROW( std::vector{1, 2, 3} == std::vector{1, 2, 3} ) + +Tricky.tests.cpp:: PASSED: + REQUIRE( std::vector{1, 2} == std::vector{1, 2} ) +with expansion: + { 1, 2 } == { 1, 2 } + +Tricky.tests.cpp:: PASSED: + CHECK( std::vector{1, 2} == std::vector{1, 2} ) +with expansion: + { 1, 2 } == { 1, 2 } + +Tricky.tests.cpp:: PASSED: + REQUIRE_FALSE( std::vector{1, 2} == std::vector{1, 2, 3} ) +with expansion: + !({ 1, 2 } == { 1, 2, 3 }) + +Tricky.tests.cpp:: PASSED: + CHECK_FALSE( std::vector{1, 2} == std::vector{1, 2, 3} ) +with expansion: + !({ 1, 2 } == { 1, 2, 3 }) + +Tricky.tests.cpp:: PASSED: + CHECK_NOFAIL( std::vector{1, 2} == std::vector{1, 2} ) +with expansion: + { 1, 2 } == { 1, 2 } + +Tricky.tests.cpp:: PASSED: + CHECKED_IF( std::vector{1, 2} == std::vector{1, 2} ) +with expansion: + { 1, 2 } == { 1, 2 } + +Tricky.tests.cpp:: PASSED: + REQUIRE( true ) + +Tricky.tests.cpp:: PASSED: + CHECKED_ELSE( std::vector{1, 2} == std::vector{1, 2} ) +with expansion: + { 1, 2 } == { 1, 2 } + +------------------------------------------------------------------------------- +Comparing function pointers +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( a ) +with expansion: + 0x + +Tricky.tests.cpp:: PASSED: + REQUIRE( a == &foo ) +with expansion: + 0x == 0x + +------------------------------------------------------------------------------- +Comparison ops +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( SimplePcg32{} == SimplePcg32{} ) +with expansion: + {?} == {?} + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( SimplePcg32{ 0 } != SimplePcg32{} ) +with expansion: + {?} != {?} + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_FALSE( SimplePcg32{ 1 } == SimplePcg32{ 2 } ) +with expansion: + !({?} == {?}) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_FALSE( SimplePcg32{ 1 } != SimplePcg32{ 1 } ) +with expansion: + !({?} != {?}) + +------------------------------------------------------------------------------- +Comparison with explicitly convertible types +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( td == Approx(10.0) ) +with expansion: + StrongDoubleTypedef(10) == Approx( 10.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(10.0) == td ) +with expansion: + Approx( 10.0 ) == StrongDoubleTypedef(10) + +Approx.tests.cpp:: PASSED: + REQUIRE( td != Approx(11.0) ) +with expansion: + StrongDoubleTypedef(10) != Approx( 11.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(11.0) != td ) +with expansion: + Approx( 11.0 ) != StrongDoubleTypedef(10) + +Approx.tests.cpp:: PASSED: + REQUIRE( td <= Approx(10.0) ) +with expansion: + StrongDoubleTypedef(10) <= Approx( 10.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( td <= Approx(11.0) ) +with expansion: + StrongDoubleTypedef(10) <= Approx( 11.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(10.0) <= td ) +with expansion: + Approx( 10.0 ) <= StrongDoubleTypedef(10) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(9.0) <= td ) +with expansion: + Approx( 9.0 ) <= StrongDoubleTypedef(10) + +Approx.tests.cpp:: PASSED: + REQUIRE( td >= Approx(9.0) ) +with expansion: + StrongDoubleTypedef(10) >= Approx( 9.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( td >= Approx(td) ) +with expansion: + StrongDoubleTypedef(10) >= Approx( 10.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(td) >= td ) +with expansion: + Approx( 10.0 ) >= StrongDoubleTypedef(10) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx(11.0) >= td ) +with expansion: + Approx( 11.0 ) >= StrongDoubleTypedef(10) + +------------------------------------------------------------------------------- +Comparisons between ints where one side is computed +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + CHECK( 54 == 6*9 ) +with expansion: + 54 == 54 + +------------------------------------------------------------------------------- +Comparisons between unsigned ints and negative signed ints match c++ standard +behaviour +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + CHECK( ( -1 > 2u ) ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + CHECK( -1 > 2u ) +with expansion: + -1 > 2 + +Condition.tests.cpp:: PASSED: + CHECK( ( 2u < -1 ) ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + CHECK( 2u < -1 ) +with expansion: + 2 < -1 + +Condition.tests.cpp:: PASSED: + CHECK( ( minInt > 2u ) ) +with expansion: + true + +Condition.tests.cpp:: PASSED: + CHECK( minInt > 2u ) +with expansion: + -2147483648 > 2 + +------------------------------------------------------------------------------- +Comparisons with int literals don't warn when mixing signed/ unsigned +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( i == 1 ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( ui == 2 ) +with expansion: + 2 == 2 + +Condition.tests.cpp:: PASSED: + REQUIRE( l == 3 ) +with expansion: + 3 == 3 + +Condition.tests.cpp:: PASSED: + REQUIRE( ul == 4 ) +with expansion: + 4 == 4 + +Condition.tests.cpp:: PASSED: + REQUIRE( c == 5 ) +with expansion: + 5 == 5 + +Condition.tests.cpp:: PASSED: + REQUIRE( uc == 6 ) +with expansion: + 6 == 6 + +Condition.tests.cpp:: PASSED: + REQUIRE( 1 == i ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( 2 == ui ) +with expansion: + 2 == 2 + +Condition.tests.cpp:: PASSED: + REQUIRE( 3 == l ) +with expansion: + 3 == 3 + +Condition.tests.cpp:: PASSED: + REQUIRE( 4 == ul ) +with expansion: + 4 == 4 + +Condition.tests.cpp:: PASSED: + REQUIRE( 5 == c ) +with expansion: + 5 == 5 + +Condition.tests.cpp:: PASSED: + REQUIRE( 6 == uc ) +with expansion: + 6 == 6 + +Condition.tests.cpp:: PASSED: + REQUIRE( (std::numeric_limits::max)() > ul ) +with expansion: + 4294967295 (0x) > 4 + +------------------------------------------------------------------------------- +Composed generic matchers shortcircuit + MatchAllOf +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_FALSE( matcher.match( 1 ) ) +with expansion: + !false + +Matchers.tests.cpp:: PASSED: + REQUIRE( first.matchCalled ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( !second.matchCalled ) +with expansion: + true + +------------------------------------------------------------------------------- +Composed generic matchers shortcircuit + MatchAnyOf +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK( matcher.match( 1 ) ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( first.matchCalled ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( !second.matchCalled ) +with expansion: + true + +------------------------------------------------------------------------------- +Composed matchers shortcircuit + MatchAllOf +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_FALSE( matcher.match( 1 ) ) +with expansion: + !false + +Matchers.tests.cpp:: PASSED: + REQUIRE( first.matchCalled ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( !second.matchCalled ) +with expansion: + true + +------------------------------------------------------------------------------- +Composed matchers shortcircuit + MatchAnyOf +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK( matcher.match( 1 ) ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( first.matchCalled ) +with expansion: + true + +Matchers.tests.cpp:: PASSED: + REQUIRE( !second.matchCalled ) +with expansion: + true + +------------------------------------------------------------------------------- +Contains string matcher +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "not there" (case + insensitive) + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "STRING" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "STRING" + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + from var and iterators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + From a temporary container +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( elem % 2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Copy and then generate a range + Final validation +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( call_count == 1 ) +with expansion: + 1 == 1 + +Generators.tests.cpp:: PASSED: + REQUIRE( make_data().size() == test_count ) +with expansion: + 6 == 6 + +------------------------------------------------------------------------------- +Custom exceptions can be translated when testing for nothrow +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + REQUIRE_NOTHROW( throwCustom() ) +due to unexpected exception with message: + custom exception - not std + +------------------------------------------------------------------------------- +Custom exceptions can be translated when testing for throwing as something else +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + REQUIRE_THROWS_AS( throwCustom(), std::exception ) +due to unexpected exception with message: + custom exception - not std + +------------------------------------------------------------------------------- +Custom std-exceptions can be custom translated +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + custom std exception + +------------------------------------------------------------------------------- +Default scale is invisible to comparison +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 101.000001 != Approx(100).epsilon(0.01) ) +with expansion: + 101.000001 != Approx( 100.0 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( std::pow(10, -5) != Approx(std::pow(10, -7)) ) +with expansion: + 0.00001 != Approx( 0.0000001 ) + +------------------------------------------------------------------------------- +Directly creating an EnumInfo +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK( enumInfo->lookup(0) == "Value1" ) +with expansion: + Value1 == "Value1" + +ToString.tests.cpp:: PASSED: + CHECK( enumInfo->lookup(1) == "Value2" ) +with expansion: + Value2 == "Value2" + +ToString.tests.cpp:: PASSED: + CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" ) +with expansion: + {** unexpected enum value **} + == + "{** unexpected enum value **}" + +------------------------------------------------------------------------------- +Empty tag is not allowed +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE_THROWS( Catch::TestCaseInfo( "", { "fake test name", "[]" }, dummySourceLineInfo ) ) + +------------------------------------------------------------------------------- +EndsWith string matcher +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "Substring" + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "this" (case + insensitive) + +------------------------------------------------------------------------------- +Enums can quickly have stringification enabled using REGISTER_ENUM +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( EnumClass3::Value1 ) == "Value1" ) +with expansion: + "Value1" == "Value1" + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( EnumClass3::Value2 ) == "Value2" ) +with expansion: + "Value2" == "Value2" + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( EnumClass3::Value3 ) == "Value3" ) +with expansion: + "Value3" == "Value3" + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" ) +with expansion: + "{** unexpected enum value **}" + == + "{** unexpected enum value **}" + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( ec3 ) == "Value2" ) +with expansion: + "Value2" == "Value2" + +------------------------------------------------------------------------------- +Enums in namespaces can quickly have stringification enabled using +REGISTER_ENUM +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( Bikeshed::Colours::Red ) == "Red" ) +with expansion: + "Red" == "Red" + +EnumToString.tests.cpp:: PASSED: + REQUIRE( stringify( Bikeshed::Colours::Blue ) == "Blue" ) +with expansion: + "Blue" == "Blue" + +------------------------------------------------------------------------------- +Epsilon only applies to Approx's value +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( 101.01 != Approx(100).epsilon(0.01) ) +with expansion: + 101.01 != Approx( 100.0 ) + +------------------------------------------------------------------------------- +Equality checks that should fail +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven == 6 ) +with expansion: + 7 == 6 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven == 8 ) +with expansion: + 7 == 8 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven == 0 ) +with expansion: + 7 == 0 + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one == Approx( 9.11f ) ) +with expansion: + 9.1f == Approx( 9.1099996567 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one == Approx( 9.0f ) ) +with expansion: + 9.1f == Approx( 9.0 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one == Approx( 1 ) ) +with expansion: + 9.1f == Approx( 1.0 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one == Approx( 0 ) ) +with expansion: + 9.1f == Approx( 0.0 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.double_pi == Approx( 3.1415 ) ) +with expansion: + 3.1415926535 == Approx( 3.1415 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello == "goodbye" ) +with expansion: + "hello" == "goodbye" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello == "hell" ) +with expansion: + "hello" == "hell" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello == "hello1" ) +with expansion: + "hello" == "hello1" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello.size() == 6 ) +with expansion: + 5 == 6 + +Condition.tests.cpp:: FAILED: + CHECK( x == Approx( 1.301 ) ) +with expansion: + 1.3 == Approx( 1.301 ) + +------------------------------------------------------------------------------- +Equality checks that should succeed +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven == 7 ) +with expansion: + 7 == 7 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one == Approx( 9.1f ) ) +with expansion: + 9.1f == Approx( 9.1000003815 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.double_pi == Approx( 3.1415926535 ) ) +with expansion: + 3.1415926535 == Approx( 3.1415926535 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello == "hello" ) +with expansion: + "hello" == "hello" + +Condition.tests.cpp:: PASSED: + REQUIRE( "hello" == data.str_hello ) +with expansion: + "hello" == "hello" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello.size() == 5 ) +with expansion: + 5 == 5 + +Condition.tests.cpp:: PASSED: + REQUIRE( x == Approx( 1.3 ) ) +with expansion: + 1.3 == Approx( 1.3 ) + +------------------------------------------------------------------------------- +Equals +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "this string contains + 'abc' as a substring" + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "this string contains + 'abc' as a substring" (case insensitive) + +------------------------------------------------------------------------------- +Equals string matcher +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "this string contains + 'ABC' as a substring" + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "something else" (case + insensitive) + +------------------------------------------------------------------------------- +Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(WhatException{}) == "This exception has overridden what() method" ) +with expansion: + "This exception has overridden what() method" + == + "This exception has overridden what() method" + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(OperatorException{}) == "OperatorException" ) +with expansion: + "OperatorException" == "OperatorException" + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(StringMakerException{}) == "StringMakerException" ) +with expansion: + "StringMakerException" + == + "StringMakerException" + +------------------------------------------------------------------------------- +Exception matchers that fail + No exception +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +because no exception was thrown where one was expected: + +Matchers.tests.cpp:: FAILED: + REQUIRE_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +because no exception was thrown where one was expected: + +------------------------------------------------------------------------------- +Exception matchers that fail + Type mismatch +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +due to unexpected exception with message: + Unknown exception + +Matchers.tests.cpp:: FAILED: + REQUIRE_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +due to unexpected exception with message: + Unknown exception + +------------------------------------------------------------------------------- +Exception matchers that fail + Contents are wrong +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THROWS_MATCHES( throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 + +Matchers.tests.cpp:: FAILED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 + +------------------------------------------------------------------------------- +Exception matchers that succeed +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THROWS_MATCHES( throwsSpecialException( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 2 ), SpecialException, ExceptionMatcher{ 2 } ) +with expansion: + SpecialException::what special exception has value of 2 + +------------------------------------------------------------------------------- +Exception messages can be tested for + exact match +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) +with expansion: + "expected exception" equals: "expected exception" + +------------------------------------------------------------------------------- +Exception messages can be tested for + different case +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) ) +with expansion: + "expected exception" equals: "expected exception" (case insensitive) + +------------------------------------------------------------------------------- +Exception messages can be tested for + wildcarded +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) ) +with expansion: + "expected exception" starts with: "expected" + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) ) +with expansion: + "expected exception" ends with: "exception" + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), ContainsSubstring( "except" ) ) +with expansion: + "expected exception" contains: "except" + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), ContainsSubstring( "exCept", Catch::CaseSensitive::No ) ) +with expansion: + "expected exception" contains: "except" (case insensitive) + +------------------------------------------------------------------------------- +Exceptions matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_MATCHES( throwsDerivedException(), DerivedException, Message( "DerivedException::what" ) ) +with expansion: + DerivedException::what exception message matches "DerivedException::what" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_MATCHES( throwsDerivedException(), DerivedException, !Message( "derivedexception::what" ) ) +with expansion: + DerivedException::what not exception message matches "derivedexception::what" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 2 ), SpecialException, !Message( "DerivedException::what" ) ) +with expansion: + SpecialException::what not exception message matches "DerivedException::what" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 2 ), SpecialException, Message( "SpecialException::what" ) ) +with expansion: + SpecialException::what exception message matches "SpecialException::what" + +------------------------------------------------------------------------------- +Expected exceptions that don't throw or unexpected exceptions fail the test +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + CHECK_THROWS_AS( thisThrows(), std::string ) +due to unexpected exception with message: + expected exception + +Exception.tests.cpp:: FAILED: + CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error ) +because no exception was thrown where one was expected: + +Exception.tests.cpp:: FAILED: + CHECK_NOTHROW( thisThrows() ) +due to unexpected exception with message: + expected exception + +------------------------------------------------------------------------------- +FAIL aborts the test +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + This is a failure + +------------------------------------------------------------------------------- +FAIL does not require an argument +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +FAIL_CHECK does not abort the test +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + This is a failure + +Message.tests.cpp:: warning: + This message appears in the output + +------------------------------------------------------------------------------- +Factorials are computed +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( Factorial(0) == 1 ) +with expansion: + 1 == 1 + +Misc.tests.cpp:: PASSED: + REQUIRE( Factorial(1) == 1 ) +with expansion: + 1 == 1 + +Misc.tests.cpp:: PASSED: + REQUIRE( Factorial(2) == 2 ) +with expansion: + 2 == 2 + +Misc.tests.cpp:: PASSED: + REQUIRE( Factorial(3) == 6 ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( Factorial(10) == 3628800 ) +with expansion: + 3628800 (0x) == 3628800 (0x) + +------------------------------------------------------------------------------- +Floating point matchers: double + Relative +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10., WithinRel( 11.1, 0.1 ) ) +with expansion: + 10.0 and 11.1 are within 10% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10., !WithinRel( 11.2, 0.1 ) ) +with expansion: + 10.0 not and 11.2 are within 10% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., !WithinRel( 0., 0.99 ) ) +with expansion: + 1.0 not and 0 are within 99% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -0., WithinRel( 0. ) ) +with expansion: + -0.0 and 0 are within 2.22045e-12% of each other + +------------------------------------------------------------------------------- +Floating point matchers: double + Relative + Some subnormal values +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, WithinRel( v2 ) ) +with expansion: + 0.0 and 2.22507e-308 are within 2.22045e-12% of each other + +------------------------------------------------------------------------------- +Floating point matchers: double + Margin +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinAbs( 1., 0 ) ) +with expansion: + 1.0 is within 0.0 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0., WithinAbs( 1., 1 ) ) +with expansion: + 0.0 is within 1.0 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0., !WithinAbs( 1., 0.99 ) ) +with expansion: + 0.0 not is within 0.99 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0., !WithinAbs( 1., 0.99 ) ) +with expansion: + 0.0 not is within 0.99 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 11., !WithinAbs( 10., 0.5 ) ) +with expansion: + 11.0 not is within 0.5 of 10.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10., !WithinAbs( 11., 0.5 ) ) +with expansion: + 10.0 not is within 0.5 of 11.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -10., WithinAbs( -10., 0.5 ) ) +with expansion: + -10.0 is within 0.5 of -10.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -10., WithinAbs( -9.6, 0.5 ) ) +with expansion: + -10.0 is within 0.5 of -9.6 + +------------------------------------------------------------------------------- +Floating point matchers: double + ULPs +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinULP( 1., 0 ) ) +with expansion: + 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1. + 0000000000000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( nextafter( 1., 2. ), WithinULP( 1., 1 ) ) +with expansion: + 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1. + 0000000000000002e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0., WithinULP( nextafter( 0., 1. ), 1 ) ) +with expansion: + 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9. + 8813129168249309e-324]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinULP( nextafter( 1., 0. ), 1 ) ) +with expansion: + 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1. + 0000000000000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., !WithinULP( nextafter( 1., 2. ), 0 ) ) +with expansion: + 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, + 1.0000000000000002e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinULP( 1., 0 ) ) +with expansion: + 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1. + 0000000000000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -0., WithinULP( 0., 0 ) ) +with expansion: + -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0. + 0000000000000000e+00]) + +------------------------------------------------------------------------------- +Floating point matchers: double + Composed +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) ) +with expansion: + 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1. + 9999999999999998e+00, 2.0000000000000004e+00]) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) ) +with expansion: + 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1. + 0000000000000000e+00, 1.0000000000000000e+00]) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) ) +with expansion: + 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) + +------------------------------------------------------------------------------- +Floating point matchers: double + Constructor validation +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinAbs( 1., 0. ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinAbs( 1., -1. ), std::domain_error ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinULP( 1., 0 ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinRel( 1., 0. ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinRel( 1., -0.2 ), std::domain_error ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinRel( 1., 1. ), std::domain_error ) + +------------------------------------------------------------------------------- +Floating point matchers: float + Relative +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10.f, WithinRel( 11.1f, 0.1f ) ) +with expansion: + 10.0f and 11.1 are within 10% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10.f, !WithinRel( 11.2f, 0.1f ) ) +with expansion: + 10.0f not and 11.2 are within 10% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, !WithinRel( 0.f, 0.99f ) ) +with expansion: + 1.0f not and 0 are within 99% of each other + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -0.f, WithinRel( 0.f ) ) +with expansion: + -0.0f and 0 are within 0.00119209% of each other + +------------------------------------------------------------------------------- +Floating point matchers: float + Relative + Some subnormal values +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, WithinRel( v2 ) ) +with expansion: + 0.0f and 1.17549e-38 are within 0.00119209% of each other + +------------------------------------------------------------------------------- +Floating point matchers: float + Margin +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinAbs( 1.f, 0 ) ) +with expansion: + 1.0f is within 0.0 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.f, WithinAbs( 1.f, 1 ) ) +with expansion: + 0.0f is within 1.0 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.f, !WithinAbs( 1.f, 0.99f ) ) +with expansion: + 0.0f not is within 0.9900000095 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.f, !WithinAbs( 1.f, 0.99f ) ) +with expansion: + 0.0f not is within 0.9900000095 of 1.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.f, WithinAbs( -0.f, 0 ) ) +with expansion: + 0.0f is within 0.0 of -0.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 11.f, !WithinAbs( 10.f, 0.5f ) ) +with expansion: + 11.0f not is within 0.5 of 10.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 10.f, !WithinAbs( 11.f, 0.5f ) ) +with expansion: + 10.0f not is within 0.5 of 11.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -10.f, WithinAbs( -10.f, 0.5f ) ) +with expansion: + -10.0f is within 0.5 of -10.0 + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -10.f, WithinAbs( -9.6f, 0.5f ) ) +with expansion: + -10.0f is within 0.5 of -9.6000003815 + +------------------------------------------------------------------------------- +Floating point matchers: float + ULPs +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinULP( 1.f, 0 ) ) +with expansion: + 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -1.f, WithinULP( -1.f, 0 ) ) +with expansion: + -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+ + 00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) ) +with expansion: + 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) ) +with expansion: + 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) ) +with expansion: + 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) ) +with expansion: + 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+ + 00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinULP( 1.f, 0 ) ) +with expansion: + 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( -0.f, WithinULP( 0.f, 0 ) ) +with expansion: + -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00]) + +------------------------------------------------------------------------------- +Floating point matchers: float + Composed +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) ) +with expansion: + 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9. + 99999940e-01, 1.00000012e+00]) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) ) +with expansion: + 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1. + 00000000e+00, 1.00000000e+00]) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) ) +with expansion: + 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) + +------------------------------------------------------------------------------- +Floating point matchers: float + Constructor validation +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinAbs( 1.f, 0.f ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinAbs( 1.f, -1.f ), std::domain_error ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinULP( 1.f, 0 ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinULP( 1.f, static_cast( -1 ) ), std::domain_error ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( WithinRel( 1.f, 0.f ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinRel( 1.f, -0.2f ), std::domain_error ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( WithinRel( 1.f, 1.f ), std::domain_error ) + +------------------------------------------------------------------------------- +Generators -- adapters + Filtering by predicate + Basic usage +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Filtering by predicate + Basic usage +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Filtering by predicate + Basic usage +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Filtering by predicate + Throws if there are no matching values +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( filter([] (int) {return false; }, value(1)), Catch::GeneratorException ) + +------------------------------------------------------------------------------- +Generators -- adapters + Shortening a range +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i < 4 ) +with expansion: + 1 < 4 + +------------------------------------------------------------------------------- +Generators -- adapters + Shortening a range +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i < 4 ) +with expansion: + 2 < 4 + +------------------------------------------------------------------------------- +Generators -- adapters + Shortening a range +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i < 4 ) +with expansion: + 3 < 4 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Same type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Same type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Same type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i % 2 == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different deduced type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different deduced type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Transforming elements + Different deduced type +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( i.size() == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 2 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 3 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 2 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Repeating a generator +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j > 0 ) +with expansion: + 3 > 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Number of elements in source is divisible by chunk size +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 2 ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() == chunk2.back() ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Number of elements in source is divisible by chunk size +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 2 ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() == chunk2.back() ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Number of elements in source is divisible by chunk size +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 2 ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() == chunk2.back() ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Number of elements in source is not divisible by chunk size +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 2 ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() == chunk2.back() ) +with expansion: + 1 == 1 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() < 3 ) +with expansion: + 1 < 3 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Number of elements in source is not divisible by chunk size +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 2 ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() == chunk2.back() ) +with expansion: + 2 == 2 + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.front() < 3 ) +with expansion: + 2 < 3 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Chunk size of zero +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Chunk size of zero +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Chunk size of zero +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( chunk2.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Generators -- adapters + Chunking a generator into sized pieces + Throws on too small generators +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( chunk(2, value(1)), Catch::GeneratorException ) + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -3 < 1 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -2 < 1 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -1 < 1 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 4 > 1 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 4 > 2 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 4 > 3 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -3 < 2 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -2 < 2 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -1 < 2 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 8 > 1 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 8 > 2 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 8 > 3 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -3 < 3 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -2 < 3 + +------------------------------------------------------------------------------- +Generators -- simple + one +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( j < i ) +with expansion: + -1 < 3 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 12 > 1 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 12 > 2 + +------------------------------------------------------------------------------- +Generators -- simple + two +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( 4u * i > str.size() ) +with expansion: + 12 > 3 + +------------------------------------------------------------------------------- +Generators internals + Single value +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 123 ) +with expansion: + 123 == 123 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Preset values +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Generator combinator +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 4 ) +with expansion: + 4 == 4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 0 ) +with expansion: + 0 == 0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Explicitly typed generator sequence +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get().size() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == "aa" ) +with expansion: + "aa" == "aa" + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == "bb" ) +with expansion: + "bb" == "bb" + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == "cc" ) +with expansion: + "cc" == "cc" + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Filter generator + Simple filtering +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Filter generator + Filter out multiple elements at the start and end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Filter generator + Throws on construction if it can't get initial element +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( filter([](int) { return false; }, value(1)), Catch::GeneratorException ) + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( filter([](int) { return false; }, values({ 1, 2, 3 })), Catch::GeneratorException ) + +------------------------------------------------------------------------------- +Generators internals + Take generator + Take less +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Take generator + Take more +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Map with explicit return type +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2.0 ) +with expansion: + 2.0 == 2.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 4.0 ) +with expansion: + 4.0 == 4.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 6.0 ) +with expansion: + 6.0 == 6.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Map with deduced return type +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2.0 ) +with expansion: + 2.0 == 2.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 4.0 ) +with expansion: + 4.0 == 4.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 6.0 ) +with expansion: + 6.0 == 6.0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Repeat + Singular repeat +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Repeat + Actual repeat +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 3 ) +with expansion: + 3 == 3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive auto step + Integer +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -2 ) +with expansion: + -2 == -2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 0 ) +with expansion: + 0 == 0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Negative auto step + Integer +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 1 ) +with expansion: + 1 == 1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 0 ) +with expansion: + 0 == 0 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Integer + Exact +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -7 ) +with expansion: + -7 == -7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Integer + Slightly over end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -7 ) +with expansion: + -7 == -7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Integer + Slightly under end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -7 ) +with expansion: + -7 == -7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Floating Point + Exact +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -1.0 == Approx( -1.0 ) +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.9 == Approx( -0.9 ) +with message: + Current expected value is -0.9 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.9 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.8 == Approx( -0.8 ) +with message: + Current expected value is -0.8 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.8 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.7 == Approx( -0.7 ) +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.6 == Approx( -0.6 ) +with message: + Current expected value is -0.6 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.6 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.5 == Approx( -0.5 ) +with message: + Current expected value is -0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.4 == Approx( -0.4 ) +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.3 == Approx( -0.3 ) +with message: + Current expected value is -0.3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.2 == Approx( -0.2 ) +with message: + Current expected value is -0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.1 == Approx( -0.1 ) +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.0 == Approx( -0.0 ) +with message: + Current expected value is -1.38778e-16 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -1.38778e-16 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.1 == Approx( 0.1 ) +with message: + Current expected value is 0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.2 == Approx( 0.2 ) +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.3 == Approx( 0.3 ) +with message: + Current expected value is 0.3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.3 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.4 == Approx( 0.4 ) +with message: + Current expected value is 0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.5 == Approx( 0.5 ) +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.6 == Approx( 0.6 ) +with message: + Current expected value is 0.6 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.6 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.7 == Approx( 0.7 ) +with message: + Current expected value is 0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.8 == Approx( 0.8 ) +with message: + Current expected value is 0.8 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.8 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.9 == Approx( 0.9 ) +with message: + Current expected value is 0.9 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.9 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx( rangeEnd ) ) +with expansion: + 1.0 == Approx( 1.0 ) + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Floating Point + Slightly over end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -1.0 == Approx( -1.0 ) +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.7 == Approx( -0.7 ) +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.4 == Approx( -0.4 ) +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.1 == Approx( -0.1 ) +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.2 == Approx( 0.2 ) +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.5 == Approx( 0.5 ) +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Positive manual step + Floating Point + Slightly under end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -1.0 == Approx( -1.0 ) +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.7 == Approx( -0.7 ) +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.4 == Approx( -0.4 ) +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + -0.1 == Approx( -0.1 ) +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is -0.1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.2 == Approx( 0.2 ) +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == Approx(expected) ) +with expansion: + 0.5 == Approx( 0.5 ) +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true +with message: + Current expected value is 0.5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Negative manual step + Integer + Exact +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Negative manual step + Integer + Slightly over end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Generators internals + Range + Negative manual step + Integer + Slightly under end +------------------------------------------------------------------------------- +GeneratorsImpl.tests.cpp: +............................................................................... + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 5 ) +with expansion: + 5 == 5 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == 2 ) +with expansion: + 2 == 2 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -1 ) +with expansion: + -1 == -1 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -4 ) +with expansion: + -4 == -4 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.next() ) +with expansion: + true + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE( gen.get() == -7 ) +with expansion: + -7 == -7 + +GeneratorsImpl.tests.cpp:: PASSED: + REQUIRE_FALSE( gen.next() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Greater-than inequalities with different epsilons +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d >= Approx( 1.22 ) ) +with expansion: + 1.23 >= Approx( 1.22 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d >= Approx( 1.23 ) ) +with expansion: + 1.23 >= Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE_FALSE( d >= Approx( 1.24 ) ) +with expansion: + !(1.23 >= Approx( 1.24 )) + +Approx.tests.cpp:: PASSED: + REQUIRE( d >= Approx( 1.24 ).epsilon(0.1) ) +with expansion: + 1.23 >= Approx( 1.24 ) + +------------------------------------------------------------------------------- +INFO and WARN do not abort tests +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: warning: + this is a message + this is a warning + + +No assertions in test case 'INFO and WARN do not abort tests' + +------------------------------------------------------------------------------- +INFO gets logged on failure +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + REQUIRE( a == 1 ) +with expansion: + 2 == 1 +with messages: + this message should be logged + so should this + +------------------------------------------------------------------------------- +INFO gets logged on failure, even if captured before successful assertions +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: + CHECK( a == 2 ) +with expansion: + 2 == 2 +with message: + this message may be logged later + +Message.tests.cpp:: FAILED: + CHECK( a == 1 ) +with expansion: + 2 == 1 +with messages: + this message may be logged later + this message should be logged + +Message.tests.cpp:: FAILED: + CHECK( a == 0 ) +with expansion: + 2 == 0 +with messages: + this message may be logged later + this message should be logged + and this, but later + +Message.tests.cpp:: PASSED: + CHECK( a == 2 ) +with expansion: + 2 == 2 +with messages: + this message may be logged later + this message should be logged + and this, but later + but not this + +------------------------------------------------------------------------------- +INFO is reset for each loop +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 0 < 10 +with messages: + current counter 0 + i := 0 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 1 < 10 +with messages: + current counter 1 + i := 1 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 2 < 10 +with messages: + current counter 2 + i := 2 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 3 < 10 +with messages: + current counter 3 + i := 3 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 4 < 10 +with messages: + current counter 4 + i := 4 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 5 < 10 +with messages: + current counter 5 + i := 5 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 6 < 10 +with messages: + current counter 6 + i := 6 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 7 < 10 +with messages: + current counter 7 + i := 7 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 8 < 10 +with messages: + current counter 8 + i := 8 + +Message.tests.cpp:: PASSED: + REQUIRE( i < 10 ) +with expansion: + 9 < 10 +with messages: + current counter 9 + i := 9 + +Message.tests.cpp:: FAILED: + REQUIRE( i < 10 ) +with expansion: + 10 < 10 +with messages: + current counter 10 + i := 10 + +------------------------------------------------------------------------------- +Inequality checks that should fail +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven != 7 ) +with expansion: + 7 != 7 + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one != Approx( 9.1f ) ) +with expansion: + 9.1f != Approx( 9.1000003815 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.double_pi != Approx( 3.1415926535 ) ) +with expansion: + 3.1415926535 != Approx( 3.1415926535 ) + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello != "hello" ) +with expansion: + "hello" != "hello" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello.size() != 5 ) +with expansion: + 5 != 5 + +------------------------------------------------------------------------------- +Inequality checks that should succeed +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven != 6 ) +with expansion: + 7 != 6 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven != 8 ) +with expansion: + 7 != 8 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one != Approx( 9.11f ) ) +with expansion: + 9.1f != Approx( 9.1099996567 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one != Approx( 9.0f ) ) +with expansion: + 9.1f != Approx( 9.0 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one != Approx( 1 ) ) +with expansion: + 9.1f != Approx( 1.0 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one != Approx( 0 ) ) +with expansion: + 9.1f != Approx( 0.0 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.double_pi != Approx( 3.1415 ) ) +with expansion: + 3.1415926535 != Approx( 3.1415 ) + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello != "goodbye" ) +with expansion: + "hello" != "goodbye" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello != "hell" ) +with expansion: + "hello" != "hell" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello != "hello1" ) +with expansion: + "hello" != "hello1" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello.size() != 6 ) +with expansion: + 5 != 6 + +------------------------------------------------------------------------------- +Lambdas in assertions +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: + REQUIRE( []() { return true; }() ) +with expansion: + true + +------------------------------------------------------------------------------- +Less-than inequalities with different epsilons +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d <= Approx( 1.24 ) ) +with expansion: + 1.23 <= Approx( 1.24 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d <= Approx( 1.23 ) ) +with expansion: + 1.23 <= Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE_FALSE( d <= Approx( 1.22 ) ) +with expansion: + !(1.23 <= Approx( 1.22 )) + +Approx.tests.cpp:: PASSED: + REQUIRE( d <= Approx( 1.22 ).epsilon(0.1) ) +with expansion: + 1.23 <= Approx( 1.22 ) + +------------------------------------------------------------------------------- +ManuallyRegistered +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + was called + +------------------------------------------------------------------------------- +Matchers can be (AllOf) composed with the && operator +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) ) +with expansion: + "this string contains 'abc' as a substring" ( contains: "string" and + contains: "abc" and contains: "substring" and contains: "contains" ) + +------------------------------------------------------------------------------- +Matchers can be (AnyOf) composed with the || operator +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( contains: "string" or contains: + "different" or contains: "random" ) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching2(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) ) +with expansion: + "some completely different text that contains one common word" ( contains: + "string" or contains: "different" or contains: "random" ) + +------------------------------------------------------------------------------- +Matchers can be composed with both && and || +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "substring" ) + +------------------------------------------------------------------------------- +Matchers can be composed with both && and || - failing +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "random" ) + +------------------------------------------------------------------------------- +Matchers can be negated (Not) with the ! operator +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), !ContainsSubstring( "different" ) ) +with expansion: + "this string contains 'abc' as a substring" not contains: "different" + +------------------------------------------------------------------------------- +Matchers can be negated (Not) with the ! operator - failing +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), !ContainsSubstring( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" not contains: "substring" + +------------------------------------------------------------------------------- +Mayfail test case with nested sections + A + 1 +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +Mayfail test case with nested sections + A + 2 +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +Mayfail test case with nested sections + B + 1 +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +Mayfail test case with nested sections + B + 2 +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +Mismatching exception messages failing the test +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) +with expansion: + "expected exception" equals: "expected exception" + +Exception.tests.cpp:: FAILED: + REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) +with expansion: + "expected exception" equals: "should fail" + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 3 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 4 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 5 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 6 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + -5 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + -4 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 90 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 91 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 92 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 93 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 94 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 95 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 96 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 97 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 98 > -6 + +------------------------------------------------------------------------------- +Nested generators and captured variables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( values > -6 ) +with expansion: + 99 > -6 + +------------------------------------------------------------------------------- +Nice descriptive name +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: warning: + This one ran + + +No assertions in test case 'Nice descriptive name' + +------------------------------------------------------------------------------- +Non-std exceptions can be translated +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + custom exception + +------------------------------------------------------------------------------- +Objects that evaluated in boolean contexts can be checked +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + CHECK( True ) +with expansion: + {?} + +Tricky.tests.cpp:: PASSED: + CHECK( !False ) +with expansion: + true + +Tricky.tests.cpp:: PASSED: + CHECK_FALSE( False ) +with expansion: + !{?} + +------------------------------------------------------------------------------- +Optionally static assertions +------------------------------------------------------------------------------- +Compilation.tests.cpp: +............................................................................... + +Compilation.tests.cpp:: PASSED: +with message: + std::is_void::value + +Compilation.tests.cpp:: PASSED: +with message: + !(std::is_void::value) + +Compilation.tests.cpp:: PASSED: +with message: + std::is_void::value + +Compilation.tests.cpp:: PASSED: +with message: + !(std::is_void::value) + +------------------------------------------------------------------------------- +Ordering comparison checks that should fail +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven > 7 ) +with expansion: + 7 > 7 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven < 7 ) +with expansion: + 7 < 7 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven > 8 ) +with expansion: + 7 > 8 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven < 6 ) +with expansion: + 7 < 6 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven < 0 ) +with expansion: + 7 < 0 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven < -1 ) +with expansion: + 7 < -1 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven >= 8 ) +with expansion: + 7 >= 8 + +Condition.tests.cpp:: FAILED: + CHECK( data.int_seven <= 6 ) +with expansion: + 7 <= 6 + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one < 9 ) +with expansion: + 9.1f < 9 + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one > 10 ) +with expansion: + 9.1f > 10 + +Condition.tests.cpp:: FAILED: + CHECK( data.float_nine_point_one > 9.2 ) +with expansion: + 9.1f > 9.2 + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello > "hello" ) +with expansion: + "hello" > "hello" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello < "hello" ) +with expansion: + "hello" < "hello" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello > "hellp" ) +with expansion: + "hello" > "hellp" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello > "z" ) +with expansion: + "hello" > "z" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello < "hellm" ) +with expansion: + "hello" < "hellm" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello < "a" ) +with expansion: + "hello" < "a" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello >= "z" ) +with expansion: + "hello" >= "z" + +Condition.tests.cpp:: FAILED: + CHECK( data.str_hello <= "a" ) +with expansion: + "hello" <= "a" + +------------------------------------------------------------------------------- +Ordering comparison checks that should succeed +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven < 8 ) +with expansion: + 7 < 8 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven > 6 ) +with expansion: + 7 > 6 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven > 0 ) +with expansion: + 7 > 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven > -1 ) +with expansion: + 7 > -1 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven >= 7 ) +with expansion: + 7 >= 7 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven >= 6 ) +with expansion: + 7 >= 6 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven <= 7 ) +with expansion: + 7 <= 7 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.int_seven <= 8 ) +with expansion: + 7 <= 8 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one > 9 ) +with expansion: + 9.1f > 9 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one < 10 ) +with expansion: + 9.1f < 10 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.float_nine_point_one < 9.2 ) +with expansion: + 9.1f < 9.2 + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello <= "hello" ) +with expansion: + "hello" <= "hello" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello >= "hello" ) +with expansion: + "hello" >= "hello" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello < "hellp" ) +with expansion: + "hello" < "hellp" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello < "zebra" ) +with expansion: + "hello" < "zebra" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello > "hellm" ) +with expansion: + "hello" > "hellm" + +Condition.tests.cpp:: PASSED: + REQUIRE( data.str_hello > "a" ) +with expansion: + "hello" > "a" + +------------------------------------------------------------------------------- +Our PCG implementation provides expected results for known seeds + Default seeded +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 4242248763 (0x) + == + 4242248763 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1867888929 (0x) + == + 1867888929 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1276619030 (0x) + == + 1276619030 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1911218783 (0x) + == + 1911218783 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1827115164 (0x) + == + 1827115164 (0x) + +------------------------------------------------------------------------------- +Our PCG implementation provides expected results for known seeds + Specific seed +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1472234645 (0x) + == + 1472234645 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 868832940 (0x) + == + 868832940 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 570883446 (0x) + == + 570883446 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 889299803 (0x) + == + 889299803 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 4261393167 (0x) + == + 4261393167 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 1472234645 (0x) + == + 1472234645 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 868832940 (0x) + == + 868832940 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 570883446 (0x) + == + 570883446 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 889299803 (0x) + == + 889299803 (0x) + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE( rng() == 0x ) +with expansion: + 4261393167 (0x) + == + 4261393167 (0x) + +------------------------------------------------------------------------------- +Output from all sections is reported + one +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + Message from section one + +------------------------------------------------------------------------------- +Output from all sections is reported + two +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + Message from section two + +------------------------------------------------------------------------------- +Overloaded comma or address-of operators are not used +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( ( EvilMatcher(), EvilMatcher() ), EvilCommaOperatorUsed ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( &EvilMatcher(), EvilAddressOfOperatorUsed ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( EvilMatcher() || ( EvilMatcher() && !EvilMatcher() ) ) + +Matchers.tests.cpp:: PASSED: + REQUIRE_NOTHROW( ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher() ) + +------------------------------------------------------------------------------- +Parse test names and tags + Empty test spec should have no filters +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from empty string should have no filters +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from just a comma should have no filters +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from name should have one filter +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from quoted name should have one filter +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from name should have one filter +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcard at the start +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( parseTestSpec( "*a" ).matches( *tcA ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcard at the end +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( parseTestSpec( "a*" ).matches( *tcA ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcard at both ends +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( parseTestSpec( "*a*" ).matches( *tcA ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Redundant wildcard at the start +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Redundant wildcard at the end +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Redundant wildcard at both ends +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcard at both ends, redundant at start +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Just wildcard +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag, two matches +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Two tags +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Two tags, spare separated +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcarded name and tag +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag exclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion and one tag inclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion and one wldcarded name inclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion, using exclude:, and one wldcarded name inclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + name exclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion with tag inclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion, using exclude:, with tag inclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + two wildcarded names +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + empty tag +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + empty quoted name +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + quoted string followed by tag exclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcA ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcB ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcC ) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Leading and trailing spaces in test spec +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) ) +with expansion: + true + +------------------------------------------------------------------------------- +Parse test names and tags + Leading and trailing spaces in test name +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark" ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( " aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( "aardvark " ) ) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches( *fakeTestCase( "aardvark" ) ) ) +with expansion: + true + +------------------------------------------------------------------------------- +Parse test names and tags + Shortened hide tags are split apart when parsing +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( spec.matches(*fakeTestCase("only foo", "[foo]")) ) +with expansion: + !false + +------------------------------------------------------------------------------- +Parse test names and tags + Shortened hide tags also properly handle exclusion +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) ) +with expansion: + !false + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( spec.matches(*fakeTestCase("only foo", "[foo]")) ) +with expansion: + !false + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( spec.matches(*fakeTestCase("only hidden", "[.]")) ) +with expansion: + !false + +CmdLine.tests.cpp:: PASSED: + CHECK( spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) ) +with expansion: + true + +------------------------------------------------------------------------------- +Parsed tags are matched case insensitive +------------------------------------------------------------------------------- +TestSpecParser.tests.cpp: +............................................................................... + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.hasFilters() ) +with expansion: + true + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.getInvalidSpecs().empty() ) +with expansion: + true + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.matches( testCase ) ) +with expansion: + true + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + shard-count +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--shard-count=8" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.shardCount == 8 ) +with expansion: + 8 == 8 + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + Negative shard count reports error +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( result ) +with expansion: + !{?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Shard count must be a positive number") ) +with expansion: + "Shard count must be a positive number" contains: "Shard count must be a + positive number" + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + Zero shard count reports error +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( result ) +with expansion: + !{?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Shard count must be a positive number") ) +with expansion: + "Shard count must be a positive number" contains: "Shard count must be a + positive number" + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + shard-index +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--shard-index=2" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.shardIndex == 2 ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + Negative shard index reports error +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( result ) +with expansion: + !{?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Shard index must be a non-negative number") ) +with expansion: + "Shard index must be a non-negative number" contains: "Shard index must be a + non-negative number" + +------------------------------------------------------------------------------- +Parsing sharding-related cli flags + Shard index 0 is accepted +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--shard-index=0" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.shardIndex == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Parsing tags with non-alphabetical characters is pass-through +------------------------------------------------------------------------------- +TestSpecParser.tests.cpp: +............................................................................... + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.hasFilters() ) +with expansion: + true +with message: + tagString := "[tag with spaces]" + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.getInvalidSpecs().empty() ) +with expansion: + true +with message: + tagString := "[tag with spaces]" + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.matches( testCase ) ) +with expansion: + true +with message: + tagString := "[tag with spaces]" + +------------------------------------------------------------------------------- +Parsing tags with non-alphabetical characters is pass-through +------------------------------------------------------------------------------- +TestSpecParser.tests.cpp: +............................................................................... + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.hasFilters() ) +with expansion: + true +with message: + tagString := "[I said "good day" sir!]" + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.getInvalidSpecs().empty() ) +with expansion: + true +with message: + tagString := "[I said "good day" sir!]" + +TestSpecParser.tests.cpp:: PASSED: + REQUIRE( spec.matches( testCase ) ) +with expansion: + true +with message: + tagString := "[I said "good day" sir!]" + +------------------------------------------------------------------------------- +Parsing warnings + NoAssertions +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cli.parse( { "test", "-w", "NoAssertions" } ) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.warnings == WarnAbout::NoAssertions ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Parsing warnings + NoTests is no longer supported +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE_FALSE( cli.parse( { "test", "-w", "NoTests" } ) ) +with expansion: + !{?} + +------------------------------------------------------------------------------- +Parsing warnings + Combining multiple warnings +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cli.parse( { "test", "--warn", "NoAssertions", "--warn", "UnmatchedTestSpec" } ) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.warnings == ( WarnAbout::NoAssertions | WarnAbout::UnmatchedTestSpec ) ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +Pointers can be compared to null +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( p == 0 ) +with expansion: + 0 == 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( p == pNULL ) +with expansion: + 0 == 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( p != 0 ) +with expansion: + 0x != 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( cp != 0 ) +with expansion: + 0x != 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( cpc != 0 ) +with expansion: + 0x != 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( returnsNull() == 0 ) +with expansion: + {null string} == 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( returnsConstNull() == 0 ) +with expansion: + {null string} == 0 + +Condition.tests.cpp:: PASSED: + REQUIRE( 0 != p ) +with expansion: + 0 != 0x + +------------------------------------------------------------------------------- +Precision of floating point stringification can be set + Floats +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( str1.size() == 3 + 5 ) +with expansion: + 8 == 8 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( str2.size() == 3 + 10 ) +with expansion: + 13 == 13 + +------------------------------------------------------------------------------- +Precision of floating point stringification can be set + Double +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + CHECK( str1.size() == 2 + 5 ) +with expansion: + 7 == 7 + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( str2.size() == 2 + 15 ) +with expansion: + 17 == 17 + +------------------------------------------------------------------------------- +Predicate matcher can accept const char* +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( "foo", Predicate( []( const char* const& ) { return true; } ) ) +with expansion: + "foo" matches undescribed predicate + +------------------------------------------------------------------------------- +Process can be configured on command line + empty args don't cause a crash +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + CHECK( config.processName == "" ) +with expansion: + "" == "" + +------------------------------------------------------------------------------- +Process can be configured on command line + default - no arguments +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + CHECK( config.processName == "test" ) +with expansion: + "test" == "test" + +CmdLine.tests.cpp:: PASSED: + CHECK( config.shouldDebugBreak == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( config.abortAfter == -1 ) +with expansion: + -1 == -1 + +CmdLine.tests.cpp:: PASSED: + CHECK( config.noThrow == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + CHECK( config.reporterSpecifications == std::vector{ {"console", {}} } ) +with expansion: + { { console, } } + == + { { console, } } + +CmdLine.tests.cpp:: PASSED: + CHECK_FALSE( cfg.hasTestFilters() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Process can be configured on command line + test lists + Specify one test case using +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.hasTestFilters() ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("notIncluded")) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("test1")) ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + test lists + Specify one test case exclusion using exclude: +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.hasTestFilters() ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("test1")) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + test lists + Specify one test case exclusion using ~ +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.hasTestFilters() ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("test1")) == false ) +with expansion: + false == false + +CmdLine.tests.cpp:: PASSED: + REQUIRE( cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + -r/console +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } ) +with expansion: + { { console, } } + == + { { console, } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + -r/xml +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } ) +with expansion: + { { xml, } } + == + { { xml, } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + --reporter/junit +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } ) +with expansion: + { { junit, } } + == + { { junit, } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + must match one of the available ones +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Unrecognized reporter") ) +with expansion: + "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" + contains: "Unrecognized reporter" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + With output file +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } ) +with expansion: + { { console, out.txt } } + == + { { console, out.txt } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + With Windows-like absolute path as output file +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( result ) +with expansion: + {?} +with message: + result.errorMessage() := "" + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } ) +with expansion: + { { console, C:\Temp\out.txt } } + == + { { console, C:\Temp\out.txt } } +with message: + result.errorMessage() := "" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Output file cannot be empty +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("empty filename") ) +with expansion: + "Reporter 'console' has empty filename specified as its output. Supply a + filename or remove the colons to use the default output." contains: "empty + filename" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + All with output files +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } ) +with expansion: + { { xml, output.xml }, { junit, output-junit.xml } } + == + { { xml, output.xml }, { junit, output-junit.xml } } + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + Mixed output files and default output +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } ) +with expansion: + { { xml, output.xml }, { console, } } + == + { { xml, output.xml }, { console, } } + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + Multiple reporters + cannot have multiple reporters with default output +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") ) +with expansion: + "Only one reporter may have unspecified output file." contains: "Only one + reporter may have unspecified output file." + +------------------------------------------------------------------------------- +Process can be configured on command line + debugger + -b +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-b"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.shouldDebugBreak == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Process can be configured on command line + debugger + --break +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--break"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.shouldDebugBreak ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + -a aborts after first failure +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-a"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.abortAfter == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + -x 2 aborts after two failures +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-x", "2"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.abortAfter == 2 ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + -x must be numeric +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("convert") && ContainsSubstring("oops") ) +with expansion: + "Unable to convert 'oops' to destination type" ( contains: "convert" and + contains: "oops" ) + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + wait-for-keypress + Accepted options +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.waitForKeypress == std::get<1>(input) ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + wait-for-keypress + Accepted options +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.waitForKeypress == std::get<1>(input) ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + wait-for-keypress + Accepted options +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.waitForKeypress == std::get<1>(input) ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + wait-for-keypress + Accepted options +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.waitForKeypress == std::get<1>(input) ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + wait-for-keypress + invalid options are reported +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + REQUIRE_THAT( result.errorMessage(), ContainsSubstring("never") && ContainsSubstring("both") ) +with expansion: + "keypress argument must be one of: never, start, exit or both. 'sometimes' + not recognised" ( contains: "never" and contains: "both" ) + +------------------------------------------------------------------------------- +Process can be configured on command line + nothrow + -e +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-e"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.noThrow ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + nothrow + --nothrow +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--nothrow"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.noThrow ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + output filename + -o filename +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-o", "filename.ext"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.defaultOutputFilename == "filename.ext" ) +with expansion: + "filename.ext" == "filename.ext" + +------------------------------------------------------------------------------- +Process can be configured on command line + output filename + --out +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--out", "filename.ext"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.defaultOutputFilename == "filename.ext" ) +with expansion: + "filename.ext" == "filename.ext" + +------------------------------------------------------------------------------- +Process can be configured on command line + combinations + Single character flags can be combined +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "-abe"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + CHECK( config.abortAfter == 1 ) +with expansion: + 1 == 1 + +CmdLine.tests.cpp:: PASSED: + CHECK( config.shouldDebugBreak ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK( config.noThrow == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Process can be configured on command line + use-colour + without option +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.useColour == UseColour::Auto ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Process can be configured on command line + use-colour + auto +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--use-colour", "auto"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.useColour == UseColour::Auto ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Process can be configured on command line + use-colour + yes +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--use-colour", "yes"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.useColour == UseColour::Yes ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Process can be configured on command line + use-colour + no +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({"test", "--use-colour", "no"}) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.useColour == UseColour::No ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Process can be configured on command line + use-colour + error +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( !result ) +with expansion: + true + +CmdLine.tests.cpp:: PASSED: + CHECK_THAT( result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) ) +with expansion: + "colour mode must be one of: auto, yes or no. 'wrong' not recognised" + contains: "colour mode must be one of" + +------------------------------------------------------------------------------- +Process can be configured on command line + Benchmark options + samples +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--benchmark-samples=200" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.benchmarkSamples == 200 ) +with expansion: + 200 == 200 + +------------------------------------------------------------------------------- +Process can be configured on command line + Benchmark options + resamples +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--benchmark-resamples=20000" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.benchmarkResamples == 20000 ) +with expansion: + 20000 (0x) == 20000 (0x) + +------------------------------------------------------------------------------- +Process can be configured on command line + Benchmark options + confidence-interval +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.benchmarkConfidenceInterval == Catch::Approx(0.99) ) +with expansion: + 0.99 == Approx( 0.99 ) + +------------------------------------------------------------------------------- +Process can be configured on command line + Benchmark options + no-analysis +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--benchmark-no-analysis" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.benchmarkNoAnalysis ) +with expansion: + true + +------------------------------------------------------------------------------- +Process can be configured on command line + Benchmark options + warmup-time +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + CHECK( cli.parse({ "test", "--benchmark-warmup-time=10" }) ) +with expansion: + {?} + +CmdLine.tests.cpp:: PASSED: + REQUIRE( config.benchmarkWarmupTime == 10 ) +with expansion: + 10 == 10 + +------------------------------------------------------------------------------- +Product with differing arities - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( std::tuple_size::value >= 1 ) +with expansion: + 3 >= 1 + +------------------------------------------------------------------------------- +Product with differing arities - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( std::tuple_size::value >= 1 ) +with expansion: + 2 >= 1 + +------------------------------------------------------------------------------- +Product with differing arities - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( std::tuple_size::value >= 1 ) +with expansion: + 1 >= 1 + +------------------------------------------------------------------------------- +Random seed generation accepts known methods +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Catch::generateRandomSeed(method) ) + +------------------------------------------------------------------------------- +Random seed generation accepts known methods +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Catch::generateRandomSeed(method) ) + +------------------------------------------------------------------------------- +Random seed generation accepts known methods +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_NOTHROW( Catch::generateRandomSeed(method) ) + +------------------------------------------------------------------------------- +Random seed generation reports unknown methods +------------------------------------------------------------------------------- +RandomNumberGeneration.tests.cpp: +............................................................................... + +RandomNumberGeneration.tests.cpp:: PASSED: + REQUIRE_THROWS( Catch::generateRandomSeed(static_cast(77)) ) + +------------------------------------------------------------------------------- +Range type with sentinel +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{ }" ) +with expansion: + "{ }" == "{ }" + +------------------------------------------------------------------------------- +Reconstruction should be based on stringification: #914 +------------------------------------------------------------------------------- +Decomposition.tests.cpp: +............................................................................... + +Decomposition.tests.cpp:: FAILED: + CHECK( truthy(false) ) +with expansion: + Hey, its truthy! + +------------------------------------------------------------------------------- +Regex string matcher +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this STRING contains + 'abc' as a substring" case sensitively + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), Matches( "contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "contains 'abc' as a + substring" case sensitively + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this string contains 'abc' as a" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this string contains + 'abc' as a" case sensitively + +------------------------------------------------------------------------------- +Regression test #1 +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( actual, !UnorderedEquals( expected ) ) +with expansion: + { 'a', 'b' } not UnorderedEquals: { 'c', 'b' } + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + Automake reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: Automake + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + Automake reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: Automake + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + Automake reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: Automake + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + compact reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: compact + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + compact reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: compact + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + compact reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: compact + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + console reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: console + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + console reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: console + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + console reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: console + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + JUnit reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + " + All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: JUnit + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + JUnit reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + " + Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: JUnit + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + JUnit reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + " + All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: JUnit + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + SonarQube reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + " + All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: SonarQube + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + SonarQube reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + " + Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: SonarQube + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + SonarQube reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + " + All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: SonarQube + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TAP reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: TAP + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TAP reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: TAP + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TAP reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: TAP + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TeamCity reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "fakeTag" +with message: + Tested reporter: TeamCity + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TeamCity reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" +with message: + Tested reporter: TeamCity + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + TeamCity reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: TeamCity + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + XML reporter lists tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fakeTag"s) ) +with expansion: + " + + + 1 + + fakeTag + + + " contains: "fakeTag" +with message: + Tested reporter: XML + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + XML reporter lists reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + " + + + fake reporter + fake description + + " contains: "fake reporter" +with message: + Tested reporter: XML + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_FALSE( factories.empty() ) +with expansion: + !false + +------------------------------------------------------------------------------- +Reporter's write listings to provided stream + XML reporter lists tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + " + + + fake test name + + [fakeTestTag] + + fake-file.cpp + 123456789 + + + " ( contains: "fake test name" and contains: "fakeTestTag" ) +with message: + Tested reporter: XML + +------------------------------------------------------------------------------- +Reproducer for #2309 - a very long description past 80 chars (default console +width) with a late colon : blablabla +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +SUCCEED counts as a test pass +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: +with message: + this is a success + +------------------------------------------------------------------------------- +SUCCEED does not require an argument +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or + methods + Given: No operations precede me +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( before == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or + methods + Given: No operations precede me + When: We get the count + Then: Subsequently values are higher +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( after > before ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Scenario: Do that thing with the thing + Given: This stuff exists + And given: And some assumption + When: I do this + Then: it should do this +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( itDoesThis() ) +with expansion: + true + +------------------------------------------------------------------------------- +Scenario: Do that thing with the thing + Given: This stuff exists + And given: And some assumption + When: I do this + Then: it should do this + And: do that +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( itDoesThat() ) +with expansion: + true + +------------------------------------------------------------------------------- +Scenario: This is a really long scenario name to see how the list command deals + with wrapping + Given: A section name that is so long that it cannot fit in a single + console width + When: The test headers are printed as part of the normal running of the + scenario + Then: The, deliberately very long and overly verbose (you see what I did + there?) section names must wrap, along with an indent +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: +with message: + boo! + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: it is made larger + Then: the size and capacity go up +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +BDD.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: it is made larger + Then: the size and capacity go up + And when: it is made smaller again + Then: the size goes down but the capacity stays the same +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +BDD.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: we reserve more space + Then: The capacity is increased but the size remains the same +------------------------------------------------------------------------------- +BDD.tests.cpp: +............................................................................... + +BDD.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +BDD.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Sends stuff to stdout and stderr +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + + +No assertions in test case 'Sends stuff to stdout and stderr' + +------------------------------------------------------------------------------- +Some simple comparisons between doubles +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d == Approx( 1.23 ) ) +with expansion: + 1.23 == Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != Approx( 1.22 ) ) +with expansion: + 1.23 != Approx( 1.22 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != Approx( 1.24 ) ) +with expansion: + 1.23 != Approx( 1.24 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == 1.23_a ) +with expansion: + 1.23 == Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != 1.22_a ) +with expansion: + 1.23 != Approx( 1.22 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx( d ) == 1.23 ) +with expansion: + Approx( 1.23 ) == 1.23 + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx( d ) != 1.22 ) +with expansion: + Approx( 1.23 ) != 1.22 + +Approx.tests.cpp:: PASSED: + REQUIRE( Approx( d ) != 1.24 ) +with expansion: + Approx( 1.23 ) != 1.24 + +------------------------------------------------------------------------------- +Standard output from all sections is reported + one +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + + +No assertions in section 'one' + +------------------------------------------------------------------------------- +Standard output from all sections is reported + two +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + + +No assertions in section 'two' + +------------------------------------------------------------------------------- +StartsWith string matcher +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "This String" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "This String" + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "string" (case + insensitive) + +------------------------------------------------------------------------------- +Static arrays are convertible to string + Single item +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify(singular) == "{ 1 }" ) +with expansion: + "{ 1 }" == "{ 1 }" + +------------------------------------------------------------------------------- +Static arrays are convertible to string + Multiple +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify(arr) == "{ 3, 2, 1 }" ) +with expansion: + "{ 3, 2, 1 }" == "{ 3, 2, 1 }" + +------------------------------------------------------------------------------- +Static arrays are convertible to string + Non-trivial inner items +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify(arr) == R"({ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } })" ) +with expansion: + "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" + == + "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" + +------------------------------------------------------------------------------- +String matchers +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( testStringForMatching(), ContainsSubstring( "string" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "string" + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( testStringForMatching(), ContainsSubstring( "string", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "string" (case + insensitive) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "abc" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "abc" + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "aBC", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "abc" (case + insensitive) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), StartsWith( "this" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "this" + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), StartsWith( "THIS", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "this" (case + insensitive) + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "substring" + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( testStringForMatching(), EndsWith( " SuBsTrInG", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: " substring" (case + insensitive) + +------------------------------------------------------------------------------- +StringRef + Empty string +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( empty.empty() ) +with expansion: + true + +String.tests.cpp:: PASSED: + REQUIRE( empty.size() == 0 ) +with expansion: + 0 == 0 + +String.tests.cpp:: PASSED: + REQUIRE( std::strcmp( empty.data(), "" ) == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +StringRef + From string literal +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( s.empty() == false ) +with expansion: + false == false + +String.tests.cpp:: PASSED: + REQUIRE( s.size() == 5 ) +with expansion: + 5 == 5 + +String.tests.cpp:: PASSED: + REQUIRE( std::strcmp( rawChars, "hello" ) == 0 ) +with expansion: + 0 == 0 + +String.tests.cpp:: PASSED: + REQUIRE( s.data() == rawChars ) +with expansion: + "hello" == "hello" + +------------------------------------------------------------------------------- +StringRef + From sub-string +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( original == "original" ) + +String.tests.cpp:: PASSED: + REQUIRE_NOTHROW( original.data() ) + +------------------------------------------------------------------------------- +StringRef + Copy construction is shallow +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( original.begin() == copy.begin() ) +with expansion: + "original string" == "original string" + +------------------------------------------------------------------------------- +StringRef + Copy assignment is shallow +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( original.begin() == copy.begin() ) +with expansion: + "original string" == "original string" + +------------------------------------------------------------------------------- +StringRef + Substrings + zero-based substring +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( ss.empty() == false ) +with expansion: + false == false + +String.tests.cpp:: PASSED: + REQUIRE( ss.size() == 5 ) +with expansion: + 5 == 5 + +String.tests.cpp:: PASSED: + REQUIRE( std::strncmp( ss.data(), "hello", 5 ) == 0 ) +with expansion: + 0 == 0 + +String.tests.cpp:: PASSED: + REQUIRE( ss == "hello" ) +with expansion: + hello == "hello" + +------------------------------------------------------------------------------- +StringRef + Substrings + non-zero-based substring +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( ss.size() == 6 ) +with expansion: + 6 == 6 + +String.tests.cpp:: PASSED: + REQUIRE( std::strcmp( ss.data(), "world!" ) == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +StringRef + Substrings + Pointer values of full refs should match +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( s.data() == s2.data() ) +with expansion: + "hello world!" == "hello world!" + +------------------------------------------------------------------------------- +StringRef + Substrings + Pointer values of substring refs should also match +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( s.data() == ss.data() ) +with expansion: + "hello world!" == "hello world!" + +------------------------------------------------------------------------------- +StringRef + Substrings + Past the end substring +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( s.substr(s.size() + 1, 123).empty() ) +with expansion: + true + +------------------------------------------------------------------------------- +StringRef + Substrings + Substring off the end are trimmed +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( std::strcmp(ss.data(), "world!") == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +StringRef + Substrings + substring start after the end is empty +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( s.substr(1'000'000, 1).empty() ) +with expansion: + true + +------------------------------------------------------------------------------- +StringRef + Comparisons are deep +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + CHECK( reinterpret_cast(buffer1) != reinterpret_cast(buffer2) ) +with expansion: + "Hello" != "Hello" + +String.tests.cpp:: PASSED: + REQUIRE( left == right ) +with expansion: + Hello == Hello + +String.tests.cpp:: PASSED: + REQUIRE( left != left.substr(0, 3) ) +with expansion: + Hello != Hel + +------------------------------------------------------------------------------- +StringRef + from std::string + implicitly constructed +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( sr == "a standard string" ) +with expansion: + a standard string == "a standard string" + +String.tests.cpp:: PASSED: + REQUIRE( sr.size() == stdStr.size() ) +with expansion: + 17 == 17 + +------------------------------------------------------------------------------- +StringRef + from std::string + explicitly constructed +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( sr == "a standard string" ) +with expansion: + a standard string == "a standard string" + +String.tests.cpp:: PASSED: + REQUIRE( sr.size() == stdStr.size() ) +with expansion: + 17 == 17 + +------------------------------------------------------------------------------- +StringRef + from std::string + assigned +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( sr == "a standard string" ) +with expansion: + a standard string == "a standard string" + +String.tests.cpp:: PASSED: + REQUIRE( sr.size() == stdStr.size() ) +with expansion: + 17 == 17 + +------------------------------------------------------------------------------- +StringRef + to std::string + explicitly constructed +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( stdStr == "a stringref" ) +with expansion: + "a stringref" == "a stringref" + +String.tests.cpp:: PASSED: + REQUIRE( stdStr.size() == sr.size() ) +with expansion: + 11 == 11 + +------------------------------------------------------------------------------- +StringRef + to std::string + assigned +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( stdStr == "a stringref" ) +with expansion: + "a stringref" == "a stringref" + +String.tests.cpp:: PASSED: + REQUIRE( stdStr.size() == sr.size() ) +with expansion: + 11 == 11 + +------------------------------------------------------------------------------- +StringRef + std::string += StringRef +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( lhs == "some string += the stringref contents" ) +with expansion: + "some string += the stringref contents" + == + "some string += the stringref contents" + +------------------------------------------------------------------------------- +StringRef + StringRef + StringRef +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: + REQUIRE( together == "abrakadabra" ) +with expansion: + "abrakadabra" == "abrakadabra" + +------------------------------------------------------------------------------- +StringRef at compilation time + Simple constructors +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: +with message: + empty.size() == 0 + +String.tests.cpp:: PASSED: +with message: + empty.begin() == empty.end() + +String.tests.cpp:: PASSED: +with message: + stringref.size() == 3 + +String.tests.cpp:: PASSED: +with message: + stringref.data() == abc + +String.tests.cpp:: PASSED: +with message: + stringref.begin() == abc + +String.tests.cpp:: PASSED: +with message: + stringref.begin() != stringref.end() + +String.tests.cpp:: PASSED: +with message: + stringref.substr(10, 0).empty() + +String.tests.cpp:: PASSED: +with message: + stringref.substr(2, 1).data() == abc + 2 + +String.tests.cpp:: PASSED: +with message: + stringref[1] == 'b' + +String.tests.cpp:: PASSED: +with message: + shortened.size() == 2 + +String.tests.cpp:: PASSED: +with message: + shortened.data() == abc + +String.tests.cpp:: PASSED: +with message: + shortened.begin() != shortened.end() + +------------------------------------------------------------------------------- +StringRef at compilation time + UDL construction +------------------------------------------------------------------------------- +String.tests.cpp: +............................................................................... + +String.tests.cpp:: PASSED: +with message: + !(sr1.empty()) + +String.tests.cpp:: PASSED: +with message: + sr1.size() == 3 + +String.tests.cpp:: PASSED: +with message: + sr2.empty() + +String.tests.cpp:: PASSED: +with message: + sr2.size() == 0 + +------------------------------------------------------------------------------- +Stringifying char arrays with statically known sizes - char +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +------------------------------------------------------------------------------- +Stringifying char arrays with statically known sizes - signed char +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +------------------------------------------------------------------------------- +Stringifying char arrays with statically known sizes - unsigned char +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +ToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s ) +with expansion: + ""abc"" == ""abc"" + +------------------------------------------------------------------------------- +Stringifying std::chrono::duration helpers +------------------------------------------------------------------------------- +ToStringChrono.tests.cpp: +............................................................................... + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( minute == seconds ) +with expansion: + 1 m == 60 s + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( hour != seconds ) +with expansion: + 1 h != 60 s + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( micro != milli ) +with expansion: + 1 us != 1 ms + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( nano != micro ) +with expansion: + 1 ns != 1 us + +------------------------------------------------------------------------------- +Stringifying std::chrono::duration with weird ratios +------------------------------------------------------------------------------- +ToStringChrono.tests.cpp: +............................................................................... + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( half_minute != femto_second ) +with expansion: + 1 [30/1]s != 1 fs + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( pico_second != atto_second ) +with expansion: + 1 ps != 1 as + +------------------------------------------------------------------------------- +Stringifying std::chrono::time_point +------------------------------------------------------------------------------- +ToStringChrono.tests.cpp: +............................................................................... + +ToStringChrono.tests.cpp:: PASSED: + REQUIRE( now != later ) +with expansion: + {iso8601-timestamp} + != + {iso8601-timestamp} + +------------------------------------------------------------------------------- +Tabs and newlines show in output +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + CHECK( s1 == s2 ) +with expansion: + "if ($b == 10) { + $a = 20; + }" + == + "if ($b == 10) { + $a = 20; + } + " + +------------------------------------------------------------------------------- +Tag alias can be registered against tag patterns + The same tag alias can only be registered once +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + CHECK_THAT( what, ContainsSubstring( "[@zzz]" ) ) +with expansion: + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "[@zzz]" + +Tag.tests.cpp:: PASSED: + CHECK_THAT( what, ContainsSubstring( "file" ) ) +with expansion: + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "file" + +Tag.tests.cpp:: PASSED: + CHECK_THAT( what, ContainsSubstring( "2" ) ) +with expansion: + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "2" + +Tag.tests.cpp:: PASSED: + CHECK_THAT( what, ContainsSubstring( "10" ) ) +with expansion: + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "10" + +------------------------------------------------------------------------------- +Tag alias can be registered against tag patterns + Tag aliases must be of the form [@name] +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +Tag.tests.cpp:: PASSED: + CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +Tag.tests.cpp:: PASSED: + CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +Tag.tests.cpp:: PASSED: + CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +------------------------------------------------------------------------------- +Tags with spaces and non-alphanumerical characters are accepted +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE( testCase.tags.size() == 2 ) +with expansion: + 2 == 2 + +Tag.tests.cpp:: PASSED: + REQUIRE_THAT( testCase.tags, VectorContains( Tag( "tag with spaces" ) ) && VectorContains( Tag( "I said \"good day\" sir!"_catch_sr ) ) ) +with expansion: + { {?}, {?} } ( Contains: {?} and Contains: {?} ) + +------------------------------------------------------------------------------- +Template test case method with test types specified inside std::tuple - MyTypes +- 0 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Template test case method with test types specified inside std::tuple - MyTypes +- 1 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +Template test case method with test types specified inside std::tuple - MyTypes +- 2 +------------------------------------------------------------------------------- +Class.tests.cpp: +............................................................................... + +Class.tests.cpp:: PASSED: + REQUIRE( Template_Fixture::m_a == 1 ) +with expansion: + 1.0 == 1 + +------------------------------------------------------------------------------- +Template test case with test types specified inside non-copyable and non- +movable std::tuple - NonCopyableAndNonMovableTypes - 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside non-copyable and non- +movable std::tuple - NonCopyableAndNonMovableTypes - 1 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 4 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside non-default-constructible +std::tuple - MyNonDefaultConstructibleTypes - 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside non-default-constructible +std::tuple - MyNonDefaultConstructibleTypes - 1 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 4 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside std::tuple - MyTypes - 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 4 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside std::tuple - MyTypes - 1 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 1 > 0 + +------------------------------------------------------------------------------- +Template test case with test types specified inside std::tuple - MyTypes - 2 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( sizeof(TestType) > 0 ) +with expansion: + 4 > 0 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - float + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - int + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::string + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTest: vectors can be sized and resized - std::tuple + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 2 * V ) +with expansion: + 12 == 12 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 12 >= 12 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 12 >= 12 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 6 == 6 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 6 >= 6 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 2 * V ) +with expansion: + 8 == 8 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 8 >= 8 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 8 >= 8 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - float,4 + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 4 == 4 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 4 >= 4 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 2 * V ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - int,5 + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 2 * V ) +with expansion: + 30 == 30 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 30 >= 30 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 2 * V ) +with expansion: + 30 >= 30 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +TemplateTestSig: vectors can be sized and resized - std::string,15 + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == V ) +with expansion: + 15 == 15 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= V ) +with expansion: + 15 >= 15 + +------------------------------------------------------------------------------- +Test case with identical tags keeps just one +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE( testCase.tags.size() == 1 ) +with expansion: + 1 == 1 + +Tag.tests.cpp:: PASSED: + REQUIRE( testCase.tags[0] == Tag( "tag1" ) ) +with expansion: + {?} == {?} + +------------------------------------------------------------------------------- +Test case with one argument +------------------------------------------------------------------------------- +VariadicMacros.tests.cpp: +............................................................................... + +VariadicMacros.tests.cpp:: PASSED: +with message: + no assertions + +------------------------------------------------------------------------------- +Test enum bit values +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( 0x == bit30and31 ) +with expansion: + 3221225472 (0x) == 3221225472 + +------------------------------------------------------------------------------- +Test with special, characters "in name +------------------------------------------------------------------------------- +CmdLine.tests.cpp: +............................................................................... + +CmdLine.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +Testing checked-if +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECKED_IF( true ) + +Misc.tests.cpp:: PASSED: + +Misc.tests.cpp:: FAILED - but was ok: + CHECKED_IF( false ) + +Misc.tests.cpp:: PASSED: + CHECKED_ELSE( true ) + +Misc.tests.cpp:: FAILED - but was ok: + CHECKED_ELSE( false ) + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +Testing checked-if 2 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECKED_IF( true ) + +Misc.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +Testing checked-if 3 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED - but was ok: + CHECKED_ELSE( false ) + +Misc.tests.cpp:: FAILED: + +------------------------------------------------------------------------------- +The NO_FAIL macro reports a failure but does not fail the test +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED - but was ok: + CHECK_NOFAIL( 1 == 2 ) + + +No assertions in test case 'The NO_FAIL macro reports a failure but does not fail the test' + +------------------------------------------------------------------------------- +The default listing implementation write to provided stream + Listing tags +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("[fakeTag]"s) ) +with expansion: + "All available tags: + 1 [fakeTag] + 1 tag + +" contains: "[fakeTag]" + +------------------------------------------------------------------------------- +The default listing implementation write to provided stream + Listing reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring("fake reporter"s) ) +with expansion: + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + +------------------------------------------------------------------------------- +The default listing implementation write to provided stream + Listing tests +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE_THAT( listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) ) +with expansion: + "All available test cases: + fake test name + [fakeTestTag] + 1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + +------------------------------------------------------------------------------- +This test 'should' fail but doesn't +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: +with message: + oops! + +------------------------------------------------------------------------------- +Thrown string literals are translated +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + For some reason someone is throwing a string literal! + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + successfully close one section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isSuccessfullyCompleted() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isSuccessfullyCompleted() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + fail one section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + fail one section + re-enter after failed section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1b.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isSuccessfullyCompleted() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + fail one section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + fail one section + re-enter after failed section and find next section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1b.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isSuccessfullyCompleted() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another + Re-enter - skips S1 and enters S2 +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1b.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2b.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another + Re-enter - skips S1 and enters S2 + Successfully close S2 +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2b.isSuccessfullyCompleted() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isSuccessfullyCompleted() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another + Re-enter - skips S1 and enters S2 +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1b.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2b.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Tracker + successfully close one section, then find another + Re-enter - skips S1 and enters S2 + fail S2 +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( ctx.completedCycle() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2b.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2b.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase2.isSuccessfullyCompleted() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase3.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1c.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2c.isOpen() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase3.isSuccessfullyCompleted() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isOpen() ) +with expansion: + true + +------------------------------------------------------------------------------- +Tracker + open a nested section +------------------------------------------------------------------------------- +PartTracker.tests.cpp: +............................................................................... + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2.isOpen() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s2.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( s1.isComplete() ) +with expansion: + true + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() == false ) +with expansion: + false == false + +PartTracker.tests.cpp:: PASSED: + REQUIRE( testCase.isComplete() ) +with expansion: + true + +------------------------------------------------------------------------------- +Trim strings +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(std::string(no_whitespace)) == no_whitespace ) +with expansion: + "There is no extra whitespace here" + == + "There is no extra whitespace here" + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(std::string(leading_whitespace)) == no_whitespace ) +with expansion: + "There is no extra whitespace here" + == + "There is no extra whitespace here" + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(std::string(trailing_whitespace)) == no_whitespace ) +with expansion: + "There is no extra whitespace here" + == + "There is no extra whitespace here" + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(std::string(whitespace_at_both_ends)) == no_whitespace ) +with expansion: + "There is no extra whitespace here" + == + "There is no extra whitespace here" + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(StringRef(no_whitespace)) == StringRef(no_whitespace) ) +with expansion: + There is no extra whitespace here + == + There is no extra whitespace here + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) ) +with expansion: + There is no extra whitespace here + == + There is no extra whitespace here + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) ) +with expansion: + There is no extra whitespace here + == + There is no extra whitespace here + +StringManip.tests.cpp:: PASSED: + REQUIRE( trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) ) +with expansion: + There is no extra whitespace here + == + There is no extra whitespace here + +------------------------------------------------------------------------------- +Unexpected exceptions can be translated +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + 3.14 + +------------------------------------------------------------------------------- +Upcasting special member functions + Move constructor +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( bptr->i == 3 ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +Upcasting special member functions + move assignment +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( bptr->i == 3 ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +Usage of AllMatch range matcher + Basic usage +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, AllMatch(SizeIs(5)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } all match has size == 5 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, !AllMatch(Contains(0) && Contains(1)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } not all match ( contains element 0 and contains + element 1 ) + +------------------------------------------------------------------------------- +Usage of AllMatch range matcher + Type requires ADL found begin and end +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( needs_adl, AllMatch( Predicate( []( int elem ) { return elem < 6; } ) ) ) +with expansion: + { 1, 2, 3, 4, 5 } all match matches undescribed predicate + +------------------------------------------------------------------------------- +Usage of AllMatch range matcher + Shortcircuiting + All are read +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, allMatch ) +with expansion: + { 1, 2, 3, 4, 5 } all match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[1] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[2] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[3] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[4] ) +with expansion: + true + +------------------------------------------------------------------------------- +Usage of AllMatch range matcher + Shortcircuiting + Short-circuited +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, !allMatch ) +with expansion: + { 1, 2, 3, 4, 5 } not all match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[1] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[2] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[3] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[4] ) +with expansion: + !false + +------------------------------------------------------------------------------- +Usage of AnyMatch range matcher + Basic usage +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, AnyMatch(SizeIs(5)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } any match has size == 5 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, !AnyMatch(Contains(0) && Contains(10)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } not any match ( contains element 0 and contains + element 10 ) + +------------------------------------------------------------------------------- +Usage of AnyMatch range matcher + Type requires ADL found begin and end +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( needs_adl, AnyMatch( Predicate( []( int elem ) { return elem < 3; } ) ) ) +with expansion: + { 1, 2, 3, 4, 5 } any match matches undescribed predicate + +------------------------------------------------------------------------------- +Usage of AnyMatch range matcher + Shortcircuiting + All are read +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, !anyMatch ) +with expansion: + { 1, 2, 3, 4, 5 } not any match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[1] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[2] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[3] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[4] ) +with expansion: + true + +------------------------------------------------------------------------------- +Usage of AnyMatch range matcher + Shortcircuiting + Short-circuited +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, anyMatch ) +with expansion: + { 1, 2, 3, 4, 5 } any match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[1] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[2] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[3] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[4] ) +with expansion: + !false + +------------------------------------------------------------------------------- +Usage of NoneMatch range matcher + Basic usage +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, NoneMatch(SizeIs(6)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } none match has size == 6 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( data, !NoneMatch(Contains(0) && Contains(1)) ) +with expansion: + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 + }, { 1, 0, 0, -1, 5 } } not none match ( contains element 0 and contains + element 1 ) + +------------------------------------------------------------------------------- +Usage of NoneMatch range matcher + Type requires ADL found begin and end +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( needs_adl, NoneMatch( Predicate( []( int elem ) { return elem > 6; } ) ) ) +with expansion: + { 1, 2, 3, 4, 5 } none match matches undescribed predicate + +------------------------------------------------------------------------------- +Usage of NoneMatch range matcher + Shortcircuiting + All are read +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, noneMatch ) +with expansion: + { 1, 2, 3, 4, 5 } none match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[1] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[2] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[3] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[4] ) +with expansion: + true + +------------------------------------------------------------------------------- +Usage of NoneMatch range matcher + Shortcircuiting + Short-circuited +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( mocked, !noneMatch ) +with expansion: + { 1, 2, 3, 4, 5 } not none match matches undescribed predicate + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE( mocked.derefed[0] ) +with expansion: + true + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[1] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[2] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[3] ) +with expansion: + !false + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_FALSE( mocked.derefed[4] ) +with expansion: + !false + +------------------------------------------------------------------------------- +Usage of the SizeIs range matcher + Some with stdlib containers +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( empty_vec, SizeIs(0) ) +with expansion: + { } has size == 0 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( empty_vec, !SizeIs(2) ) +with expansion: + { } not has size == 2 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( empty_vec, SizeIs(Lt(2)) ) +with expansion: + { } size matches is less than 2 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( arr, SizeIs(2) ) +with expansion: + { 0, 0 } has size == 2 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( arr, SizeIs( Lt(3)) ) +with expansion: + { 0, 0 } size matches is less than 3 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( arr, !SizeIs(!Lt(3)) ) +with expansion: + { 0, 0 } not size matches not is less than 3 + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( map, SizeIs(3) ) +with expansion: + { {?}, {?}, {?} } has size == 3 + +------------------------------------------------------------------------------- +Usage of the SizeIs range matcher + Type requires ADL found size free function +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( unrelated::ADL_size{}, SizeIs(12) ) +with expansion: + {?} has size == 12 + +------------------------------------------------------------------------------- +Usage of the SizeIs range matcher + Type has size member +------------------------------------------------------------------------------- +MatchersRanges.tests.cpp: +............................................................................... + +MatchersRanges.tests.cpp:: PASSED: + REQUIRE_THAT( has_size{}, SizeIs(13) ) +with expansion: + {?} has size == 13 + +------------------------------------------------------------------------------- +Use a custom approx +------------------------------------------------------------------------------- +Approx.tests.cpp: +............................................................................... + +Approx.tests.cpp:: PASSED: + REQUIRE( d == approx( 1.23 ) ) +with expansion: + 1.23 == Approx( 1.23 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == approx( 1.22 ) ) +with expansion: + 1.23 == Approx( 1.22 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d == approx( 1.24 ) ) +with expansion: + 1.23 == Approx( 1.24 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( d != approx( 1.25 ) ) +with expansion: + 1.23 != Approx( 1.25 ) + +Approx.tests.cpp:: PASSED: + REQUIRE( approx( d ) == 1.23 ) +with expansion: + Approx( 1.23 ) == 1.23 + +Approx.tests.cpp:: PASSED: + REQUIRE( approx( d ) == 1.22 ) +with expansion: + Approx( 1.23 ) == 1.22 + +Approx.tests.cpp:: PASSED: + REQUIRE( approx( d ) == 1.24 ) +with expansion: + Approx( 1.23 ) == 1.24 + +Approx.tests.cpp:: PASSED: + REQUIRE( approx( d ) != 1.25 ) +with expansion: + Approx( 1.23 ) != 1.25 + +------------------------------------------------------------------------------- +Variadic macros + Section with one argument +------------------------------------------------------------------------------- +VariadicMacros.tests.cpp: +............................................................................... + +VariadicMacros.tests.cpp:: PASSED: +with message: + no assertions + +------------------------------------------------------------------------------- +Vector Approx matcher + Empty vector is roughly equal to an empty vector +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( empty, Approx( empty ) ) +with expansion: + { } is approx: { } + +------------------------------------------------------------------------------- +Vector Approx matcher + Vectors with elements + A vector is approx equal to itself +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, Approx( v1 ) ) +with expansion: + { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, Approx( { 1., 2., 3. } ) ) +with expansion: + { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } + +------------------------------------------------------------------------------- +Vector Approx matcher + Vectors with elements + Different length +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, !Approx( temp ) ) +with expansion: + { 1.0, 2.0, 3.0 } not is approx: { 1.0, 2.0, 3.0, 4.0 } + +------------------------------------------------------------------------------- +Vector Approx matcher + Vectors with elements + Same length, different elements +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, !Approx( v2 ) ) +with expansion: + { 1.0, 2.0, 3.0 } not is approx: { 1.5, 2.5, 3.5 } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, Approx( v2 ).margin( 0.5 ) ) +with expansion: + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, Approx( v2 ).epsilon( 0.5 ) ) +with expansion: + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( v1, Approx( v2 ).epsilon( 0.1 ).scale( 500 ) ) +with expansion: + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + +------------------------------------------------------------------------------- +Vector Approx matcher -- failing + Empty and non empty vectors are not approx equal +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( empty, Approx( t1 ) ) +with expansion: + { } is approx: { 1.0, 2.0 } + +------------------------------------------------------------------------------- +Vector Approx matcher -- failing + Just different vectors +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v1, Approx( v2 ) ) +with expansion: + { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } + +------------------------------------------------------------------------------- +Vector matchers + Contains (element) +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, VectorContains( 1 ) ) +with expansion: + { 1, 2, 3 } Contains: 1 + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, VectorContains( 2 ) ) +with expansion: + { 1, 2, 3 } Contains: 2 + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, ( VectorContains>( 2 ) ) ) +with expansion: + { 1, 2, 3 } Contains: 2 + +------------------------------------------------------------------------------- +Vector matchers + Contains (vector) +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Contains( v2 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Contains( { 1, 2 } ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, ( Contains, CustomAllocator>( v2 ) ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Contains( v2 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Contains( empty ) ) +with expansion: + { 1, 2, 3 } Contains: { } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( empty, Contains( empty ) ) +with expansion: + { } Contains: { } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, ( Contains, CustomAllocator>( v2 ) ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, Contains( v6 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2 } + +------------------------------------------------------------------------------- +Vector matchers + Contains (element), composed +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, VectorContains( 1 ) && VectorContains( 2 ) ) +with expansion: + { 1, 2, 3 } ( Contains: 1 and Contains: 2 ) + +------------------------------------------------------------------------------- +Vector matchers + Equals +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Equals( v ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( empty, Equals( empty ) ) +with expansion: + { } Equals: { } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Equals( { 1, 2, 3 } ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, Equals( v2 ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, ( Equals, CustomAllocator>( v2 ) ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, Equals( v6 ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2, 3 } + +------------------------------------------------------------------------------- +Vector matchers + UnorderedEquals +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, UnorderedEquals( v ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v, UnorderedEquals( { 3, 2, 1 } ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { 3, 2, 1 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( empty, UnorderedEquals( empty ) ) +with expansion: + { } UnorderedEquals: { } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + REQUIRE_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 2, 3, 1 } UnorderedEquals: { 1, 2, 3 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5, ( UnorderedEquals, CustomAllocator>( permuted ) ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { 2, 3, 1 } + +Matchers.tests.cpp:: PASSED: + CHECK_THAT( v5_permuted, UnorderedEquals( v5 ) ) +with expansion: + { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } + +------------------------------------------------------------------------------- +Vector matchers that fail + Contains (element) +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v, VectorContains( -1 ) ) +with expansion: + { 1, 2, 3 } Contains: -1 + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( empty, VectorContains( 1 ) ) +with expansion: + { } Contains: 1 + +------------------------------------------------------------------------------- +Vector matchers that fail + Contains (vector) +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( empty, Contains( v ) ) +with expansion: + { } Contains: { 1, 2, 3 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v, Contains( v2 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2, 4 } + +------------------------------------------------------------------------------- +Vector matchers that fail + Equals +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v, Equals( v2 ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v2, Equals( v ) ) +with expansion: + { 1, 2 } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( empty, Equals( v ) ) +with expansion: + { } Equals: { 1, 2, 3 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v, Equals( empty ) ) +with expansion: + { 1, 2, 3 } Equals: { } + +------------------------------------------------------------------------------- +Vector matchers that fail + UnorderedEquals +------------------------------------------------------------------------------- +Matchers.tests.cpp: +............................................................................... + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( v, UnorderedEquals( empty ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( empty, UnorderedEquals( v ) ) +with expansion: + { } UnorderedEquals: { 1, 2, 3 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 1, 3 } UnorderedEquals: { 1, 2, 3 } + +Matchers.tests.cpp:: FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 3, 1 } UnorderedEquals: { 1, 2, 3 } + +------------------------------------------------------------------------------- +When checked exceptions are thrown they can be expected or unexpected +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS_AS( thisThrows(), std::domain_error ) + +Exception.tests.cpp:: PASSED: + REQUIRE_NOTHROW( thisDoesntThrow() ) + +Exception.tests.cpp:: PASSED: + REQUIRE_THROWS( thisThrows() ) + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown directly they are always failures +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + unexpected exception + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown during a CHECK the test should continue +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + CHECK( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown during a REQUIRE the test should abort +fail +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + REQUIRE( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown from functions they are always failures +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: + CHECK( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown from sections they are always failures + section name +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + unexpected exception + +------------------------------------------------------------------------------- +When unchecked exceptions are thrown, but caught, they do not affect the test +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + + +No assertions in test case 'When unchecked exceptions are thrown, but caught, they do not affect the test' + +------------------------------------------------------------------------------- +X/level/0/a +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +X/level/0/b +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +X/level/1/a +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +X/level/1/b +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +XmlEncode + normal string +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "normal string" ) == "normal string" ) +with expansion: + "normal string" == "normal string" + +------------------------------------------------------------------------------- +XmlEncode + empty string +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "" ) == "" ) +with expansion: + "" == "" + +------------------------------------------------------------------------------- +XmlEncode + string with ampersand +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "smith & jones" ) == "smith & jones" ) +with expansion: + "smith & jones" == "smith & jones" + +------------------------------------------------------------------------------- +XmlEncode + string with less-than +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "smith < jones" ) == "smith < jones" ) +with expansion: + "smith < jones" == "smith < jones" + +------------------------------------------------------------------------------- +XmlEncode + string with greater-than +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "smith > jones" ) == "smith > jones" ) +with expansion: + "smith > jones" == "smith > jones" + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "smith ]]> jones" ) == "smith ]]> jones" ) +with expansion: + "smith ]]> jones" + == + "smith ]]> jones" + +------------------------------------------------------------------------------- +XmlEncode + string with quotes +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( stringWithQuotes ) == stringWithQuotes ) +with expansion: + "don't "quote" me on that" + == + "don't "quote" me on that" + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" ) +with expansion: + "don't "quote" me on that" + == + "don't "quote" me on that" + +------------------------------------------------------------------------------- +XmlEncode + string with control char (1) +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "[\x01]" ) == "[\\x01]" ) +with expansion: + "[\x01]" == "[\x01]" + +------------------------------------------------------------------------------- +XmlEncode + string with control char (x7F) +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE( encode( "[\x7F]" ) == "[\\x7F]" ) +with expansion: + "[\x7F]" == "[\x7F]" + +------------------------------------------------------------------------------- +XmlWriter writes boolean attributes as true/false +------------------------------------------------------------------------------- +Xml.tests.cpp: +............................................................................... + +Xml.tests.cpp:: PASSED: + REQUIRE_THAT( stream.str(), ContainsSubstring(R"(attr1="true")") && ContainsSubstring(R"(attr2="false")") ) +with expansion: + " + + " ( contains: "attr1="true"" and contains: "attr2="false"" ) + +------------------------------------------------------------------------------- +analyse no analysis +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.mean.point.count() == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.mean.lower_bound.count() == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.mean.upper_bound.count() == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.standard_deviation.point.count() == 0 ) +with expansion: + 0.0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.standard_deviation.lower_bound.count() == 0 ) +with expansion: + 0.0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.standard_deviation.upper_bound.count() == 0 ) +with expansion: + 0.0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.total() == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.low_mild == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.low_severe == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.high_mild == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.high_severe == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outliers.samples_seen == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( analysis.outlier_variance == 0 ) +with expansion: + 0.0 == 0 + +------------------------------------------------------------------------------- +array -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( empty ) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( oneValue ) == "{ 42 }" ) +with expansion: + "{ 42 }" == "{ 42 }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" ) +with expansion: + "{ 42, 250 }" == "{ 42, 250 }" + +------------------------------------------------------------------------------- +benchmark function call + without chronometer +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.started == 1 ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.finished == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.started == 1 ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.finished == 1 ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( called == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +benchmark function call + with chronometer +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.started == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.finished == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.started == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( model.finished == 0 ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( called == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +boolean member +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( obj.prop != 0 ) +with expansion: + 0x != 0 + +------------------------------------------------------------------------------- +checkedElse +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECKED_ELSE( flag ) +with expansion: + true + +Misc.tests.cpp:: PASSED: + REQUIRE( testCheckedElse( true ) ) +with expansion: + true + +------------------------------------------------------------------------------- +checkedElse, failing +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED - but was ok: + CHECKED_ELSE( flag ) +with expansion: + false + +Misc.tests.cpp:: FAILED: + REQUIRE( testCheckedElse( false ) ) +with expansion: + false + +------------------------------------------------------------------------------- +checkedIf +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECKED_IF( flag ) +with expansion: + true + +Misc.tests.cpp:: PASSED: + REQUIRE( testCheckedIf( true ) ) +with expansion: + true + +------------------------------------------------------------------------------- +checkedIf, failing +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED - but was ok: + CHECKED_IF( flag ) +with expansion: + false + +Misc.tests.cpp:: FAILED: + REQUIRE( testCheckedIf( false ) ) +with expansion: + false + +------------------------------------------------------------------------------- +classify_outliers + none +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +classify_outliers + low severe +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +classify_outliers + low mild +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +classify_outliers + high mild +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +classify_outliers + high severe +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +classify_outliers + mixed +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.samples_seen == static_cast(x.size()) ) +with expansion: + 6 == 6 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_severe == los ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.low_mild == lom ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_mild == him ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.high_severe == his ) +with expansion: + 0 == 0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( o.total() == los + lom + him + his ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +comparisons between const int variables +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( unsigned_char_var == 1 ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( unsigned_short_var == 1 ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( unsigned_int_var == 1 ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( unsigned_long_var == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +comparisons between int variables +------------------------------------------------------------------------------- +Condition.tests.cpp: +............................................................................... + +Condition.tests.cpp:: PASSED: + REQUIRE( long_var == unsigned_char_var ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( long_var == unsigned_short_var ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( long_var == unsigned_int_var ) +with expansion: + 1 == 1 + +Condition.tests.cpp:: PASSED: + REQUIRE( long_var == unsigned_long_var ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +convertToBits +------------------------------------------------------------------------------- +FloatingPoint.tests.cpp: +............................................................................... + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( 0.f ) == 0 ) +with expansion: + 0 == 0 + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( -0.f ) == ( 1ULL << 31 ) ) +with expansion: + 2147483648 (0x) + == + 2147483648 (0x) + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( 0. ) == 0 ) +with expansion: + 0 == 0 + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( -0. ) == ( 1ULL << 63 ) ) +with expansion: + 9223372036854775808 (0x) + == + 9223372036854775808 (0x) + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( std::numeric_limits::denorm_min() ) == 1 ) +with expansion: + 1 == 1 + +FloatingPoint.tests.cpp:: PASSED: + CHECK( convertToBits( std::numeric_limits::denorm_min() ) == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +empty tags are not allowed +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE_THROWS( Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo) ) + +------------------------------------------------------------------------------- +erfc_inv +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( erfc_inv(1.103560) == Approx(-0.09203687623843015) ) +with expansion: + -0.0920368762 == Approx( -0.0920368762 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( erfc_inv(1.067400) == Approx(-0.05980291115763361) ) +with expansion: + -0.0598029112 == Approx( -0.0598029112 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( erfc_inv(0.050000) == Approx(1.38590382434967796) ) +with expansion: + 1.3859038243 == Approx( 1.3859038243 ) + +------------------------------------------------------------------------------- +estimate_clock_resolution +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res.mean.count() == rate ) +with expansion: + 2000.0 == 2000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res.outliers.total() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +even more nested SECTION tests + c + d (leaf) +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +even more nested SECTION tests + c + e (leaf) +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +even more nested SECTION tests + f (leaf) +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +first tag +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + + +No assertions in test case 'first tag' + +------------------------------------------------------------------------------- +has printf +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + + +No assertions in test case 'has printf' + +------------------------------------------------------------------------------- +is_unary_function +------------------------------------------------------------------------------- +Clara.tests.cpp: +............................................................................... + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + Catch::Clara::Detail::is_unary_function::value + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +Clara.tests.cpp:: PASSED: +with message: + !(Catch::Clara::Detail::is_unary_function::value) + +------------------------------------------------------------------------------- +just failure +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + Previous info should not be seen + +------------------------------------------------------------------------------- +just failure after unscoped info +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: +explicitly with message: + previous unscoped info SHOULD not be seen + +------------------------------------------------------------------------------- +just info +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + + +No assertions in test case 'just info' + +------------------------------------------------------------------------------- +just unscoped info +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + + +No assertions in test case 'just unscoped info' + +------------------------------------------------------------------------------- +long long +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( l == std::numeric_limits::max() ) +with expansion: + 9223372036854775807 (0x) + == + 9223372036854775807 (0x) + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 0 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + CHECK( b > a ) +with expansion: + 0 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 1 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + CHECK( b > a ) +with expansion: + 1 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 2 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 2 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 3 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 3 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 4 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 4 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 5 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 5 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 6 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 6 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 7 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 7 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 8 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 8 > 1 + +------------------------------------------------------------------------------- +looped SECTION tests + b is currently: 9 +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( b > a ) +with expansion: + 9 > 1 + +------------------------------------------------------------------------------- +looped tests +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[0] (1) is even + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[1] (1) is even + +Misc.tests.cpp:: PASSED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 0 == 0 +with message: + Testing if fib[2] (2) is even + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[3] (3) is even + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[4] (5) is even + +Misc.tests.cpp:: PASSED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 0 == 0 +with message: + Testing if fib[5] (8) is even + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[6] (13) is even + +Misc.tests.cpp:: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +with message: + Testing if fib[7] (21) is even + +------------------------------------------------------------------------------- +make_unique reimplementation + From lvalue copies +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE_FALSE( lval.has_moved ) +with expansion: + !false + +------------------------------------------------------------------------------- +make_unique reimplementation + From rvalue moves +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( rval.has_moved ) +with expansion: + true + +------------------------------------------------------------------------------- +make_unique reimplementation + Variadic constructor +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr == std::tuple{1, 2., 3} ) +with expansion: + {?} == {?} + +------------------------------------------------------------------------------- +mean +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( m == 19. ) +with expansion: + 19.0 == 19.0 + +------------------------------------------------------------------------------- +measure +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x == 17 ) +with expansion: + 17 == 17 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x == 23 ) +with expansion: + 23 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( r.elapsed.count() == 42 ) +with expansion: + 42 == 42 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( r.result == 23 ) +with expansion: + 23 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( r.iterations == 1 ) +with expansion: + 1 == 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( s.elapsed.count() == 69 ) +with expansion: + 69 == 69 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( s.result == 17 ) +with expansion: + 17 == 17 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( s.iterations == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +mix info, unscoped info and warning +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: warning: + info + unscoped info + and warn may mix + +Message.tests.cpp:: warning: + info + unscoped info + they are not cleared after warnings + + +No assertions in test case 'mix info, unscoped info and warning' + +------------------------------------------------------------------------------- +more nested SECTION tests + doesn't equal + equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + REQUIRE( a == b ) +with expansion: + 1 == 2 + +------------------------------------------------------------------------------- +more nested SECTION tests + doesn't equal + not equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a != b ) +with expansion: + 1 != 2 + +------------------------------------------------------------------------------- +more nested SECTION tests + doesn't equal + less than +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a < b ) +with expansion: + 1 < 2 + +------------------------------------------------------------------------------- +nested SECTION tests + doesn't equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a != b ) +with expansion: + 1 != 2 + +Misc.tests.cpp:: PASSED: + REQUIRE( b != a ) +with expansion: + 2 != 1 + +------------------------------------------------------------------------------- +nested SECTION tests + doesn't equal + not equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a != b ) +with expansion: + 1 != 2 + +------------------------------------------------------------------------------- +non streamable - with conv. op +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( s == "7" ) +with expansion: + "7" == "7" + +------------------------------------------------------------------------------- +non-copyable objects +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + CHECK( ti == typeid(int) ) +with expansion: + {?} == {?} + +------------------------------------------------------------------------------- +normal_cdf +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_cdf(0.000000) == Approx(0.50000000000000000) ) +with expansion: + 0.5 == Approx( 0.5 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_cdf(1.000000) == Approx(0.84134474606854293) ) +with expansion: + 0.8413447461 == Approx( 0.8413447461 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_cdf(-1.000000) == Approx(0.15865525393145705) ) +with expansion: + 0.1586552539 == Approx( 0.1586552539 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_cdf(2.809729) == Approx(0.99752083845315409) ) +with expansion: + 0.9975208385 == Approx( 0.9975208385 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_cdf(-1.352570) == Approx(0.08809652095066035) ) +with expansion: + 0.088096521 == Approx( 0.088096521 ) + +------------------------------------------------------------------------------- +normal_quantile +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_quantile(0.551780) == Approx(0.13015979861484198) ) +with expansion: + 0.1301597986 == Approx( 0.1301597986 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_quantile(0.533700) == Approx(0.08457408802851875) ) +with expansion: + 0.084574088 == Approx( 0.084574088 ) + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( normal_quantile(0.025000) == Approx(-1.95996398454005449) ) +with expansion: + -1.9599639845 == Approx( -1.9599639845 ) + +------------------------------------------------------------------------------- +not allowed +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +not prints unscoped info from previous failures +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: + REQUIRE( true ) +with message: + this MAY be seen only for the FIRST assertion IF info is printed for passing + assertions + +Message.tests.cpp:: PASSED: + REQUIRE( true ) +with message: + this MAY be seen only for the SECOND assertion IF info is printed for passing + assertions + +Message.tests.cpp:: FAILED: + REQUIRE( false ) +with message: + this SHOULD be seen + +------------------------------------------------------------------------------- +null strings +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( makeString( false ) != static_cast(0) ) +with expansion: + "valid string" != {null string} + +Misc.tests.cpp:: PASSED: + REQUIRE( makeString( true ) == static_cast(0) ) +with expansion: + {null string} == {null string} + +------------------------------------------------------------------------------- +null_ptr +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( ptr.get() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +pair > -> toString +------------------------------------------------------------------------------- +ToStringPair.tests.cpp: +............................................................................... + +ToStringPair.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" ) +with expansion: + "{ { 42, "Arthur" }, { "Ford", 24 } }" + == + "{ { 42, "Arthur" }, { "Ford", 24 } }" + +------------------------------------------------------------------------------- +parseEnums + No enums +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "" ), Equals( std::vector{} ) ) +with expansion: + { } Equals: { } + +------------------------------------------------------------------------------- +parseEnums + One enum value +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector{"Value1"} ) ) +with expansion: + { Value1 } Equals: { Value1 } + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "Value1" ), Equals( std::vector{"Value1"} ) ) +with expansion: + { Value1 } Equals: { Value1 } + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "EnumName::Value1" ), Equals(std::vector{"Value1"} ) ) +with expansion: + { Value1 } Equals: { Value1 } + +------------------------------------------------------------------------------- +parseEnums + Multiple enum values +------------------------------------------------------------------------------- +ToString.tests.cpp: +............................................................................... + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector{"Value1", "Value2"} ) ) +with expansion: + { Value1, Value2 } Equals: { Value1, Value2 } + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) ) +with expansion: + { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } + +ToString.tests.cpp:: PASSED: + CHECK_THAT( parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) ) +with expansion: + { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } + +------------------------------------------------------------------------------- +pointer to class +------------------------------------------------------------------------------- +Tricky.tests.cpp: +............................................................................... + +Tricky.tests.cpp:: PASSED: + REQUIRE( p == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +print unscoped info if passing unscoped info is printed +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: PASSED: + REQUIRE( true ) +with message: + this MAY be seen IF info is printed for passing assertions + +------------------------------------------------------------------------------- +prints unscoped info on failure +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + REQUIRE( false ) +with messages: + this SHOULD be seen + this SHOULD also be seen + +------------------------------------------------------------------------------- +prints unscoped info only for the first assertion +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + CHECK( false ) +with message: + this SHOULD be seen only ONCE + +Message.tests.cpp:: PASSED: + CHECK( true ) + +Message.tests.cpp:: PASSED: + CHECK( true ) +with message: + this MAY also be seen only ONCE IF info is printed for passing assertions + +Message.tests.cpp:: PASSED: + CHECK( true ) + +------------------------------------------------------------------------------- +random SECTION tests + doesn't equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a != b ) +with expansion: + 1 != 2 + +Misc.tests.cpp:: PASSED: + REQUIRE( b != a ) +with expansion: + 2 != 1 + +------------------------------------------------------------------------------- +random SECTION tests + not equal +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( a != b ) +with expansion: + 1 != 2 + +------------------------------------------------------------------------------- +replaceInPlace + replace single char +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(letters, "b", "z") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( letters == "azcdefcg" ) +with expansion: + "azcdefcg" == "azcdefcg" + +------------------------------------------------------------------------------- +replaceInPlace + replace two chars +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(letters, "c", "z") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( letters == "abzdefzg" ) +with expansion: + "abzdefzg" == "abzdefzg" + +------------------------------------------------------------------------------- +replaceInPlace + replace first char +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(letters, "a", "z") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( letters == "zbcdefcg" ) +with expansion: + "zbcdefcg" == "zbcdefcg" + +------------------------------------------------------------------------------- +replaceInPlace + replace last char +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(letters, "g", "z") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( letters == "abcdefcz" ) +with expansion: + "abcdefcz" == "abcdefcz" + +------------------------------------------------------------------------------- +replaceInPlace + replace all chars +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(letters, letters, "replaced") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( letters == "replaced" ) +with expansion: + "replaced" == "replaced" + +------------------------------------------------------------------------------- +replaceInPlace + replace no chars +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK_FALSE( Catch::replaceInPlace(letters, "x", "z") ) +with expansion: + !false + +StringManip.tests.cpp:: PASSED: + CHECK( letters == letters ) +with expansion: + "abcdefcg" == "abcdefcg" + +------------------------------------------------------------------------------- +replaceInPlace + escape ' +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK( Catch::replaceInPlace(s, "'", "|'") ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( s == "didn|'t" ) +with expansion: + "didn|'t" == "didn|'t" + +------------------------------------------------------------------------------- +resolution +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res.size() == count ) +with expansion: + 10 == 10 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( res[i] == rate ) +with expansion: + 1000.0 == 1000 (0x) + +------------------------------------------------------------------------------- +run_for_at_least, chronometer +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 1 >= 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 2 >= 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 4 >= 2 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 8 >= 4 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 16 >= 8 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 32 >= 16 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 64 >= 32 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( meter.runs() >= old_runs ) +with expansion: + 128 >= 64 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.elapsed >= time ) +with expansion: + 128 ns >= 100 ns + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.result == Timing.iterations + 17 ) +with expansion: + 145 == 145 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.iterations >= time.count() ) +with expansion: + 128 >= 100 + +------------------------------------------------------------------------------- +run_for_at_least, int +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 1 >= 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 2 >= 1 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 4 >= 2 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 8 >= 4 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 16 >= 8 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 32 >= 16 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 64 >= 32 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( x >= old_x ) +with expansion: + 128 >= 64 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.elapsed >= time ) +with expansion: + 128 ns >= 100 ns + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.result == Timing.iterations + 17 ) +with expansion: + 145 == 145 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( Timing.iterations >= time.count() ) +with expansion: + 128 >= 100 + +------------------------------------------------------------------------------- +second tag +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + + +No assertions in test case 'second tag' + +------------------------------------------------------------------------------- +send a single char to INFO +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: FAILED: + REQUIRE( false ) +with message: + 3 + +------------------------------------------------------------------------------- +sends information to INFO +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + REQUIRE( false ) +with messages: + hi + i := 7 + +------------------------------------------------------------------------------- +shortened hide tags are split apart +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE_THAT( testcase.tags, VectorContains( Tag( "magic-tag" ) ) && VectorContains( Tag( "."_catch_sr ) ) ) +with expansion: + { {?}, {?} } ( Contains: {?} and Contains: {?} ) + +------------------------------------------------------------------------------- +splitString +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK_THAT( splitStringRef("", ','), Equals(std::vector()) ) +with expansion: + { } Equals: { } + +StringManip.tests.cpp:: PASSED: + CHECK_THAT( splitStringRef("abc", ','), Equals(std::vector{"abc"}) ) +with expansion: + { abc } Equals: { abc } + +StringManip.tests.cpp:: PASSED: + CHECK_THAT( splitStringRef("abc,def", ','), Equals(std::vector{"abc", "def"}) ) +with expansion: + { abc, def } Equals: { abc, def } + +------------------------------------------------------------------------------- +stacks unscoped info in loops +------------------------------------------------------------------------------- +Message.tests.cpp: +............................................................................... + +Message.tests.cpp:: FAILED: + CHECK( false ) +with messages: + Count 1 to 3... + 1 + 2 + 3 + +Message.tests.cpp:: FAILED: + CHECK( false ) +with messages: + Count 4 to 6... + 4 + 5 + 6 + +------------------------------------------------------------------------------- +startsWith +------------------------------------------------------------------------------- +StringManip.tests.cpp: +............................................................................... + +StringManip.tests.cpp:: PASSED: + CHECK_FALSE( startsWith("", 'c') ) +with expansion: + !false + +StringManip.tests.cpp:: PASSED: + CHECK( startsWith(std::string("abc"), 'a') ) +with expansion: + true + +StringManip.tests.cpp:: PASSED: + CHECK( startsWith("def"_catch_sr, 'd') ) +with expansion: + true + +------------------------------------------------------------------------------- +std::map is convertible string + empty +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( emptyMap ) == "{ }" ) +with expansion: + "{ }" == "{ }" + +------------------------------------------------------------------------------- +std::map is convertible string + single item +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( map ) == "{ { \"one\", 1 } }" ) +with expansion: + "{ { "one", 1 } }" == "{ { "one", 1 } }" + +------------------------------------------------------------------------------- +std::map is convertible string + several items +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( map ) == "{ { \"abc\", 1 }, { \"def\", 2 }, { \"ghi\", 3 } }" ) +with expansion: + "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" + == + "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" + +------------------------------------------------------------------------------- +std::pair -> toString +------------------------------------------------------------------------------- +ToStringPair.tests.cpp: +............................................................................... + +ToStringPair.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" ) +with expansion: + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + +------------------------------------------------------------------------------- +std::pair -> toString +------------------------------------------------------------------------------- +ToStringPair.tests.cpp: +............................................................................... + +ToStringPair.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" ) +with expansion: + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + +------------------------------------------------------------------------------- +std::set is convertible string + empty +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( emptySet ) == "{ }" ) +with expansion: + "{ }" == "{ }" + +------------------------------------------------------------------------------- +std::set is convertible string + single item +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( set ) == "{ \"one\" }" ) +with expansion: + "{ "one" }" == "{ "one" }" + +------------------------------------------------------------------------------- +std::set is convertible string + several items +------------------------------------------------------------------------------- +ToStringGeneral.tests.cpp: +............................................................................... + +ToStringGeneral.tests.cpp:: PASSED: + REQUIRE( Catch::Detail::stringify( set ) == "{ \"abc\", \"def\", \"ghi\" }" ) +with expansion: + "{ "abc", "def", "ghi" }" + == + "{ "abc", "def", "ghi" }" + +------------------------------------------------------------------------------- +std::vector > -> toString +------------------------------------------------------------------------------- +ToStringPair.tests.cpp: +............................................................................... + +ToStringPair.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( pr ) == "{ { \"green\", 55 } }" ) +with expansion: + "{ { "green", 55 } }" + == + "{ { "green", 55 } }" + +------------------------------------------------------------------------------- +stringify ranges +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(streamable_range{}) == "op<<(streamable_range)" ) +with expansion: + "op<<(streamable_range)" + == + "op<<(streamable_range)" + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(stringmaker_range{}) == "stringmaker(streamable_range)" ) +with expansion: + "stringmaker(streamable_range)" + == + "stringmaker(streamable_range)" + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(just_range{}) == "{ 1, 2, 3, 4 }" ) +with expansion: + "{ 1, 2, 3, 4 }" == "{ 1, 2, 3, 4 }" + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(disabled_range{}) == "{?}" ) +with expansion: + "{?}" == "{?}" + +------------------------------------------------------------------------------- +stringify( has_maker ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker" ) +with expansion: + "StringMaker" + == + "StringMaker" + +------------------------------------------------------------------------------- +stringify( has_maker_and_operator ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( item ) == "StringMaker" ) +with expansion: + "StringMaker" + == + "StringMaker" + +------------------------------------------------------------------------------- +stringify( has_neither ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(item) == "{?}" ) +with expansion: + "{?}" == "{?}" + +------------------------------------------------------------------------------- +stringify( has_operator ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" ) +with expansion: + "operator<<( has_operator )" + == + "operator<<( has_operator )" + +------------------------------------------------------------------------------- +stringify( has_template_operator ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( item ) == "operator<<( has_template_operator )" ) +with expansion: + "operator<<( has_template_operator )" + == + "operator<<( has_template_operator )" + +------------------------------------------------------------------------------- +stringify( vectors ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker }" ) +with expansion: + "{ StringMaker }" + == + "{ StringMaker }" + +------------------------------------------------------------------------------- +stringify( vectors ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( v ) == "{ StringMaker }" ) +with expansion: + "{ StringMaker }" + == + "{ StringMaker }" + +------------------------------------------------------------------------------- +stringify( vectors ) +------------------------------------------------------------------------------- +ToStringWhich.tests.cpp: +............................................................................... + +ToStringWhich.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" ) +with expansion: + "{ operator<<( has_operator ) }" + == + "{ operator<<( has_operator ) }" + +------------------------------------------------------------------------------- +strlen3 +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( data.str.size() == data.len ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +strlen3 +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( data.str.size() == data.len ) +with expansion: + 3 == 3 + +------------------------------------------------------------------------------- +strlen3 +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( data.str.size() == data.len ) +with expansion: + 5 == 5 + +------------------------------------------------------------------------------- +strlen3 +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( data.str.size() == data.len ) +with expansion: + 4 == 4 + +------------------------------------------------------------------------------- +tables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) ) +with expansion: + 5 == 5 + +------------------------------------------------------------------------------- +tables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) ) +with expansion: + 6 == 6 + +------------------------------------------------------------------------------- +tables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) ) +with expansion: + 5 == 5 + +------------------------------------------------------------------------------- +tables +------------------------------------------------------------------------------- +Generators.tests.cpp: +............................................................................... + +Generators.tests.cpp:: PASSED: + REQUIRE( strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) ) +with expansion: + 6 == 6 + +------------------------------------------------------------------------------- +tags with dots in later positions are not parsed as hidden +------------------------------------------------------------------------------- +Tag.tests.cpp: +............................................................................... + +Tag.tests.cpp:: PASSED: + REQUIRE( testcase.tags.size() == 1 ) +with expansion: + 1 == 1 + +Tag.tests.cpp:: PASSED: + REQUIRE( testcase.tags[0].original == "magic.tag"_catch_sr ) +with expansion: + magic.tag == magic.tag + +------------------------------------------------------------------------------- +thrown std::strings are translated +------------------------------------------------------------------------------- +Exception.tests.cpp: +............................................................................... + +Exception.tests.cpp:: FAILED: +due to unexpected exception with message: + Why would you throw a std::string? + +------------------------------------------------------------------------------- +toString on const wchar_t const pointer returns the string contents +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( result == "\"wide load\"" ) +with expansion: + ""wide load"" == ""wide load"" + +------------------------------------------------------------------------------- +toString on const wchar_t pointer returns the string contents +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( result == "\"wide load\"" ) +with expansion: + ""wide load"" == ""wide load"" + +------------------------------------------------------------------------------- +toString on wchar_t const pointer returns the string contents +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( result == "\"wide load\"" ) +with expansion: + ""wide load"" == ""wide load"" + +------------------------------------------------------------------------------- +toString on wchar_t returns the string contents +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + CHECK( result == "\"wide load\"" ) +with expansion: + ""wide load"" == ""wide load"" + +------------------------------------------------------------------------------- +toString(enum class w/operator<<) +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e0) == "E2/V0" ) +with expansion: + "E2/V0" == "E2/V0" + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e1) == "E2/V1" ) +with expansion: + "E2/V1" == "E2/V1" + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e3) == "Unknown enum value 10" ) +with expansion: + "Unknown enum value 10" + == + "Unknown enum value 10" + +------------------------------------------------------------------------------- +toString(enum class) +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e0) == "0" ) +with expansion: + "0" == "0" + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e1) == "1" ) +with expansion: + "1" == "1" + +------------------------------------------------------------------------------- +toString(enum w/operator<<) +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e0) == "E2{0}" ) +with expansion: + "E2{0}" == "E2{0}" + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e1) == "E2{1}" ) +with expansion: + "E2{1}" == "E2{1}" + +------------------------------------------------------------------------------- +toString(enum) +------------------------------------------------------------------------------- +EnumToString.tests.cpp: +............................................................................... + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e0) == "0" ) +with expansion: + "0" == "0" + +EnumToString.tests.cpp:: PASSED: + CHECK( ::Catch::Detail::stringify(e1) == "1" ) +with expansion: + "1" == "1" + +------------------------------------------------------------------------------- +tuple<> +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ }" == ::Catch::Detail::stringify(type{}) ) +with expansion: + "{ }" == "{ }" + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ }" == ::Catch::Detail::stringify(value) ) +with expansion: + "{ }" == "{ }" + +------------------------------------------------------------------------------- +tuple +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "1.2f" == ::Catch::Detail::stringify(float(1.2)) ) +with expansion: + "1.2f" == "1.2f" + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) ) +with expansion: + "{ 1.2f, 0 }" == "{ 1.2f, 0 }" + +------------------------------------------------------------------------------- +tuple +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ 0 }" == ::Catch::Detail::stringify(type{0}) ) +with expansion: + "{ 0 }" == "{ 0 }" + +------------------------------------------------------------------------------- +tuple<0,int,const char *> +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) ) +with expansion: + "{ 0, 42, "Catch me" }" + == + "{ 0, 42, "Catch me" }" + +------------------------------------------------------------------------------- +tuple +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) ) +with expansion: + "{ "hello", "world" }" + == + "{ "hello", "world" }" + +------------------------------------------------------------------------------- +tuple,tuple<>,float> +------------------------------------------------------------------------------- +ToStringTuple.tests.cpp: +............................................................................... + +ToStringTuple.tests.cpp:: PASSED: + CHECK( "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) ) +with expansion: + "{ { 42 }, { }, 1.2f }" + == + "{ { 42 }, { }, 1.2f }" + +------------------------------------------------------------------------------- +uniform samples +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( e.point == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( e.upper_bound == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( e.lower_bound == 23 ) +with expansion: + 23.0 == 23 + +InternalBenchmark.tests.cpp:: PASSED: + CHECK( e.confidence_interval == 0.95 ) +with expansion: + 0.95 == 0.95 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Default constructed unique_ptr is empty +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE_FALSE( ptr ) +with expansion: + !{?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr.get() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Take ownership of allocation +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr ) +with expansion: + {?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr == 0 ) +with expansion: + 0 == 0 + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr.get() == naked_ptr ) +with expansion: + 0x == 0x + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Take ownership of allocation + Plain reset deallocates +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE_FALSE( ptr ) +with expansion: + !{?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr.get() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Take ownership of allocation +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr ) +with expansion: + {?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr == 0 ) +with expansion: + 0 == 0 + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr.get() == naked_ptr ) +with expansion: + 0x == 0x + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Take ownership of allocation + Reset replaces ownership +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr ) +with expansion: + {?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr.get() != 0 ) +with expansion: + 0x != 0 + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr == 2 ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Release releases ownership +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + CHECK_FALSE( ptr ) +with expansion: + !{?} + +UniquePtr.tests.cpp:: PASSED: + CHECK( ptr.get() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Move constructor +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE_FALSE( ptr1 ) +with expansion: + !{?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr2 ) +with expansion: + {?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + Move assignment +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE_FALSE( ptr2 ) +with expansion: + !{?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( ptr1 ) +with expansion: + {?} + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr1 == 2 ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +unique_ptr reimplementation: basic functionality + free swap +------------------------------------------------------------------------------- +UniquePtr.tests.cpp: +............................................................................... + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr1 == 2 ) +with expansion: + 2 == 2 + +UniquePtr.tests.cpp:: PASSED: + REQUIRE( *ptr2 == 1 ) +with expansion: + 1 == 1 + +------------------------------------------------------------------------------- +vec> -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(v) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" ) +with expansion: + "{ { "hello" }, { "world" } }" + == + "{ { "hello" }, { "world" } }" + +------------------------------------------------------------------------------- +vector -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(bools) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(bools) == "{ true }" ) +with expansion: + "{ true }" == "{ true }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(bools) == "{ true, false }" ) +with expansion: + "{ true, false }" == "{ true, false }" + +------------------------------------------------------------------------------- +vector -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" ) +with expansion: + "{ 42 }" == "{ 42 }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" ) +with expansion: + "{ 42, 250 }" == "{ 42, 250 }" + +------------------------------------------------------------------------------- +vector -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42 }" ) +with expansion: + "{ 42 }" == "{ 42 }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ 42, 250 }" ) +with expansion: + "{ 42, 250 }" == "{ 42, 250 }" + +------------------------------------------------------------------------------- +vector -> toString +------------------------------------------------------------------------------- +ToStringVector.tests.cpp: +............................................................................... + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\" }" ) +with expansion: + "{ "hello" }" == "{ "hello" }" + +ToStringVector.tests.cpp:: PASSED: + REQUIRE( ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" ) +with expansion: + "{ "hello", "world" }" + == + "{ "hello", "world" }" + +------------------------------------------------------------------------------- +vectors can be sized and resized +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +vectors can be sized and resized + resizing bigger changes size and capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +vectors can be sized and resized +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +vectors can be sized and resized + resizing smaller changes size but not capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +vectors can be sized and resized + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +vectors can be sized and resized +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +vectors can be sized and resized + reserving bigger changes capacity but not size +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +vectors can be sized and resized +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +vectors can be sized and resized + reserving smaller does not change size or capacity +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +Misc.tests.cpp:: PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 + +------------------------------------------------------------------------------- +warmup +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( (iterations * rate) > Catch::Benchmark::Detail::warmup_time.count() ) +with expansion: + 160000000 (0x) > 100 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( (end - start) > Catch::Benchmark::Detail::warmup_time ) +with expansion: + 310016000 ns > 100 ms + +------------------------------------------------------------------------------- +weighted_average_quantile +------------------------------------------------------------------------------- +InternalBenchmark.tests.cpp: +............................................................................... + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( q1 == 14.5 ) +with expansion: + 14.5 == 14.5 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( med == 18. ) +with expansion: + 18.0 == 18.0 + +InternalBenchmark.tests.cpp:: PASSED: + REQUIRE( q3 == 23. ) +with expansion: + 23.0 == 23.0 + +------------------------------------------------------------------------------- +xmlentitycheck + embedded xml: it should be possible to embed xml characters, such as <, + " or &, or even whole documents within an attribute + +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +------------------------------------------------------------------------------- +xmlentitycheck + encoded chars: these should all be encoded: &&&"""<<<&"<<&" +------------------------------------------------------------------------------- +Misc.tests.cpp: +............................................................................... + +Misc.tests.cpp:: PASSED: + +=============================================================================== +test cases: 380 | 290 passed | 83 failed | 7 failed as expected +assertions: 2209 | 2039 passed | 143 failed | 27 failed as expected + diff --git a/tests/SelfTest/Baselines/default.sw.multi.approved.txt b/tests/SelfTest/Baselines/default.sw.multi.approved.txt new file mode 100644 index 0000000000..12717aa5f9 --- /dev/null +++ b/tests/SelfTest/Baselines/default.sw.multi.approved.txt @@ -0,0 +1,8 @@ +This would not be caught previously +Nor would this +A string sent directly to stdout +A string sent directly to stderr +A string sent to stderr via clog +Message from section one +Message from section two +loose text artifact diff --git a/tests/SelfTest/Baselines/junit.sw.approved.txt b/tests/SelfTest/Baselines/junit.sw.approved.txt index 090b34c44b..cc3038b5f7 100644 --- a/tests/SelfTest/Baselines/junit.sw.approved.txt +++ b/tests/SelfTest/Baselines/junit.sw.approved.txt @@ -1,7 +1,7 @@ - + @@ -1092,8 +1092,13 @@ Message.tests.cpp: - + + + + + + diff --git a/tests/SelfTest/Baselines/junit.sw.multi.approved.txt b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt new file mode 100644 index 0000000000..223618576f --- /dev/null +++ b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt @@ -0,0 +1,1902 @@ + + + + + + + + + + + + + + + + + + + +FAILED: +1514 +Tricky.tests.cpp: + + +This would not be caught previously + + +Nor would this + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +expected exception +answer := 42 +Exception.tests.cpp: + + + + + +FAILED: + REQUIRE_NOTHROW( thisThrows() ) +expected exception +answer := 42 +Exception.tests.cpp: + + + + + + + + +FAILED: + CHECK( f() == 0 ) +with expansion: + 1 == 0 +Misc.tests.cpp: + + + + + + + + + + +FAILED: + CHECK( false != false ) +Condition.tests.cpp: + + +FAILED: + CHECK( true != true ) +Condition.tests.cpp: + + +FAILED: + CHECK( !true ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( true ) +with expansion: + !true +Condition.tests.cpp: + + +FAILED: + CHECK( !trueValue ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( trueValue ) +with expansion: + !true +Condition.tests.cpp: + + +FAILED: + CHECK( !(1 == 1) ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( 1 == 1 ) +Condition.tests.cpp: + + + + + + + + + + + +FAILED: + REQUIRE( s == "world" ) +with expansion: + "hello" == "world" +Class.tests.cpp: + + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 6 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 2 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 6 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 2 < 2 +Class.tests.cpp: + + + + + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1.0 == 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1.0f == 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1 == 2 +Class.tests.cpp: + + + + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 1 == 0 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 3 == 0 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 6 == 0 +Class.tests.cpp: + + + + + + + +FAILED: + REQUIRE( m_a == 2 ) +with expansion: + 1 == 2 +Class.tests.cpp: + + + + + + + + + + + + + + +FAILED: +to infinity and beyond +Misc.tests.cpp: + + + + + +FAILED: + CHECK( &o1 == &o2 ) +with expansion: + 0x == 0x +Tricky.tests.cpp: + + +FAILED: + CHECK( o1 == o2 ) +with expansion: + {?} == {?} +Tricky.tests.cpp: + + + + + + +FAILED: + {Unknown expression after the reported line} +unexpected exception +Exception.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "not there" (case + insensitive) +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "STRING" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "STRING" +Matchers.tests.cpp: + + + + + + + +FAILED: + REQUIRE_NOTHROW( throwCustom() ) +custom exception - not std +Exception.tests.cpp: + + + + +FAILED: + REQUIRE_THROWS_AS( throwCustom(), std::exception ) +custom exception - not std +Exception.tests.cpp: + + + + +FAILED: +custom std exception +Exception.tests.cpp: + + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "Substring" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "this" (case + insensitive) +Matchers.tests.cpp: + + + + + + + + +FAILED: + CHECK( data.int_seven == 6 ) +with expansion: + 7 == 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven == 8 ) +with expansion: + 7 == 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven == 0 ) +with expansion: + 7 == 0 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 9.11f ) ) +with expansion: + 9.1f == Approx( 9.1099996567 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 9.0f ) ) +with expansion: + 9.1f == Approx( 9.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 1 ) ) +with expansion: + 9.1f == Approx( 1.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 0 ) ) +with expansion: + 9.1f == Approx( 0.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.double_pi == Approx( 3.1415 ) ) +with expansion: + 3.1415926535 == Approx( 3.1415 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "goodbye" ) +with expansion: + "hello" == "goodbye" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "hell" ) +with expansion: + "hello" == "hell" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "hello1" ) +with expansion: + "hello" == "hello1" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello.size() == 6 ) +with expansion: + 5 == 6 +Condition.tests.cpp: + + +FAILED: + CHECK( x == Approx( 1.301 ) ) +with expansion: + 1.3 == Approx( 1.301 ) +Condition.tests.cpp: + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "this string contains + 'ABC' as a substring" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "something else" (case + insensitive) +Matchers.tests.cpp: + + + + + +FAILED: + CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +Unknown exception +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +Unknown exception +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THROWS_MATCHES( throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 +Matchers.tests.cpp: + + + + + + + + + +FAILED: + CHECK_THROWS_AS( thisThrows(), std::string ) +expected exception +Exception.tests.cpp: + + +FAILED: + CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error ) +Exception.tests.cpp: + + +FAILED: + CHECK_NOTHROW( thisThrows() ) +expected exception +Exception.tests.cpp: + + + + +FAILED: +This is a failure +Message.tests.cpp: + + + + +FAILED: +Message.tests.cpp: + + + + +FAILED: +This is a failure +Message.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + REQUIRE( a == 1 ) +with expansion: + 2 == 1 +this message should be logged +so should this +Message.tests.cpp: + + + + +FAILED: + CHECK( a == 1 ) +with expansion: + 2 == 1 +this message may be logged later +this message should be logged +Message.tests.cpp: + + +FAILED: + CHECK( a == 0 ) +with expansion: + 2 == 0 +this message may be logged later +this message should be logged +and this, but later +Message.tests.cpp: + + + + +FAILED: + REQUIRE( i < 10 ) +with expansion: + 10 < 10 +current counter 10 +i := 10 +Message.tests.cpp: + + + + + +FAILED: + CHECK( data.int_seven != 7 ) +with expansion: + 7 != 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one != Approx( 9.1f ) ) +with expansion: + 9.1f != Approx( 9.1000003815 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.double_pi != Approx( 3.1415926535 ) ) +with expansion: + 3.1415926535 != Approx( 3.1415926535 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello != "hello" ) +with expansion: + "hello" != "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello.size() != 5 ) +with expansion: + 5 != 5 +Condition.tests.cpp: + + + + + + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "random" ) +Matchers.tests.cpp: + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), !ContainsSubstring( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" not contains: "substring" +Matchers.tests.cpp: + + + + + +FAILED: +Condition.tests.cpp: + + + + + +FAILED: +Condition.tests.cpp: + + + + + +FAILED: +Condition.tests.cpp: + + + + + +FAILED: +Condition.tests.cpp: + + + + +FAILED: + REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) +with expansion: + "expected exception" equals: "should fail" +Exception.tests.cpp: + + + + + + +FAILED: +custom exception +Exception.tests.cpp: + + + + + + +FAILED: + CHECK( data.int_seven > 7 ) +with expansion: + 7 > 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 7 ) +with expansion: + 7 < 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven > 8 ) +with expansion: + 7 > 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 6 ) +with expansion: + 7 < 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 0 ) +with expansion: + 7 < 0 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < -1 ) +with expansion: + 7 < -1 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven >= 8 ) +with expansion: + 7 >= 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven <= 6 ) +with expansion: + 7 <= 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one < 9 ) +with expansion: + 9.1f < 9 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one > 10 ) +with expansion: + 9.1f > 10 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one > 9.2 ) +with expansion: + 9.1f > 9.2 +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "hello" ) +with expansion: + "hello" > "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "hello" ) +with expansion: + "hello" < "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "hellp" ) +with expansion: + "hello" > "hellp" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "z" ) +with expansion: + "hello" > "z" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "hellm" ) +with expansion: + "hello" < "hellm" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "a" ) +with expansion: + "hello" < "a" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello >= "z" ) +with expansion: + "hello" >= "z" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello <= "a" ) +with expansion: + "hello" <= "a" +Condition.tests.cpp: + + + + + + + +FAILED: +Message from section one +Message.tests.cpp: + + + + +FAILED: +Message from section two +Message.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK( truthy(false) ) +with expansion: + Hey, its truthy! +Decomposition.tests.cpp: + + + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this STRING contains + 'abc' as a substring" case sensitively +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "contains 'abc' as a + substring" case sensitively +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this string contains 'abc' as a" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this string contains + 'abc' as a" case sensitively +Matchers.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A string sent directly to stdout + + +A string sent directly to stderr +A string sent to stderr via clog + + + + + +Message from section one +Message from section two + + + + +FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "This String" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "This String" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "string" (case + insensitive) +Matchers.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK( s1 == s2 ) +with expansion: + "if ($b == 10) { + $a = 20; + }" + == + "if ($b == 10) { + $a = 20; + } + " +Misc.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +Misc.tests.cpp: + + + + + +FAILED: +Misc.tests.cpp: + + + + + + + + + +FAILED: +For some reason someone is throwing a string literal! +Exception.tests.cpp: + + + + + + + + + + + + + + + +FAILED: +3.14 +Exception.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK_THAT( empty, Approx( t1 ) ) +with expansion: + { } is approx: { 1.0, 2.0 } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v1, Approx( v2 ) ) +with expansion: + { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } +Matchers.tests.cpp: + + + + + + + + + +FAILED: + CHECK_THAT( v, VectorContains( -1 ) ) +with expansion: + { 1, 2, 3 } Contains: -1 +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, VectorContains( 1 ) ) +with expansion: + { } Contains: 1 +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( empty, Contains( v ) ) +with expansion: + { } Contains: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v, Contains( v2 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2, 4 } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v, Equals( v2 ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v2, Equals( v ) ) +with expansion: + { 1, 2 } Equals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, Equals( v ) ) +with expansion: + { } Equals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v, Equals( empty ) ) +with expansion: + { 1, 2, 3 } Equals: { } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v, UnorderedEquals( empty ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, UnorderedEquals( v ) ) +with expansion: + { } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 1, 3 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 3, 1 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + + + + +FAILED: +unexpected exception +Exception.tests.cpp: + + + + +FAILED: + CHECK( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: + REQUIRE( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: + CHECK( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: +unexpected exception +Exception.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + REQUIRE( testCheckedElse( false ) ) +with expansion: + false +Misc.tests.cpp: + + + + + +FAILED: + REQUIRE( testCheckedIf( false ) ) +with expansion: + false +Misc.tests.cpp: + + + + + + + + + + + + + + + + + + + + +FAILED: +Previous info should not be seen +Message.tests.cpp: + + + + +FAILED: +previous unscoped info SHOULD not be seen +Message.tests.cpp: + + + + + +FAILED: + CHECK( b > a ) +with expansion: + 0 > 1 +Misc.tests.cpp: + + + + +FAILED: + CHECK( b > a ) +with expansion: + 1 > 1 +Misc.tests.cpp: + + + + + + + + + + + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[0] (1) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[1] (1) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[3] (3) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[4] (5) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[6] (13) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[7] (21) is even +Misc.tests.cpp: + + + + + + + + + + +FAILED: + REQUIRE( a == b ) +with expansion: + 1 == 2 +Misc.tests.cpp: + + + + + + + + + + + + + +FAILED: + REQUIRE( false ) +this SHOULD be seen +Message.tests.cpp: + + + + + + + + + + + + +FAILED: + REQUIRE( false ) +this SHOULD be seen +this SHOULD also be seen +Message.tests.cpp: + + + + +FAILED: + CHECK( false ) +this SHOULD be seen only ONCE +Message.tests.cpp: + + + + + + + + + + + + + + + + +FAILED: + REQUIRE( false ) +3 +Misc.tests.cpp: + + + + +FAILED: + REQUIRE( false ) +hi +i := 7 +Message.tests.cpp: + + + + + + +FAILED: + CHECK( false ) +Count 1 to 3... +1 +2 +3 +Message.tests.cpp: + + +FAILED: + CHECK( false ) +Count 4 to 6... +4 +5 +6 +Message.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +Why would you throw a std::string? +Exception.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +This would not be caught previously +A string sent directly to stdout +Message from section one +Message from section two + + +Nor would this +A string sent directly to stderr +A string sent to stderr via clog + + + diff --git a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt index 82f675f66f..8ab8d0c0df 100644 --- a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt +++ b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt @@ -63,8 +63,13 @@ - + + + + + + diff --git a/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt b/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt new file mode 100644 index 0000000000..ebbdce727d --- /dev/null +++ b/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt @@ -0,0 +1,1920 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + REQUIRE( s == "world" ) +with expansion: + "hello" == "world" +Class.tests.cpp: + + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ) +with expansion: + 0 == 1 +Class.tests.cpp: + + + + + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 6 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 2 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 6 < 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture_2<TestType>{}.m_a.size() < 2 ) +with expansion: + 2 < 2 +Class.tests.cpp: + + + + + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1.0 == 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1.0f == 2 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Template_Fixture<TestType>::m_a == 2 ) +with expansion: + 1 == 2 +Class.tests.cpp: + + + + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 1 == 0 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 3 == 0 +Class.tests.cpp: + + + + +FAILED: + REQUIRE( Nttp_Fixture<V>::value == 0 ) +with expansion: + 6 == 0 +Class.tests.cpp: + + + + + + + +FAILED: + REQUIRE( m_a == 2 ) +with expansion: + 1 == 2 +Class.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK( false != false ) +Condition.tests.cpp: + + +FAILED: + CHECK( true != true ) +Condition.tests.cpp: + + +FAILED: + CHECK( !true ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( true ) +with expansion: + !true +Condition.tests.cpp: + + +FAILED: + CHECK( !trueValue ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( trueValue ) +with expansion: + !true +Condition.tests.cpp: + + +FAILED: + CHECK( !(1 == 1) ) +with expansion: + false +Condition.tests.cpp: + + +FAILED: + CHECK_FALSE( 1 == 1 ) +Condition.tests.cpp: + + + + + + + + +FAILED: + CHECK( data.int_seven == 6 ) +with expansion: + 7 == 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven == 8 ) +with expansion: + 7 == 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven == 0 ) +with expansion: + 7 == 0 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 9.11f ) ) +with expansion: + 9.1f == Approx( 9.1099996567 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 9.0f ) ) +with expansion: + 9.1f == Approx( 9.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 1 ) ) +with expansion: + 9.1f == Approx( 1.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one == Approx( 0 ) ) +with expansion: + 9.1f == Approx( 0.0 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.double_pi == Approx( 3.1415 ) ) +with expansion: + 3.1415926535 == Approx( 3.1415 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "goodbye" ) +with expansion: + "hello" == "goodbye" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "hell" ) +with expansion: + "hello" == "hell" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello == "hello1" ) +with expansion: + "hello" == "hello1" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello.size() == 6 ) +with expansion: + 5 == 6 +Condition.tests.cpp: + + +FAILED: + CHECK( x == Approx( 1.301 ) ) +with expansion: + 1.3 == Approx( 1.301 ) +Condition.tests.cpp: + + + + + +FAILED: + CHECK( data.int_seven != 7 ) +with expansion: + 7 != 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one != Approx( 9.1f ) ) +with expansion: + 9.1f != Approx( 9.1000003815 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.double_pi != Approx( 3.1415926535 ) ) +with expansion: + 3.1415926535 != Approx( 3.1415926535 ) +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello != "hello" ) +with expansion: + "hello" != "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello.size() != 5 ) +with expansion: + 5 != 5 +Condition.tests.cpp: + + + + + +FAILED: +Condition.tests.cpp: + + + + +FAILED: +Condition.tests.cpp: + + + + +FAILED: +Condition.tests.cpp: + + + + +FAILED: +Condition.tests.cpp: + + + + +FAILED: + CHECK( data.int_seven > 7 ) +with expansion: + 7 > 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 7 ) +with expansion: + 7 < 7 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven > 8 ) +with expansion: + 7 > 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 6 ) +with expansion: + 7 < 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < 0 ) +with expansion: + 7 < 0 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven < -1 ) +with expansion: + 7 < -1 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven >= 8 ) +with expansion: + 7 >= 8 +Condition.tests.cpp: + + +FAILED: + CHECK( data.int_seven <= 6 ) +with expansion: + 7 <= 6 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one < 9 ) +with expansion: + 9.1f < 9 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one > 10 ) +with expansion: + 9.1f > 10 +Condition.tests.cpp: + + +FAILED: + CHECK( data.float_nine_point_one > 9.2 ) +with expansion: + 9.1f > 9.2 +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "hello" ) +with expansion: + "hello" > "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "hello" ) +with expansion: + "hello" < "hello" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "hellp" ) +with expansion: + "hello" > "hellp" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello > "z" ) +with expansion: + "hello" > "z" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "hellm" ) +with expansion: + "hello" < "hellm" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello < "a" ) +with expansion: + "hello" < "a" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello >= "z" ) +with expansion: + "hello" >= "z" +Condition.tests.cpp: + + +FAILED: + CHECK( data.str_hello <= "a" ) +with expansion: + "hello" <= "a" +Condition.tests.cpp: + + + + + + + + + + + +FAILED: + CHECK( truthy(false) ) +with expansion: + Hey, its truthy! +Decomposition.tests.cpp: + + + + + + + + + + + + + + +FAILED: +expected exception +answer := 42 +Exception.tests.cpp: + + + + +FAILED: + REQUIRE_NOTHROW( thisThrows() ) +expected exception +answer := 42 +Exception.tests.cpp: + + + + + +FAILED: + {Unknown expression after the reported line} +unexpected exception +Exception.tests.cpp: + + + + +FAILED: + REQUIRE_NOTHROW( throwCustom() ) +custom exception - not std +Exception.tests.cpp: + + + + +FAILED: + REQUIRE_THROWS_AS( throwCustom(), std::exception ) +custom exception - not std +Exception.tests.cpp: + + + + +FAILED: +custom std exception +Exception.tests.cpp: + + + + + + + +FAILED: + CHECK_THROWS_AS( thisThrows(), std::string ) +expected exception +Exception.tests.cpp: + + +FAILED: + CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error ) +Exception.tests.cpp: + + +FAILED: + CHECK_NOTHROW( thisThrows() ) +expected exception +Exception.tests.cpp: + + + + +FAILED: + REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) +with expansion: + "expected exception" equals: "should fail" +Exception.tests.cpp: + + + + +FAILED: +custom exception +Exception.tests.cpp: + + + + +FAILED: +For some reason someone is throwing a string literal! +Exception.tests.cpp: + + + + +FAILED: +3.14 +Exception.tests.cpp: + + + + + +FAILED: +unexpected exception +Exception.tests.cpp: + + + + +FAILED: + CHECK( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: + REQUIRE( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: + CHECK( thisThrows() == 0 ) +expected exception +Exception.tests.cpp: + + + + +FAILED: +unexpected exception +Exception.tests.cpp: + + + + +FAILED: +Why would you throw a std::string? +Exception.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "not there" (case insensitive) +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), ContainsSubstring( "STRING" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "STRING" +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "Substring" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "this" (case insensitive) +Matchers.tests.cpp: + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "something else" (case insensitive) +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } ) +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +Unknown exception +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } ) +Unknown exception +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THROWS_MATCHES( throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 +Matchers.tests.cpp: + + +FAILED: + REQUIRE_THROWS_MATCHES( throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } ) +with expansion: + SpecialException::what special exception has value of 1 +Matchers.tests.cpp: + + + + + + + + + + + + + + + + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) +Matchers.tests.cpp: + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), !ContainsSubstring( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" not contains: "substring" +Matchers.tests.cpp: + + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "contains 'abc' as a substring" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), Matches( "this string contains 'abc' as a" ) ) +with expansion: + "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively +Matchers.tests.cpp: + + + + + +FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "This String" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "This String" +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "string" (case insensitive) +Matchers.tests.cpp: + + + + + + + + + +FAILED: + CHECK_THAT( empty, Approx( t1 ) ) +with expansion: + { } is approx: { 1.0, 2.0 } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v1, Approx( v2 ) ) +with expansion: + { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } +Matchers.tests.cpp: + + + + + + + + + +FAILED: + CHECK_THAT( v, VectorContains( -1 ) ) +with expansion: + { 1, 2, 3 } Contains: -1 +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, VectorContains( 1 ) ) +with expansion: + { } Contains: 1 +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( empty, Contains( v ) ) +with expansion: + { } Contains: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v, Contains( v2 ) ) +with expansion: + { 1, 2, 3 } Contains: { 1, 2, 4 } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v, Equals( v2 ) ) +with expansion: + { 1, 2, 3 } Equals: { 1, 2 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v2, Equals( v ) ) +with expansion: + { 1, 2 } Equals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, Equals( v ) ) +with expansion: + { } Equals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( v, Equals( empty ) ) +with expansion: + { 1, 2, 3 } Equals: { } +Matchers.tests.cpp: + + + + +FAILED: + CHECK_THAT( v, UnorderedEquals( empty ) ) +with expansion: + { 1, 2, 3 } UnorderedEquals: { } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( empty, UnorderedEquals( v ) ) +with expansion: + { } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 1, 3 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + +FAILED: + CHECK_THAT( permuted, UnorderedEquals( v ) ) +with expansion: + { 3, 1 } UnorderedEquals: { 1, 2, 3 } +Matchers.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +This is a failure +Message.tests.cpp: + + + + +FAILED: +Message.tests.cpp: + + + + +FAILED: +This is a failure +Message.tests.cpp: + + + + + +FAILED: + REQUIRE( a == 1 ) +with expansion: + 2 == 1 +this message should be logged +so should this +Message.tests.cpp: + + + + +FAILED: + CHECK( a == 1 ) +with expansion: + 2 == 1 +this message may be logged later +this message should be logged +Message.tests.cpp: + + +FAILED: + CHECK( a == 0 ) +with expansion: + 2 == 0 +this message may be logged later +this message should be logged +and this, but later +Message.tests.cpp: + + + + +FAILED: + REQUIRE( i < 10 ) +with expansion: + 10 < 10 +current counter 10 +i := 10 +Message.tests.cpp: + + + + +FAILED: +Message from section one +Message.tests.cpp: + + + + +FAILED: +Message from section two +Message.tests.cpp: + + + + + + + + +FAILED: +Previous info should not be seen +Message.tests.cpp: + + + + +FAILED: +previous unscoped info SHOULD not be seen +Message.tests.cpp: + + + + + +FAILED: + REQUIRE( false ) +this SHOULD be seen +Message.tests.cpp: + + + + + +FAILED: + REQUIRE( false ) +this SHOULD be seen +this SHOULD also be seen +Message.tests.cpp: + + + + +FAILED: + CHECK( false ) +this SHOULD be seen only ONCE +Message.tests.cpp: + + + + +FAILED: + REQUIRE( false ) +hi +i := 7 +Message.tests.cpp: + + + + +FAILED: + CHECK( false ) +Count 1 to 3... +1 +2 +3 +Message.tests.cpp: + + +FAILED: + CHECK( false ) +Count 4 to 6... +4 +5 +6 +Message.tests.cpp: + + + + + + + + + + + +FAILED: + CHECK( f() == 0 ) +with expansion: + 1 == 0 +Misc.tests.cpp: + + + + + + + + + + + + + + + + + +FAILED: +to infinity and beyond +Misc.tests.cpp: + + + + + + + + + + + + +FAILED: + CHECK( s1 == s2 ) +with expansion: + "if ($b == 10) { + $a = 20; +}" +== +"if ($b == 10) { + $a = 20; +} +" +Misc.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +Misc.tests.cpp: + + + + +FAILED: +Misc.tests.cpp: + + + + + + +FAILED: + REQUIRE( testCheckedElse( false ) ) +with expansion: + false +Misc.tests.cpp: + + + + + +FAILED: + REQUIRE( testCheckedIf( false ) ) +with expansion: + false +Misc.tests.cpp: + + + + + + + + +FAILED: + CHECK( b > a ) +with expansion: + 0 > 1 +Misc.tests.cpp: + + + + +FAILED: + CHECK( b > a ) +with expansion: + 1 > 1 +Misc.tests.cpp: + + + + + + + + + + + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[0] (1) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[1] (1) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[3] (3) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[4] (5) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[6] (13) is even +Misc.tests.cpp: + + +FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) +with expansion: + 1 == 0 +Testing if fib[7] (21) is even +Misc.tests.cpp: + + + + +FAILED: + REQUIRE( a == b ) +with expansion: + 1 == 2 +Misc.tests.cpp: + + + + + + + + + + + + +FAILED: + REQUIRE( false ) +3 +Misc.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILED: +1514 +Tricky.tests.cpp: + + + + + + + + + +FAILED: + CHECK( &o1 == &o2 ) +with expansion: + 0x == 0x +Tricky.tests.cpp: + + +FAILED: + CHECK( o1 == o2 ) +with expansion: + {?} == {?} +Tricky.tests.cpp: + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/SelfTest/Baselines/tap.sw.approved.txt b/tests/SelfTest/Baselines/tap.sw.approved.txt index 47d59ade23..45fa096a83 100644 --- a/tests/SelfTest/Baselines/tap.sw.approved.txt +++ b/tests/SelfTest/Baselines/tap.sw.approved.txt @@ -2423,7 +2423,7 @@ ok {test-number} - config.abortAfter == -1 for: -1 == -1 # Process can be configured on command line ok {test-number} - config.noThrow == false for: false == false # Process can be configured on command line -ok {test-number} - config.reporterName == "console" for: "console" == "console" +ok {test-number} - config.reporterSpecifications == std::vector{ {"console", {}} } for: { { console, } } == { { console, } } # Process can be configured on command line ok {test-number} - !(cfg.hasTestFilters()) for: !false # Process can be configured on command line @@ -2451,24 +2451,46 @@ ok {test-number} - cfg.testSpec().matches(*fakeTestCase("test1")) == false for: # Process can be configured on command line ok {test-number} - cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true # Process can be configured on command line -ok {test-number} - cli.parse({"test", "-r", "console"}) for: {?} +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line -ok {test-number} - config.reporterName == "console" for: "console" == "console" +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } for: { { console, } } == { { console, } } with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line -ok {test-number} - cli.parse({"test", "-r", "xml"}) for: {?} +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line -ok {test-number} - config.reporterName == "xml" for: "xml" == "xml" +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } for: { { xml, } } == { { xml, } } with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line -ok {test-number} - cli.parse({"test", "--reporter", "junit"}) for: {?} +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line -ok {test-number} - config.reporterName == "junit" for: "junit" == "junit" -# Process can be configured on command line -ok {test-number} - !(cli.parse({ "test", "-r", "xml", "-r", "junit" })) for: !{?} +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } for: { { junit, } } == { { junit, } } with 1 message: 'result.errorMessage() := ""' # Process can be configured on command line ok {test-number} - !result for: true # Process can be configured on command line ok {test-number} - result.errorMessage(), ContainsSubstring("Unrecognized reporter") for: "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" # Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } for: { { console, out.txt } } == { { console, out.txt } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } for: { { console, C:\Temp\out.txt } } == { { console, C:\Temp\out.txt } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("empty filename") for: "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename" +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } for: { { xml, output.xml }, { junit, output-junit.xml } } == { { xml, output.xml }, { junit, output-junit.xml } } +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } for: { { xml, output.xml }, { console, } } == { { xml, output.xml }, { console, } } +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") for: "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." +# Process can be configured on command line ok {test-number} - cli.parse({"test", "-b"}) for: {?} # Process can be configured on command line ok {test-number} - config.shouldDebugBreak == true for: true == true @@ -2519,11 +2541,11 @@ ok {test-number} - config.noThrow for: true # Process can be configured on command line ok {test-number} - cli.parse({"test", "-o", "filename.ext"}) for: {?} # Process can be configured on command line -ok {test-number} - config.outputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" # Process can be configured on command line ok {test-number} - cli.parse({"test", "--out", "filename.ext"}) for: {?} # Process can be configured on command line -ok {test-number} - config.outputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" # Process can be configured on command line ok {test-number} - cli.parse({"test", "-abe"}) for: {?} # Process can be configured on command line @@ -4398,5 +4420,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0 ok {test-number} - # xmlentitycheck ok {test-number} - -1..2198 +1..2209 diff --git a/tests/SelfTest/Baselines/tap.sw.multi.approved.txt b/tests/SelfTest/Baselines/tap.sw.multi.approved.txt new file mode 100644 index 0000000000..235687a26e --- /dev/null +++ b/tests/SelfTest/Baselines/tap.sw.multi.approved.txt @@ -0,0 +1,4416 @@ +# # A test name that starts with a # +ok {test-number} - with 1 message: 'yay' +# #1005: Comparing pointer to int and long (NULL can be either on various systems) +ok {test-number} - fptr == 0 for: 0 == 0 +# #1005: Comparing pointer to int and long (NULL can be either on various systems) +ok {test-number} - fptr == 0l for: 0 == 0 +# #1027: Bitfields can be captured +ok {test-number} - y.v == 0 for: 0 == 0 +# #1027: Bitfields can be captured +ok {test-number} - 0 == y.v for: 0 == 0 +# #1147 +ok {test-number} - t1 == t2 for: {?} == {?} +# #1147 +ok {test-number} - t1 != t2 for: {?} != {?} +# #1147 +ok {test-number} - t1 < t2 for: {?} < {?} +# #1147 +ok {test-number} - t1 > t2 for: {?} > {?} +# #1147 +ok {test-number} - t1 <= t2 for: {?} <= {?} +# #1147 +ok {test-number} - t1 >= t2 for: {?} >= {?} +# #1175 - Hidden Test +ok {test-number} - +# #1238 +ok {test-number} - std::memcmp(uarr, "123", sizeof(uarr)) == 0 for: 0 == 0 with 2 messages: 'uarr := "123"' and 'sarr := "456"' +# #1238 +ok {test-number} - std::memcmp(sarr, "456", sizeof(sarr)) == 0 for: 0 == 0 with 2 messages: 'uarr := "123"' and 'sarr := "456"' +# #1245 +ok {test-number} - +# #1319: Sections can have description (even if it is not saved +ok {test-number} - +# #1403 +ok {test-number} - h1 == h2 for: [1403 helper] == [1403 helper] +# #1455 - INFO and WARN can start with a linebreak +warning {test-number} - ' +This info message starts with a linebreak' with 1 message: ' +This warning message starts with a linebreak' +# #1514: stderr/stdout is not captured in tests aborted by an exception +not ok {test-number} - explicitly with 1 message: '1514' +# #1548 +ok {test-number} - std::is_same, TypeList>::value for: true +# #1905 -- test spec parser properly clears internal state between compound tests +ok {test-number} - spec.matches(*fakeTestCase("spec . char")) for: true +# #1905 -- test spec parser properly clears internal state between compound tests +ok {test-number} - spec.matches(*fakeTestCase("spec , char")) for: true +# #1905 -- test spec parser properly clears internal state between compound tests +ok {test-number} - !(spec.matches(*fakeTestCase(R"(spec \, char)"))) for: !false +# #1912 -- test spec parser handles escaping +ok {test-number} - spec.matches(*fakeTestCase(R"(spec {a} char)")) for: true +# #1912 -- test spec parser handles escaping +ok {test-number} - spec.matches(*fakeTestCase(R"(spec [a] char)")) for: true +# #1912 -- test spec parser handles escaping +ok {test-number} - !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) for: !false +# #1912 -- test spec parser handles escaping +ok {test-number} - spec.matches(*fakeTestCase(R"(spec \ char)")) for: true +# #1913 - GENERATE inside a for loop should not keep recreating the generator +ok {test-number} - counter < 7 for: 3 < 7 +# #1913 - GENERATE inside a for loop should not keep recreating the generator +ok {test-number} - counter < 7 for: 6 < 7 +# #1913 - GENERATEs can share a line +ok {test-number} - i != j for: 1 != 3 +# #1913 - GENERATEs can share a line +ok {test-number} - i != j for: 1 != 4 +# #1913 - GENERATEs can share a line +ok {test-number} - i != j for: 2 != 3 +# #1913 - GENERATEs can share a line +ok {test-number} - i != j for: 2 != 4 +# #1938 - GENERATE after a section +ok {test-number} - with 1 message: 'A' +# #1938 - GENERATE after a section +ok {test-number} - m for: 1 +# #1938 - GENERATE after a section +ok {test-number} - m for: 2 +# #1938 - GENERATE after a section +ok {test-number} - m for: 3 +# #1938 - Section followed by flat generate +ok {test-number} - 1 +# #1938 - Section followed by flat generate +ok {test-number} - m for: 2 +# #1938 - Section followed by flat generate +ok {test-number} - m for: 3 +# #1938 - flat generate +ok {test-number} - m for: 1 +# #1938 - flat generate +ok {test-number} - m for: 2 +# #1938 - flat generate +ok {test-number} - m for: 3 +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'A' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 1' and 'j := 3' and 'k := 5' +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'B' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 1' and 'j := 3' and 'k := 6' +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'B' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 1' and 'j := 4' and 'k := 5' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 1' and 'j := 4' and 'k := 6' +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'A' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 2' and 'j := 3' and 'k := 5' +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'B' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 2' and 'j := 3' and 'k := 6' +# #1938 - mixed sections and generates +ok {test-number} - with 1 message: 'B' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 2' and 'j := 4' and 'k := 5' +# #1938 - mixed sections and generates +ok {test-number} - with 3 messages: 'i := 2' and 'j := 4' and 'k := 6' +# #1938 - nested generate +ok {test-number} - m for: 1 +# #1938 - nested generate +ok {test-number} - n for: 1 +# #1938 - nested generate +ok {test-number} - m for: 1 +# #1938 - nested generate +ok {test-number} - n for: 2 +# #1938 - nested generate +ok {test-number} - m for: 1 +# #1938 - nested generate +ok {test-number} - n for: 3 +# #1938 - nested generate +ok {test-number} - m for: 2 +# #1938 - nested generate +ok {test-number} - n for: 1 +# #1938 - nested generate +ok {test-number} - m for: 2 +# #1938 - nested generate +ok {test-number} - n for: 2 +# #1938 - nested generate +ok {test-number} - m for: 2 +# #1938 - nested generate +ok {test-number} - n for: 3 +# #1938 - nested generate +ok {test-number} - m for: 3 +# #1938 - nested generate +ok {test-number} - n for: 1 +# #1938 - nested generate +ok {test-number} - m for: 3 +# #1938 - nested generate +ok {test-number} - n for: 2 +# #1938 - nested generate +ok {test-number} - m for: 3 +# #1938 - nested generate +ok {test-number} - n for: 3 +# #1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0 +ok {test-number} - +# #1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0 +ok {test-number} - +# #1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0 +ok {test-number} - +# #2152 - ULP checks between differently signed values were wrong - double +ok {test-number} - smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0 is within 2 ULPs of -4.9406564584124654e-324 ([-1.4821969375237396e-323, 4.9406564584124654e-324]) +# #2152 - ULP checks between differently signed values were wrong - double +ok {test-number} - smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0 not is within 1 ULPs of -4.9406564584124654e-324 ([-9.8813129168249309e-324, -0.0000000000000000e+00]) +# #2152 - ULP checks between differently signed values were wrong - float +ok {test-number} - smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) for: 0.0f is within 2 ULPs of -1.40129846e-45f ([-4.20389539e-45, 1.40129846e-45]) +# #2152 - ULP checks between differently signed values were wrong - float +ok {test-number} - smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) for: 0.0f not is within 1 ULPs of -1.40129846e-45f ([-2.80259693e-45, -0.00000000e+00]) +# #748 - captures with unexpected exceptions +not ok {test-number} - unexpected exception with message: 'answer := 42' with 1 message: 'expected exception' +# #748 - captures with unexpected exceptions +not ok {test-number} - unexpected exception with message: 'answer := 42'; expression was: thisThrows() with 1 message: 'expected exception' +# #748 - captures with unexpected exceptions +ok {test-number} - thisThrows() with 1 message: 'answer := 42' +# #809 +ok {test-number} - 42 == f for: 42 == {?} +# #833 +ok {test-number} - a == t for: 3 == 3 +# #833 +ok {test-number} - a == t for: 3 == 3 +# #833 +ok {test-number} - throws_int(true) +# #833 +ok {test-number} - throws_int(true), int +# #833 +ok {test-number} - throws_int(false) +# #833 +ok {test-number} - "aaa", Catch::Matchers::EndsWith("aaa") for: "aaa" ends with: "aaa" +# #833 +ok {test-number} - templated_tests(3) for: true +# #835 -- errno should not be touched by Catch +not ok {test-number} - f() == 0 for: 1 == 0 +# #835 -- errno should not be touched by Catch +ok {test-number} - errno == 1 for: 1 == 1 +# #872 +ok {test-number} - x == 4 for: {?} == 4 with 1 message: 'dummy := 0' +# #961 -- Dynamically created sections should all be reported +ok {test-number} - with 1 message: 'Everything is OK' +# #961 -- Dynamically created sections should all be reported +ok {test-number} - with 1 message: 'Everything is OK' +# #961 -- Dynamically created sections should all be reported +ok {test-number} - with 1 message: 'Everything is OK' +# #961 -- Dynamically created sections should all be reported +ok {test-number} - with 1 message: 'Everything is OK' +# #961 -- Dynamically created sections should all be reported +ok {test-number} - with 1 message: 'Everything is OK' +# 'Not' checks that should fail +not ok {test-number} - false != false +# 'Not' checks that should fail +not ok {test-number} - true != true +# 'Not' checks that should fail +not ok {test-number} - !true for: false +# 'Not' checks that should fail +not ok {test-number} - !(true) for: !true +# 'Not' checks that should fail +not ok {test-number} - !trueValue for: false +# 'Not' checks that should fail +not ok {test-number} - !(trueValue) for: !true +# 'Not' checks that should fail +not ok {test-number} - !(1 == 1) for: false +# 'Not' checks that should fail +not ok {test-number} - !(1 == 1) +# 'Not' checks that should succeed +ok {test-number} - false == false +# 'Not' checks that should succeed +ok {test-number} - true == true +# 'Not' checks that should succeed +ok {test-number} - !false for: true +# 'Not' checks that should succeed +ok {test-number} - !(false) for: !false +# 'Not' checks that should succeed +ok {test-number} - !falseValue for: true +# 'Not' checks that should succeed +ok {test-number} - !(falseValue) for: !false +# 'Not' checks that should succeed +ok {test-number} - !(1 == 2) for: true +# 'Not' checks that should succeed +ok {test-number} - !(1 == 2) +# (unimplemented) static bools can be evaluated +ok {test-number} - is_true::value == true for: true == true +# (unimplemented) static bools can be evaluated +ok {test-number} - true == is_true::value for: true == true +# (unimplemented) static bools can be evaluated +ok {test-number} - is_true::value == false for: false == false +# (unimplemented) static bools can be evaluated +ok {test-number} - false == is_true::value for: false == false +# (unimplemented) static bools can be evaluated +ok {test-number} - !is_true::value for: true +# (unimplemented) static bools can be evaluated +ok {test-number} - !!is_true::value for: true +# (unimplemented) static bools can be evaluated +ok {test-number} - is_true::value for: true +# (unimplemented) static bools can be evaluated +ok {test-number} - !(is_true::value) for: !false +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 1 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 1 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 2 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 2 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 4 +# 3x3x3 ints +ok {test-number} - y < z for: 4 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 5 +# 3x3x3 ints +ok {test-number} - y < z for: 5 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 9 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 7 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 7 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 8 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 8 +# 3x3x3 ints +ok {test-number} - x < y for: 3 < 6 +# 3x3x3 ints +ok {test-number} - y < z for: 6 < 9 +# 3x3x3 ints +ok {test-number} - x < z for: 3 < 9 +# A METHOD_AS_TEST_CASE based test run that fails +not ok {test-number} - s == "world" for: "hello" == "world" +# A METHOD_AS_TEST_CASE based test run that succeeds +ok {test-number} - s == "hello" for: "hello" == "hello" +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo +not ok {test-number} - Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo +not ok {test-number} - Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector +not ok {test-number} - Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector +not ok {test-number} - Template_Fixture_2::m_a.size() == 1 for: 0 == 1 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo +ok {test-number} - Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo +ok {test-number} - Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector +ok {test-number} - Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector +ok {test-number} - Template_Fixture_2::m_a.size() == 0 for: 0 == 0 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2 +not ok {test-number} - Template_Fixture_2{}.m_a.size() < 2 for: 6 < 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2 +not ok {test-number} - Template_Fixture_2{}.m_a.size() < 2 for: 2 < 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array +not ok {test-number} - Template_Fixture_2{}.m_a.size() < 2 for: 6 < 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array +not ok {test-number} - Template_Fixture_2{}.m_a.size() < 2 for: 2 < 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2 +ok {test-number} - Template_Fixture_2{}.m_a.size() >= 2 for: 6 >= 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2 +ok {test-number} - Template_Fixture_2{}.m_a.size() >= 2 for: 2 >= 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array +ok {test-number} - Template_Fixture_2{}.m_a.size() >= 2 for: 6 >= 2 +# A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array +ok {test-number} - Template_Fixture_2{}.m_a.size() >= 2 for: 2 >= 2 +# A TEMPLATE_TEST_CASE_METHOD based test run that fails - double +not ok {test-number} - Template_Fixture::m_a == 2 for: 1.0 == 2 +# A TEMPLATE_TEST_CASE_METHOD based test run that fails - float +not ok {test-number} - Template_Fixture::m_a == 2 for: 1.0f == 2 +# A TEMPLATE_TEST_CASE_METHOD based test run that fails - int +not ok {test-number} - Template_Fixture::m_a == 2 for: 1 == 2 +# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double +ok {test-number} - Template_Fixture::m_a == 1 for: 1.0 == 1 +# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float +ok {test-number} - Template_Fixture::m_a == 1 for: 1.0f == 1 +# A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int +ok {test-number} - Template_Fixture::m_a == 1 for: 1 == 1 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1 +not ok {test-number} - Nttp_Fixture::value == 0 for: 1 == 0 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3 +not ok {test-number} - Nttp_Fixture::value == 0 for: 3 == 0 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6 +not ok {test-number} - Nttp_Fixture::value == 0 for: 6 == 0 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1 +ok {test-number} - Nttp_Fixture::value > 0 for: 1 > 0 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3 +ok {test-number} - Nttp_Fixture::value > 0 for: 3 > 0 +# A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6 +ok {test-number} - Nttp_Fixture::value > 0 for: 6 > 0 +# A TEST_CASE_METHOD based test run that fails +not ok {test-number} - m_a == 2 for: 1 == 2 +# A TEST_CASE_METHOD based test run that succeeds +ok {test-number} - m_a == 1 for: 1 == 1 +# A Template product test case - Foo +ok {test-number} - x.size() == 0 for: 0 == 0 +# A Template product test case - Foo +ok {test-number} - x.size() == 0 for: 0 == 0 +# A Template product test case - std::vector +ok {test-number} - x.size() == 0 for: 0 == 0 +# A Template product test case - std::vector +ok {test-number} - x.size() == 0 for: 0 == 0 +# A Template product test case with array signature - Bar +ok {test-number} - x.size() > 0 for: 42 > 0 +# A Template product test case with array signature - Bar +ok {test-number} - x.size() > 0 for: 9 > 0 +# A Template product test case with array signature - std::array +ok {test-number} - x.size() > 0 for: 42 > 0 +# A Template product test case with array signature - std::array +ok {test-number} - x.size() > 0 for: 9 > 0 +# A comparison that uses literals instead of the normal constructor +ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 ) +# A comparison that uses literals instead of the normal constructor +ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 ) +# A comparison that uses literals instead of the normal constructor +ok {test-number} - -d == -1.23_a for: -1.23 == Approx( -1.23 ) +# A comparison that uses literals instead of the normal constructor +ok {test-number} - d == 1.2_a .epsilon(.1) for: 1.23 == Approx( 1.2 ) +# A comparison that uses literals instead of the normal constructor +ok {test-number} - d != 1.2_a .epsilon(.001) for: 1.23 != Approx( 1.2 ) +# A comparison that uses literals instead of the normal constructor +ok {test-number} - d == 1_a .epsilon(.3) for: 1.23 == Approx( 1.0 ) +# A couple of nested sections followed by a failure +ok {test-number} - with 1 message: 'that's not flying - that's failing in style' +# A couple of nested sections followed by a failure +not ok {test-number} - explicitly with 1 message: 'to infinity and beyond' +# A failing expression with a non streamable type is still captured +not ok {test-number} - &o1 == &o2 for: 0x == 0x +# A failing expression with a non streamable type is still captured +not ok {test-number} - o1 == o2 for: {?} == {?} +# Absolute margin +ok {test-number} - 104.0 != Approx(100.0) for: 104.0 != Approx( 100.0 ) +# Absolute margin +ok {test-number} - 104.0 == Approx(100.0).margin(5) for: 104.0 == Approx( 100.0 ) +# Absolute margin +ok {test-number} - 104.0 == Approx(100.0).margin(4) for: 104.0 == Approx( 100.0 ) +# Absolute margin +ok {test-number} - 104.0 != Approx(100.0).margin(3) for: 104.0 != Approx( 100.0 ) +# Absolute margin +ok {test-number} - 100.3 != Approx(100.0) for: 100.3 != Approx( 100.0 ) +# Absolute margin +ok {test-number} - 100.3 == Approx(100.0).margin(0.5) for: 100.3 == Approx( 100.0 ) +# An expression with side-effects should only be evaluated once +ok {test-number} - i++ == 7 for: 7 == 7 +# An expression with side-effects should only be evaluated once +ok {test-number} - i++ == 8 for: 8 == 8 +# An unchecked exception reports the line of the last assertion +ok {test-number} - 1 == 1 +# An unchecked exception reports the line of the last assertion +not ok {test-number} - unexpected exception with message: 'unexpected exception'; expression was: {Unknown expression after the reported line} +# Anonymous test case 1 +ok {test-number} - with 1 message: 'anonymous test case' +# Approx setters validate their arguments +ok {test-number} - Approx(0).margin(0) +# Approx setters validate their arguments +ok {test-number} - Approx(0).margin(1234656) +# Approx setters validate their arguments +ok {test-number} - Approx(0).margin(-2), std::domain_error +# Approx setters validate their arguments +ok {test-number} - Approx(0).epsilon(0) +# Approx setters validate their arguments +ok {test-number} - Approx(0).epsilon(1) +# Approx setters validate their arguments +ok {test-number} - Approx(0).epsilon(-0.001), std::domain_error +# Approx setters validate their arguments +ok {test-number} - Approx(0).epsilon(1.0001), std::domain_error +# Approx with exactly-representable margin +ok {test-number} - 0.25f == Approx(0.0f).margin(0.25f) for: 0.25f == Approx( 0.0 ) +# Approx with exactly-representable margin +ok {test-number} - 0.0f == Approx(0.25f).margin(0.25f) for: 0.0f == Approx( 0.25 ) +# Approx with exactly-representable margin +ok {test-number} - 0.5f == Approx(0.25f).margin(0.25f) for: 0.5f == Approx( 0.25 ) +# Approx with exactly-representable margin +ok {test-number} - 245.0f == Approx(245.25f).margin(0.25f) for: 245.0f == Approx( 245.25 ) +# Approx with exactly-representable margin +ok {test-number} - 245.5f == Approx(245.25f).margin(0.25f) for: 245.5f == Approx( 245.25 ) +# Approximate PI +ok {test-number} - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) for: 3.1428571429 == Approx( 3.141 ) +# Approximate PI +ok {test-number} - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) for: 3.1428571429 != Approx( 3.141 ) +# Approximate comparisons with different epsilons +ok {test-number} - d != Approx( 1.231 ) for: 1.23 != Approx( 1.231 ) +# Approximate comparisons with different epsilons +ok {test-number} - d == Approx( 1.231 ).epsilon( 0.1 ) for: 1.23 == Approx( 1.231 ) +# Approximate comparisons with floats +ok {test-number} - 1.23f == Approx( 1.23f ) for: 1.23f == Approx( 1.2300000191 ) +# Approximate comparisons with floats +ok {test-number} - 0.0f == Approx( 0.0f ) for: 0.0f == Approx( 0.0 ) +# Approximate comparisons with ints +ok {test-number} - 1 == Approx( 1 ) for: 1 == Approx( 1.0 ) +# Approximate comparisons with ints +ok {test-number} - 0 == Approx( 0 ) for: 0 == Approx( 0.0 ) +# Approximate comparisons with mixed numeric types +ok {test-number} - 1.0f == Approx( 1 ) for: 1.0f == Approx( 1.0 ) +# Approximate comparisons with mixed numeric types +ok {test-number} - 0 == Approx( dZero) for: 0 == Approx( 0.0 ) +# Approximate comparisons with mixed numeric types +ok {test-number} - 0 == Approx( dSmall ).margin( 0.001 ) for: 0 == Approx( 0.00001 ) +# Approximate comparisons with mixed numeric types +ok {test-number} - 1.234f == Approx( dMedium ) for: 1.234f == Approx( 1.234 ) +# Approximate comparisons with mixed numeric types +ok {test-number} - dMedium == Approx( 1.234f ) for: 1.234 == Approx( 1.2339999676 ) +# Arbitrary predicate matcher +ok {test-number} - 1, Predicate( alwaysTrue, "always true" ) for: 1 matches predicate: "always true" +# Arbitrary predicate matcher +ok {test-number} - 1, !Predicate( alwaysFalse, "always false" ) for: 1 not matches predicate: "always false" +# Arbitrary predicate matcher +ok {test-number} - "Hello olleH", Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) for: "Hello olleH" matches predicate: "First and last character should be equal" +# Arbitrary predicate matcher +ok {test-number} - "This wouldn't pass", !Predicate( []( std::string const& str ) -> bool { return str.front() == str.back(); } ) for: "This wouldn't pass" not matches undescribed predicate +# Assertion macros support bit operators and bool conversions +ok {test-number} - lhs | rhs for: Val: 1 | Val: 2 +# Assertion macros support bit operators and bool conversions +ok {test-number} - !(lhs & rhs) for: !(Val: 1 & Val: 2) +# Assertion macros support bit operators and bool conversions +ok {test-number} - HasBitOperators{ 1 } & HasBitOperators{ 1 } for: Val: 1 & Val: 1 +# Assertion macros support bit operators and bool conversions +ok {test-number} - lhs ^ rhs for: Val: 1 ^ Val: 2 +# Assertion macros support bit operators and bool conversions +ok {test-number} - !(lhs ^ lhs) for: !(Val: 1 ^ Val: 1) +# Assertions then sections +ok {test-number} - true +# Assertions then sections +ok {test-number} - true +# Assertions then sections +ok {test-number} - true +# Assertions then sections +ok {test-number} - true +# Assertions then sections +ok {test-number} - true +# Assertions then sections +ok {test-number} - true +# Basic use of the Contains range matcher +ok {test-number} - a, Contains(1) for: { 1, 2, 3 } contains element 1 +# Basic use of the Contains range matcher +ok {test-number} - b, Contains(1) for: { 0, 1, 2 } contains element 1 +# Basic use of the Contains range matcher +ok {test-number} - c, !Contains(1) for: { 4, 5, 6 } not contains element 1 +# Basic use of the Contains range matcher +ok {test-number} - a, Contains(0, close_enough) for: { 1, 2, 3 } contains element 0 +# Basic use of the Contains range matcher +ok {test-number} - b, Contains(0, close_enough) for: { 0, 1, 2 } contains element 0 +# Basic use of the Contains range matcher +ok {test-number} - c, !Contains(0, close_enough) for: { 4, 5, 6 } not contains element 0 +# Basic use of the Contains range matcher +ok {test-number} - a, Contains(4, [](auto&& lhs, size_t sz) { return lhs.size() == sz; }) for: { "abc", "abcd", "abcde" } contains element 4 +# Basic use of the Contains range matcher +ok {test-number} - in, Contains(1) for: { 1, 2, 3, 4, 5 } contains element 1 +# Basic use of the Contains range matcher +ok {test-number} - in, !Contains(8) for: { 1, 2, 3, 4, 5 } not contains element 8 +# Basic use of the Contains range matcher +ok {test-number} - in, Contains(MoveOnlyTestElement{ 2 }) for: { 1, 2, 3 } contains element 2 +# Basic use of the Contains range matcher +ok {test-number} - in, !Contains(MoveOnlyTestElement{ 9 }) for: { 1, 2, 3 } not contains element 9 +# Basic use of the Contains range matcher +ok {test-number} - in, Contains(Catch::Matchers::WithinAbs(0.5, 0.5)) for: { 1.0, 2.0, 3.0, 0.0 } contains element matching is within 0.5 of 0.5 +# Basic use of the Empty range matcher +ok {test-number} - empty_array, IsEmpty() for: { } is empty +# Basic use of the Empty range matcher +ok {test-number} - non_empty_array, !IsEmpty() for: { 0.0 } not is empty +# Basic use of the Empty range matcher +ok {test-number} - empty_vec, IsEmpty() for: { } is empty +# Basic use of the Empty range matcher +ok {test-number} - non_empty_vec, !IsEmpty() for: { 'a', 'b', 'c' } not is empty +# Basic use of the Empty range matcher +ok {test-number} - inner_lists_are_empty, !IsEmpty() for: { { } } not is empty +# Basic use of the Empty range matcher +ok {test-number} - inner_lists_are_empty.front(), IsEmpty() for: { } is empty +# Basic use of the Empty range matcher +ok {test-number} - has_empty{}, !IsEmpty() for: {?} not is empty +# Basic use of the Empty range matcher +ok {test-number} - unrelated::ADL_empty{}, IsEmpty() for: {?} is empty +# CAPTURE can deal with complex expressions +ok {test-number} - with 7 messages: 'a := 1' and 'b := 2' and 'c := 3' and 'a + b := 3' and 'a+b := 3' and 'c > b := true' and 'a == 1 := true' +# CAPTURE can deal with complex expressions involving commas +ok {test-number} - with 7 messages: 'std::vector{1, 2, 3}[0, 1, 2] := 3' and 'std::vector{1, 2, 3}[(0, 1)] := 2' and 'std::vector{1, 2, 3}[0] := 1' and '(helper_1436{12, -12}) := { 12, -12 }' and '(helper_1436(-12, 12)) := { -12, 12 }' and '(1, 2) := 2' and '(2, 3) := 3' +# CAPTURE parses string and character constants +ok {test-number} - with 11 messages: '("comma, in string", "escaped, \", ") := "escaped, ", "' and '"single quote in string,'," := "single quote in string,',"' and '"some escapes, \\,\\\\" := "some escapes, \,\\"' and '"some, ), unmatched, } prenheses {[<" := "some, ), unmatched, } prenheses {[<"' and ''"' := '"'' and ''\'' := '''' and '',' := ','' and ''}' := '}'' and '')' := ')'' and ''(' := '('' and ''{' := '{'' +# Capture and info messages +ok {test-number} - true with 1 message: 'i := 2' +# Capture and info messages +ok {test-number} - true with 1 message: '3' +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - eq( "", "" ) for: true +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - !(eq( "", "a" )) for: !false +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - eq( "a", "a" ) for: true +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - eq( "a", "A" ) for: true +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - eq( "A", "a" ) for: true +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - eq( "A", "A" ) for: true +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - !(eq( "a", "b" )) for: !false +# CaseInsensitiveEqualsTo is case insensitive +ok {test-number} - !(eq( "a", "B" )) for: !false +# CaseInsensitiveLess is case insensitive +ok {test-number} - lt( "", "a" ) for: true +# CaseInsensitiveLess is case insensitive +ok {test-number} - !(lt( "a", "a" )) for: !false +# CaseInsensitiveLess is case insensitive +ok {test-number} - !(lt( "", "" )) for: !false +# CaseInsensitiveLess is case insensitive +ok {test-number} - lt( "a", "b" ) for: true +# CaseInsensitiveLess is case insensitive +ok {test-number} - lt( "a", "B" ) for: true +# CaseInsensitiveLess is case insensitive +ok {test-number} - lt( "A", "b" ) for: true +# CaseInsensitiveLess is case insensitive +ok {test-number} - lt( "A", "B" ) for: true +# Character pretty printing +ok {test-number} - tab == '\t' for: '\t' == '\t' +# Character pretty printing +ok {test-number} - newline == '\n' for: '\n' == '\n' +# Character pretty printing +ok {test-number} - carr_return == '\r' for: '\r' == '\r' +# Character pretty printing +ok {test-number} - form_feed == '\f' for: '\f' == '\f' +# Character pretty printing +ok {test-number} - space == ' ' for: ' ' == ' ' +# Character pretty printing +ok {test-number} - c == chars[i] for: 'a' == 'a' +# Character pretty printing +ok {test-number} - c == chars[i] for: 'z' == 'z' +# Character pretty printing +ok {test-number} - c == chars[i] for: 'A' == 'A' +# Character pretty printing +ok {test-number} - c == chars[i] for: 'Z' == 'Z' +# Character pretty printing +ok {test-number} - null_terminator == '\0' for: 0 == 0 +# Character pretty printing +ok {test-number} - c == i for: 2 == 2 +# Character pretty printing +ok {test-number} - c == i for: 3 == 3 +# Character pretty printing +ok {test-number} - c == i for: 4 == 4 +# Character pretty printing +ok {test-number} - c == i for: 5 == 5 +# Clara::Arg supports single-arg parse the way Opt does +ok {test-number} - name.empty() for: true +# Clara::Arg supports single-arg parse the way Opt does +ok {test-number} - name == "foo" for: "foo" == "foo" +# Clara::Opt supports accept-many lambdas +ok {test-number} - !(parse_result) for: !{?} +# Clara::Opt supports accept-many lambdas +ok {test-number} - parse_result for: {?} +# Clara::Opt supports accept-many lambdas +ok {test-number} - res == std::vector{ "aaa", "bbb" } for: { "aaa", "bbb" } == { "aaa", "bbb" } +# Combining MatchAllOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( ( MatcherA() && MatcherB() ) && MatcherC() ), Catch::Matchers::Detail:: MatchAllOfGeneric>::value' +# Combining MatchAllOfGeneric does not nest +ok {test-number} - 1, ( MatcherA() && MatcherB() ) && MatcherC() for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) +# Combining MatchAllOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( MatcherA() && ( MatcherB() && MatcherC() ) ), Catch::Matchers::Detail:: MatchAllOfGeneric>::value' +# Combining MatchAllOfGeneric does not nest +ok {test-number} - 1, MatcherA() && ( MatcherB() && MatcherC() ) for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) +# Combining MatchAllOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) ), Catch::Matchers::Detail:: MatchAllOfGeneric>:: value' +# Combining MatchAllOfGeneric does not nest +ok {test-number} - 1, ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 and equals: true ) +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( ( MatcherA() || MatcherB() ) || MatcherC() ), Catch::Matchers::Detail:: MatchAnyOfGeneric>::value' +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - 1, ( MatcherA() || MatcherB() ) || MatcherC() for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( MatcherA() || ( MatcherB() || MatcherC() ) ), Catch::Matchers::Detail:: MatchAnyOfGeneric>::value' +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - 1, MatcherA() || ( MatcherB() || MatcherC() ) for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) ), Catch::Matchers::Detail:: MatchAnyOfGeneric>:: value' +# Combining MatchAnyOfGeneric does not nest +ok {test-number} - 1, ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 or equals: true ) +# Combining MatchNotOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( !MatcherA() ), Catch::Matchers::Detail::MatchNotOfGeneric>::value' +# Combining MatchNotOfGeneric does not nest +ok {test-number} - 0, !MatcherA() for: 0 not equals: (int) 1 or (float) 1.0f +# Combining MatchNotOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same::value' +# Combining MatchNotOfGeneric does not nest +ok {test-number} - 1, !!MatcherA() for: 1 equals: (int) 1 or (float) 1.0f +# Combining MatchNotOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same< decltype( !!!MatcherA() ), Catch::Matchers::Detail::MatchNotOfGeneric>::value' +# Combining MatchNotOfGeneric does not nest +ok {test-number} - 0, !!!MatcherA() for: 0 not equals: (int) 1 or (float) 1.0f +# Combining MatchNotOfGeneric does not nest +ok {test-number} - with 1 message: 'std::is_same::value' +# Combining MatchNotOfGeneric does not nest +ok {test-number} - 1, !!!!MatcherA() for: 1 equals: (int) 1 or (float) 1.0f +# Combining concrete matchers does not use templated matchers +ok {test-number} - with 1 message: 'std::is_same>::value' +# Combining only templated matchers +ok {test-number} - with 1 message: 'std::is_same>::value' +# Combining only templated matchers +ok {test-number} - 1, MatcherA() || MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 ) +# Combining only templated matchers +ok {test-number} - with 1 message: 'std::is_same>::value' +# Combining only templated matchers +ok {test-number} - 1, MatcherA() && MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 ) +# Combining only templated matchers +ok {test-number} - with 1 message: 'std::is_same< decltype( MatcherA() || !MatcherB() ), Catch::Matchers::Detail::MatchAnyOfGeneric< MatcherA, Catch::Matchers::Detail::MatchNotOfGeneric>>::value' +# Combining only templated matchers +ok {test-number} - 1, MatcherA() || !MatcherB() for: 1 ( equals: (int) 1 or (float) 1.0f or not equals: (long long) 1 ) +# Combining templated and concrete matchers +ok {test-number} - vec, Predicate>( []( auto const& v ) { return std::all_of( v.begin(), v.end(), []( int elem ) { return elem % 2 == 1; } ); }, "All elements are odd" ) && !EqualsRange( a ) for: { 1, 3, 5 } ( matches predicate: "All elements are odd" and not Equals: { 5, 3, 1 } ) +# Combining templated and concrete matchers +ok {test-number} - str, StartsWith( "foo" ) && EqualsRange( arr ) && EndsWith( "bar" ) for: "foobar" ( starts with: "foo" and Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and ends with: "bar" ) +# Combining templated and concrete matchers +ok {test-number} - str, StartsWith( "foo" ) && !EqualsRange( bad_arr ) && EndsWith( "bar" ) for: "foobar" ( starts with: "foo" and not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and ends with: "bar" ) +# Combining templated and concrete matchers +ok {test-number} - str, EqualsRange( arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) for: "foobar" ( Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) +# Combining templated and concrete matchers +ok {test-number} - str, !EqualsRange( bad_arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) for: "foobar" ( not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) +# Combining templated and concrete matchers +ok {test-number} - str, EqualsRange( bad_arr ) || ( StartsWith( "foo" ) && EndsWith( "bar" ) ) for: "foobar" ( Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } or ( starts with: "foo" and ends with: "bar" ) ) +# Combining templated and concrete matchers +ok {test-number} - str, ( StartsWith( "foo" ) && EndsWith( "bar" ) ) || EqualsRange( bad_arr ) for: "foobar" ( ( starts with: "foo" and ends with: "bar" ) or Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } ) +# Combining templated matchers +ok {test-number} - container, EqualsRange( a ) || EqualsRange( b ) || EqualsRange( c ) for: { 1, 2, 3 } ( Equals: { 1, 2, 3 } or Equals: { 0, 1, 2 } or Equals: { 4, 5, 6 } ) +# Commas in various macros are allowed +ok {test-number} - std::vector{constructor_throws{}, constructor_throws{}} +# Commas in various macros are allowed +ok {test-number} - std::vector{constructor_throws{}, constructor_throws{}} +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2, 3} == std::vector{1, 2, 3} +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2, 3} == std::vector{1, 2, 3} +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +# Commas in various macros are allowed +ok {test-number} - !(std::vector{1, 2} == std::vector{1, 2, 3}) for: !({ 1, 2 } == { 1, 2, 3 }) +# Commas in various macros are allowed +ok {test-number} - !(std::vector{1, 2} == std::vector{1, 2, 3}) for: !({ 1, 2 } == { 1, 2, 3 }) +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +# Commas in various macros are allowed +ok {test-number} - true +# Commas in various macros are allowed +ok {test-number} - std::vector{1, 2} == std::vector{1, 2} for: { 1, 2 } == { 1, 2 } +# Comparing function pointers +ok {test-number} - a for: 0x +# Comparing function pointers +ok {test-number} - a == &foo for: 0x == 0x +# Comparison ops +ok {test-number} - SimplePcg32{} == SimplePcg32{} for: {?} == {?} +# Comparison ops +ok {test-number} - SimplePcg32{ 0 } != SimplePcg32{} for: {?} != {?} +# Comparison ops +ok {test-number} - !(SimplePcg32{ 1 } == SimplePcg32{ 2 }) for: !({?} == {?}) +# Comparison ops +ok {test-number} - !(SimplePcg32{ 1 } != SimplePcg32{ 1 }) for: !({?} != {?}) +# Comparison with explicitly convertible types +ok {test-number} - td == Approx(10.0) for: StrongDoubleTypedef(10) == Approx( 10.0 ) +# Comparison with explicitly convertible types +ok {test-number} - Approx(10.0) == td for: Approx( 10.0 ) == StrongDoubleTypedef(10) +# Comparison with explicitly convertible types +ok {test-number} - td != Approx(11.0) for: StrongDoubleTypedef(10) != Approx( 11.0 ) +# Comparison with explicitly convertible types +ok {test-number} - Approx(11.0) != td for: Approx( 11.0 ) != StrongDoubleTypedef(10) +# Comparison with explicitly convertible types +ok {test-number} - td <= Approx(10.0) for: StrongDoubleTypedef(10) <= Approx( 10.0 ) +# Comparison with explicitly convertible types +ok {test-number} - td <= Approx(11.0) for: StrongDoubleTypedef(10) <= Approx( 11.0 ) +# Comparison with explicitly convertible types +ok {test-number} - Approx(10.0) <= td for: Approx( 10.0 ) <= StrongDoubleTypedef(10) +# Comparison with explicitly convertible types +ok {test-number} - Approx(9.0) <= td for: Approx( 9.0 ) <= StrongDoubleTypedef(10) +# Comparison with explicitly convertible types +ok {test-number} - td >= Approx(9.0) for: StrongDoubleTypedef(10) >= Approx( 9.0 ) +# Comparison with explicitly convertible types +ok {test-number} - td >= Approx(td) for: StrongDoubleTypedef(10) >= Approx( 10.0 ) +# Comparison with explicitly convertible types +ok {test-number} - Approx(td) >= td for: Approx( 10.0 ) >= StrongDoubleTypedef(10) +# Comparison with explicitly convertible types +ok {test-number} - Approx(11.0) >= td for: Approx( 11.0 ) >= StrongDoubleTypedef(10) +# Comparisons between ints where one side is computed +ok {test-number} - 54 == 6*9 for: 54 == 54 +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - ( -1 > 2u ) for: true +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - -1 > 2u for: -1 > 2 +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - ( 2u < -1 ) for: true +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - 2u < -1 for: 2 < -1 +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - ( minInt > 2u ) for: true +# Comparisons between unsigned ints and negative signed ints match c++ standard behaviour +ok {test-number} - minInt > 2u for: -2147483648 > 2 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - i == 1 for: 1 == 1 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - ui == 2 for: 2 == 2 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - l == 3 for: 3 == 3 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - ul == 4 for: 4 == 4 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - c == 5 for: 5 == 5 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - uc == 6 for: 6 == 6 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 1 == i for: 1 == 1 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 2 == ui for: 2 == 2 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 3 == l for: 3 == 3 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 4 == ul for: 4 == 4 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 5 == c for: 5 == 5 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - 6 == uc for: 6 == 6 +# Comparisons with int literals don't warn when mixing signed/ unsigned +ok {test-number} - (std::numeric_limits::max)() > ul for: 4294967295 (0x) > 4 +# Composed generic matchers shortcircuit +ok {test-number} - !(matcher.match( 1 )) for: !false +# Composed generic matchers shortcircuit +ok {test-number} - first.matchCalled for: true +# Composed generic matchers shortcircuit +ok {test-number} - !second.matchCalled for: true +# Composed generic matchers shortcircuit +ok {test-number} - matcher.match( 1 ) for: true +# Composed generic matchers shortcircuit +ok {test-number} - first.matchCalled for: true +# Composed generic matchers shortcircuit +ok {test-number} - !second.matchCalled for: true +# Composed matchers shortcircuit +ok {test-number} - !(matcher.match( 1 )) for: !false +# Composed matchers shortcircuit +ok {test-number} - first.matchCalled for: true +# Composed matchers shortcircuit +ok {test-number} - !second.matchCalled for: true +# Composed matchers shortcircuit +ok {test-number} - matcher.match( 1 ) for: true +# Composed matchers shortcircuit +ok {test-number} - first.matchCalled for: true +# Composed matchers shortcircuit +ok {test-number} - !second.matchCalled for: true +# Contains string matcher +not ok {test-number} - testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "not there" (case insensitive) +# Contains string matcher +not ok {test-number} - testStringForMatching(), ContainsSubstring( "STRING" ) for: "this string contains 'abc' as a substring" contains: "STRING" +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - elem % 2 == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - call_count == 1 for: 1 == 1 +# Copy and then generate a range +ok {test-number} - make_data().size() == test_count for: 6 == 6 +# Custom exceptions can be translated when testing for nothrow +not ok {test-number} - unexpected exception with message: 'custom exception - not std'; expression was: throwCustom() +# Custom exceptions can be translated when testing for throwing as something else +not ok {test-number} - unexpected exception with message: 'custom exception - not std'; expression was: throwCustom(), std::exception +# Custom std-exceptions can be custom translated +not ok {test-number} - unexpected exception with message: 'custom std exception' +# Default scale is invisible to comparison +ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.000001 != Approx( 100.0 ) +# Default scale is invisible to comparison +ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 ) +# Directly creating an EnumInfo +ok {test-number} - enumInfo->lookup(0) == "Value1" for: Value1 == "Value1" +# Directly creating an EnumInfo +ok {test-number} - enumInfo->lookup(1) == "Value2" for: Value2 == "Value2" +# Directly creating an EnumInfo +ok {test-number} - enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **} == "{** unexpected enum value **}" +# Empty tag is not allowed +ok {test-number} - Catch::TestCaseInfo( "", { "fake test name", "[]" }, dummySourceLineInfo ) +# EndsWith string matcher +not ok {test-number} - testStringForMatching(), EndsWith( "Substring" ) for: "this string contains 'abc' as a substring" ends with: "Substring" +# EndsWith string matcher +not ok {test-number} - testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: "this" (case insensitive) +# Enums can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( EnumClass3::Value1 ) == "Value1" for: "Value1" == "Value1" +# Enums can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( EnumClass3::Value2 ) == "Value2" for: "Value2" == "Value2" +# Enums can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( EnumClass3::Value3 ) == "Value3" for: "Value3" == "Value3" +# Enums can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" for: "{** unexpected enum value **}" == "{** unexpected enum value **}" +# Enums can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( ec3 ) == "Value2" for: "Value2" == "Value2" +# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( Bikeshed::Colours::Red ) == "Red" for: "Red" == "Red" +# Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM +ok {test-number} - stringify( Bikeshed::Colours::Blue ) == "Blue" for: "Blue" == "Blue" +# Epsilon only applies to Approx's value +ok {test-number} - 101.01 != Approx(100).epsilon(0.01) for: 101.01 != Approx( 100.0 ) +# Equality checks that should fail +not ok {test-number} - data.int_seven == 6 for: 7 == 6 +# Equality checks that should fail +not ok {test-number} - data.int_seven == 8 for: 7 == 8 +# Equality checks that should fail +not ok {test-number} - data.int_seven == 0 for: 7 == 0 +# Equality checks that should fail +not ok {test-number} - data.float_nine_point_one == Approx( 9.11f ) for: 9.1f == Approx( 9.1099996567 ) +# Equality checks that should fail +not ok {test-number} - data.float_nine_point_one == Approx( 9.0f ) for: 9.1f == Approx( 9.0 ) +# Equality checks that should fail +not ok {test-number} - data.float_nine_point_one == Approx( 1 ) for: 9.1f == Approx( 1.0 ) +# Equality checks that should fail +not ok {test-number} - data.float_nine_point_one == Approx( 0 ) for: 9.1f == Approx( 0.0 ) +# Equality checks that should fail +not ok {test-number} - data.double_pi == Approx( 3.1415 ) for: 3.1415926535 == Approx( 3.1415 ) +# Equality checks that should fail +not ok {test-number} - data.str_hello == "goodbye" for: "hello" == "goodbye" +# Equality checks that should fail +not ok {test-number} - data.str_hello == "hell" for: "hello" == "hell" +# Equality checks that should fail +not ok {test-number} - data.str_hello == "hello1" for: "hello" == "hello1" +# Equality checks that should fail +not ok {test-number} - data.str_hello.size() == 6 for: 5 == 6 +# Equality checks that should fail +not ok {test-number} - x == Approx( 1.301 ) for: 1.3 == Approx( 1.301 ) +# Equality checks that should succeed +ok {test-number} - data.int_seven == 7 for: 7 == 7 +# Equality checks that should succeed +ok {test-number} - data.float_nine_point_one == Approx( 9.1f ) for: 9.1f == Approx( 9.1000003815 ) +# Equality checks that should succeed +ok {test-number} - data.double_pi == Approx( 3.1415926535 ) for: 3.1415926535 == Approx( 3.1415926535 ) +# Equality checks that should succeed +ok {test-number} - data.str_hello == "hello" for: "hello" == "hello" +# Equality checks that should succeed +ok {test-number} - "hello" == data.str_hello for: "hello" == "hello" +# Equality checks that should succeed +ok {test-number} - data.str_hello.size() == 5 for: 5 == 5 +# Equality checks that should succeed +ok {test-number} - x == Approx( 1.3 ) for: 1.3 == Approx( 1.3 ) +# Equals +ok {test-number} - testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" +# Equals +ok {test-number} - testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive) +# Equals string matcher +not ok {test-number} - testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) for: "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring" +# Equals string matcher +not ok {test-number} - testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" equals: "something else" (case insensitive) +# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified +ok {test-number} - ::Catch::Detail::stringify(WhatException{}) == "This exception has overridden what() method" for: "This exception has overridden what() method" == "This exception has overridden what() method" +# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified +ok {test-number} - ::Catch::Detail::stringify(OperatorException{}) == "OperatorException" for: "OperatorException" == "OperatorException" +# Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified +ok {test-number} - ::Catch::Detail::stringify(StringMakerException{}) == "StringMakerException" for: "StringMakerException" == "StringMakerException" +# Exception matchers that fail +not ok {test-number} - expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } +# Exception matchers that fail +not ok {test-number} - expected exception, got none; expression was: doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } +# Exception matchers that fail +not ok {test-number} - unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } +# Exception matchers that fail +not ok {test-number} - unexpected exception with message: 'Unknown exception'; expression was: throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } +# Exception matchers that fail +not ok {test-number} - throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +# Exception matchers that fail +not ok {test-number} - throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +# Exception matchers that succeed +ok {test-number} - throwsSpecialException( 1 ), SpecialException, ExceptionMatcher{ 1 } for: SpecialException::what special exception has value of 1 +# Exception matchers that succeed +ok {test-number} - throwsSpecialException( 2 ), SpecialException, ExceptionMatcher{ 2 } for: SpecialException::what special exception has value of 2 +# Exception messages can be tested for +ok {test-number} - thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" +# Exception messages can be tested for +ok {test-number} - thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) for: "expected exception" equals: "expected exception" (case insensitive) +# Exception messages can be tested for +ok {test-number} - thisThrows(), StartsWith( "expected" ) for: "expected exception" starts with: "expected" +# Exception messages can be tested for +ok {test-number} - thisThrows(), EndsWith( "exception" ) for: "expected exception" ends with: "exception" +# Exception messages can be tested for +ok {test-number} - thisThrows(), ContainsSubstring( "except" ) for: "expected exception" contains: "except" +# Exception messages can be tested for +ok {test-number} - thisThrows(), ContainsSubstring( "exCept", Catch::CaseSensitive::No ) for: "expected exception" contains: "except" (case insensitive) +# Exceptions matchers +ok {test-number} - throwsDerivedException(), DerivedException, Message( "DerivedException::what" ) for: DerivedException::what exception message matches "DerivedException::what" +# Exceptions matchers +ok {test-number} - throwsDerivedException(), DerivedException, !Message( "derivedexception::what" ) for: DerivedException::what not exception message matches "derivedexception::what" +# Exceptions matchers +ok {test-number} - throwsSpecialException( 2 ), SpecialException, !Message( "DerivedException::what" ) for: SpecialException::what not exception message matches "DerivedException::what" +# Exceptions matchers +ok {test-number} - throwsSpecialException( 2 ), SpecialException, Message( "SpecialException::what" ) for: SpecialException::what exception message matches "SpecialException::what" +# Expected exceptions that don't throw or unexpected exceptions fail the test +not ok {test-number} - unexpected exception with message: 'expected exception'; expression was: thisThrows(), std::string +# Expected exceptions that don't throw or unexpected exceptions fail the test +not ok {test-number} - expected exception, got none; expression was: thisDoesntThrow(), std::domain_error +# Expected exceptions that don't throw or unexpected exceptions fail the test +not ok {test-number} - unexpected exception with message: 'expected exception'; expression was: thisThrows() +# FAIL aborts the test +not ok {test-number} - explicitly with 1 message: 'This is a failure' +# FAIL does not require an argument +not ok {test-number} - explicitly +# FAIL_CHECK does not abort the test +not ok {test-number} - explicitly with 1 message: 'This is a failure' +# FAIL_CHECK does not abort the test +warning {test-number} - 'This message appears in the output' +# Factorials are computed +ok {test-number} - Factorial(0) == 1 for: 1 == 1 +# Factorials are computed +ok {test-number} - Factorial(1) == 1 for: 1 == 1 +# Factorials are computed +ok {test-number} - Factorial(2) == 2 for: 2 == 2 +# Factorials are computed +ok {test-number} - Factorial(3) == 6 for: 6 == 6 +# Factorials are computed +ok {test-number} - Factorial(10) == 3628800 for: 3628800 (0x) == 3628800 (0x) +# Floating point matchers: double +ok {test-number} - 10., WithinRel( 11.1, 0.1 ) for: 10.0 and 11.1 are within 10% of each other +# Floating point matchers: double +ok {test-number} - 10., !WithinRel( 11.2, 0.1 ) for: 10.0 not and 11.2 are within 10% of each other +# Floating point matchers: double +ok {test-number} - 1., !WithinRel( 0., 0.99 ) for: 1.0 not and 0 are within 99% of each other +# Floating point matchers: double +ok {test-number} - -0., WithinRel( 0. ) for: -0.0 and 0 are within 2.22045e-12% of each other +# Floating point matchers: double +ok {test-number} - v1, WithinRel( v2 ) for: 0.0 and 2.22507e-308 are within 2.22045e-12% of each other +# Floating point matchers: double +ok {test-number} - 1., WithinAbs( 1., 0 ) for: 1.0 is within 0.0 of 1.0 +# Floating point matchers: double +ok {test-number} - 0., WithinAbs( 1., 1 ) for: 0.0 is within 1.0 of 1.0 +# Floating point matchers: double +ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0 +# Floating point matchers: double +ok {test-number} - 0., !WithinAbs( 1., 0.99 ) for: 0.0 not is within 0.99 of 1.0 +# Floating point matchers: double +ok {test-number} - 11., !WithinAbs( 10., 0.5 ) for: 11.0 not is within 0.5 of 10.0 +# Floating point matchers: double +ok {test-number} - 10., !WithinAbs( 11., 0.5 ) for: 10.0 not is within 0.5 of 11.0 +# Floating point matchers: double +ok {test-number} - -10., WithinAbs( -10., 0.5 ) for: -10.0 is within 0.5 of -10.0 +# Floating point matchers: double +ok {test-number} - -10., WithinAbs( -9.6, 0.5 ) for: -10.0 is within 0.5 of -9.6 +# Floating point matchers: double +ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) +# Floating point matchers: double +ok {test-number} - nextafter( 1., 2. ), WithinULP( 1., 1 ) for: 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00]) +# Floating point matchers: double +ok {test-number} - 0., WithinULP( nextafter( 0., 1. ), 1 ) for: 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324]) +# Floating point matchers: double +ok {test-number} - 1., WithinULP( nextafter( 1., 0. ), 1 ) for: 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00]) +# Floating point matchers: double +ok {test-number} - 1., !WithinULP( nextafter( 1., 2. ), 0 ) for: 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00]) +# Floating point matchers: double +ok {test-number} - 1., WithinULP( 1., 0 ) for: 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) +# Floating point matchers: double +ok {test-number} - -0., WithinULP( 0., 0 ) for: -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00]) +# Floating point matchers: double +ok {test-number} - 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) for: 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) ) +# Floating point matchers: double +ok {test-number} - 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) for: 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) ) +# Floating point matchers: double +ok {test-number} - 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) for: 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) +# Floating point matchers: double +ok {test-number} - WithinAbs( 1., 0. ) +# Floating point matchers: double +ok {test-number} - WithinAbs( 1., -1. ), std::domain_error +# Floating point matchers: double +ok {test-number} - WithinULP( 1., 0 ) +# Floating point matchers: double +ok {test-number} - WithinRel( 1., 0. ) +# Floating point matchers: double +ok {test-number} - WithinRel( 1., -0.2 ), std::domain_error +# Floating point matchers: double +ok {test-number} - WithinRel( 1., 1. ), std::domain_error +# Floating point matchers: float +ok {test-number} - 10.f, WithinRel( 11.1f, 0.1f ) for: 10.0f and 11.1 are within 10% of each other +# Floating point matchers: float +ok {test-number} - 10.f, !WithinRel( 11.2f, 0.1f ) for: 10.0f not and 11.2 are within 10% of each other +# Floating point matchers: float +ok {test-number} - 1.f, !WithinRel( 0.f, 0.99f ) for: 1.0f not and 0 are within 99% of each other +# Floating point matchers: float +ok {test-number} - -0.f, WithinRel( 0.f ) for: -0.0f and 0 are within 0.00119209% of each other +# Floating point matchers: float +ok {test-number} - v1, WithinRel( v2 ) for: 0.0f and 1.17549e-38 are within 0.00119209% of each other +# Floating point matchers: float +ok {test-number} - 1.f, WithinAbs( 1.f, 0 ) for: 1.0f is within 0.0 of 1.0 +# Floating point matchers: float +ok {test-number} - 0.f, WithinAbs( 1.f, 1 ) for: 0.0f is within 1.0 of 1.0 +# Floating point matchers: float +ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0 +# Floating point matchers: float +ok {test-number} - 0.f, !WithinAbs( 1.f, 0.99f ) for: 0.0f not is within 0.9900000095 of 1.0 +# Floating point matchers: float +ok {test-number} - 0.f, WithinAbs( -0.f, 0 ) for: 0.0f is within 0.0 of -0.0 +# Floating point matchers: float +ok {test-number} - 11.f, !WithinAbs( 10.f, 0.5f ) for: 11.0f not is within 0.5 of 10.0 +# Floating point matchers: float +ok {test-number} - 10.f, !WithinAbs( 11.f, 0.5f ) for: 10.0f not is within 0.5 of 11.0 +# Floating point matchers: float +ok {test-number} - -10.f, WithinAbs( -10.f, 0.5f ) for: -10.0f is within 0.5 of -10.0 +# Floating point matchers: float +ok {test-number} - -10.f, WithinAbs( -9.6f, 0.5f ) for: -10.0f is within 0.5 of -9.6000003815 +# Floating point matchers: float +ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) +# Floating point matchers: float +ok {test-number} - -1.f, WithinULP( -1.f, 0 ) for: -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00]) +# Floating point matchers: float +ok {test-number} - nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) for: 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) +# Floating point matchers: float +ok {test-number} - 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) for: 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45]) +# Floating point matchers: float +ok {test-number} - 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) for: 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00]) +# Floating point matchers: float +ok {test-number} - 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) for: 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00]) +# Floating point matchers: float +ok {test-number} - 1.f, WithinULP( 1.f, 0 ) for: 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) +# Floating point matchers: float +ok {test-number} - -0.f, WithinULP( 0.f, 0 ) for: -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00]) +# Floating point matchers: float +ok {test-number} - 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) for: 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) ) +# Floating point matchers: float +ok {test-number} - 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) for: 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) ) +# Floating point matchers: float +ok {test-number} - 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) for: 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) +# Floating point matchers: float +ok {test-number} - WithinAbs( 1.f, 0.f ) +# Floating point matchers: float +ok {test-number} - WithinAbs( 1.f, -1.f ), std::domain_error +# Floating point matchers: float +ok {test-number} - WithinULP( 1.f, 0 ) +# Floating point matchers: float +ok {test-number} - WithinULP( 1.f, static_cast( -1 ) ), std::domain_error +# Floating point matchers: float +ok {test-number} - WithinRel( 1.f, 0.f ) +# Floating point matchers: float +ok {test-number} - WithinRel( 1.f, -0.2f ), std::domain_error +# Floating point matchers: float +ok {test-number} - WithinRel( 1.f, 1.f ), std::domain_error +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - filter([] (int) {return false; }, value(1)), Catch::GeneratorException +# Generators -- adapters +ok {test-number} - i < 4 for: 1 < 4 +# Generators -- adapters +ok {test-number} - i < 4 for: 2 < 4 +# Generators -- adapters +ok {test-number} - i < 4 for: 3 < 4 +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - i % 2 == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - i.size() == 1 for: 1 == 1 +# Generators -- adapters +ok {test-number} - j > 0 for: 1 > 0 +# Generators -- adapters +ok {test-number} - j > 0 for: 2 > 0 +# Generators -- adapters +ok {test-number} - j > 0 for: 3 > 0 +# Generators -- adapters +ok {test-number} - j > 0 for: 1 > 0 +# Generators -- adapters +ok {test-number} - j > 0 for: 2 > 0 +# Generators -- adapters +ok {test-number} - j > 0 for: 3 > 0 +# Generators -- adapters +ok {test-number} - chunk2.size() == 2 for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() == chunk2.back() for: 1 == 1 +# Generators -- adapters +ok {test-number} - chunk2.size() == 2 for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() == chunk2.back() for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.size() == 2 for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() == chunk2.back() for: 3 == 3 +# Generators -- adapters +ok {test-number} - chunk2.size() == 2 for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() == chunk2.back() for: 1 == 1 +# Generators -- adapters +ok {test-number} - chunk2.front() < 3 for: 1 < 3 +# Generators -- adapters +ok {test-number} - chunk2.size() == 2 for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() == chunk2.back() for: 2 == 2 +# Generators -- adapters +ok {test-number} - chunk2.front() < 3 for: 2 < 3 +# Generators -- adapters +ok {test-number} - chunk2.size() == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - chunk2.size() == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - chunk2.size() == 0 for: 0 == 0 +# Generators -- adapters +ok {test-number} - chunk(2, value(1)), Catch::GeneratorException +# Generators -- simple +ok {test-number} - j < i for: -3 < 1 +# Generators -- simple +ok {test-number} - j < i for: -2 < 1 +# Generators -- simple +ok {test-number} - j < i for: -1 < 1 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 4 > 1 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 4 > 2 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 4 > 3 +# Generators -- simple +ok {test-number} - j < i for: -3 < 2 +# Generators -- simple +ok {test-number} - j < i for: -2 < 2 +# Generators -- simple +ok {test-number} - j < i for: -1 < 2 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 8 > 1 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 8 > 2 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 8 > 3 +# Generators -- simple +ok {test-number} - j < i for: -3 < 3 +# Generators -- simple +ok {test-number} - j < i for: -2 < 3 +# Generators -- simple +ok {test-number} - j < i for: -1 < 3 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 12 > 1 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 12 > 2 +# Generators -- simple +ok {test-number} - 4u * i > str.size() for: 12 > 3 +# Generators internals +ok {test-number} - gen.get() == 123 for: 123 == 123 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 4 for: 4 == 4 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 0 for: 0 == 0 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get().size() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.get() == "aa" for: "aa" == "aa" +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == "bb" for: "bb" == "bb" +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == "cc" for: "cc" == "cc" +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - filter([](int) { return false; }, value(1)), Catch::GeneratorException +# Generators internals +ok {test-number} - filter([](int) { return false; }, values({ 1, 2, 3 })), Catch::GeneratorException +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 2.0 for: 2.0 == 2.0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 4.0 for: 4.0 == 4.0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 6.0 for: 6.0 == 6.0 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 2.0 for: 2.0 == 2.0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 4.0 for: 4.0 == 4.0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 6.0 for: 6.0 == 6.0 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 3 for: 3 == 3 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == -2 for: -2 == -2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 0 for: 0 == 0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 1 for: 1 == 1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 0 for: 0 == 0 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == -7 for: -7 == -7 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == -7 for: -7 == -7 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == -7 for: -7 == -7 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.9 == Approx( -0.9 ) with 1 message: 'Current expected value is -0.9' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.9' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.8 == Approx( -0.8 ) with 1 message: 'Current expected value is -0.8' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.8' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.6 == Approx( -0.6 ) with 1 message: 'Current expected value is -0.6' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.6' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.5 == Approx( -0.5 ) with 1 message: 'Current expected value is -0.5' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.5' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.3 == Approx( -0.3 ) with 1 message: 'Current expected value is -0.3' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.3' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.2 == Approx( -0.2 ) with 1 message: 'Current expected value is -0.2' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.2' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.0 == Approx( -0.0 ) with 1 message: 'Current expected value is -1.38778e-16' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1.38778e-16' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.1 == Approx( 0.1 ) with 1 message: 'Current expected value is 0.1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.3 == Approx( 0.3 ) with 1 message: 'Current expected value is 0.3' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.3' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.4 == Approx( 0.4 ) with 1 message: 'Current expected value is 0.4' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.4' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.6 == Approx( 0.6 ) with 1 message: 'Current expected value is 0.6' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.6' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.7 == Approx( 0.7 ) with 1 message: 'Current expected value is 0.7' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.7' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.8 == Approx( 0.8 ) with 1 message: 'Current expected value is 0.8' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.8' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.9 == Approx( 0.9 ) with 1 message: 'Current expected value is 0.9' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.9' +# Generators internals +ok {test-number} - gen.get() == Approx( rangeEnd ) for: 1.0 == Approx( 1.0 ) +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -1.0 == Approx( -1.0 ) with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.7 == Approx( -0.7 ) with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.7' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.4 == Approx( -0.4 ) with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.4' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: -0.1 == Approx( -0.1 ) with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is -0.1' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.2 == Approx( 0.2 ) with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.2' +# Generators internals +ok {test-number} - gen.get() == Approx(expected) for: 0.5 == Approx( 0.5 ) with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - gen.next() for: true with 1 message: 'Current expected value is 0.5' +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Generators internals +ok {test-number} - gen.get() == 5 for: 5 == 5 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == 2 for: 2 == 2 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -1 for: -1 == -1 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -4 for: -4 == -4 +# Generators internals +ok {test-number} - gen.next() for: true +# Generators internals +ok {test-number} - gen.get() == -7 for: -7 == -7 +# Generators internals +ok {test-number} - !(gen.next()) for: !false +# Greater-than inequalities with different epsilons +ok {test-number} - d >= Approx( 1.22 ) for: 1.23 >= Approx( 1.22 ) +# Greater-than inequalities with different epsilons +ok {test-number} - d >= Approx( 1.23 ) for: 1.23 >= Approx( 1.23 ) +# Greater-than inequalities with different epsilons +ok {test-number} - !(d >= Approx( 1.24 )) for: !(1.23 >= Approx( 1.24 )) +# Greater-than inequalities with different epsilons +ok {test-number} - d >= Approx( 1.24 ).epsilon(0.1) for: 1.23 >= Approx( 1.24 ) +# INFO and WARN do not abort tests +warning {test-number} - 'this is a message' with 1 message: 'this is a warning' +# INFO gets logged on failure +not ok {test-number} - a == 1 for: 2 == 1 with 2 messages: 'this message should be logged' and 'so should this' +# INFO gets logged on failure, even if captured before successful assertions +ok {test-number} - a == 2 for: 2 == 2 with 1 message: 'this message may be logged later' +# INFO gets logged on failure, even if captured before successful assertions +not ok {test-number} - a == 1 for: 2 == 1 with 2 messages: 'this message may be logged later' and 'this message should be logged' +# INFO gets logged on failure, even if captured before successful assertions +not ok {test-number} - a == 0 for: 2 == 0 with 3 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later' +# INFO gets logged on failure, even if captured before successful assertions +ok {test-number} - a == 2 for: 2 == 2 with 4 messages: 'this message may be logged later' and 'this message should be logged' and 'and this, but later' and 'but not this' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 0 < 10 with 2 messages: 'current counter 0' and 'i := 0' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 1 < 10 with 2 messages: 'current counter 1' and 'i := 1' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 2 < 10 with 2 messages: 'current counter 2' and 'i := 2' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 3 < 10 with 2 messages: 'current counter 3' and 'i := 3' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 4 < 10 with 2 messages: 'current counter 4' and 'i := 4' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 5 < 10 with 2 messages: 'current counter 5' and 'i := 5' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 6 < 10 with 2 messages: 'current counter 6' and 'i := 6' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 7 < 10 with 2 messages: 'current counter 7' and 'i := 7' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 8 < 10 with 2 messages: 'current counter 8' and 'i := 8' +# INFO is reset for each loop +ok {test-number} - i < 10 for: 9 < 10 with 2 messages: 'current counter 9' and 'i := 9' +# INFO is reset for each loop +not ok {test-number} - i < 10 for: 10 < 10 with 2 messages: 'current counter 10' and 'i := 10' +# Inequality checks that should fail +not ok {test-number} - data.int_seven != 7 for: 7 != 7 +# Inequality checks that should fail +not ok {test-number} - data.float_nine_point_one != Approx( 9.1f ) for: 9.1f != Approx( 9.1000003815 ) +# Inequality checks that should fail +not ok {test-number} - data.double_pi != Approx( 3.1415926535 ) for: 3.1415926535 != Approx( 3.1415926535 ) +# Inequality checks that should fail +not ok {test-number} - data.str_hello != "hello" for: "hello" != "hello" +# Inequality checks that should fail +not ok {test-number} - data.str_hello.size() != 5 for: 5 != 5 +# Inequality checks that should succeed +ok {test-number} - data.int_seven != 6 for: 7 != 6 +# Inequality checks that should succeed +ok {test-number} - data.int_seven != 8 for: 7 != 8 +# Inequality checks that should succeed +ok {test-number} - data.float_nine_point_one != Approx( 9.11f ) for: 9.1f != Approx( 9.1099996567 ) +# Inequality checks that should succeed +ok {test-number} - data.float_nine_point_one != Approx( 9.0f ) for: 9.1f != Approx( 9.0 ) +# Inequality checks that should succeed +ok {test-number} - data.float_nine_point_one != Approx( 1 ) for: 9.1f != Approx( 1.0 ) +# Inequality checks that should succeed +ok {test-number} - data.float_nine_point_one != Approx( 0 ) for: 9.1f != Approx( 0.0 ) +# Inequality checks that should succeed +ok {test-number} - data.double_pi != Approx( 3.1415 ) for: 3.1415926535 != Approx( 3.1415 ) +# Inequality checks that should succeed +ok {test-number} - data.str_hello != "goodbye" for: "hello" != "goodbye" +# Inequality checks that should succeed +ok {test-number} - data.str_hello != "hell" for: "hello" != "hell" +# Inequality checks that should succeed +ok {test-number} - data.str_hello != "hello1" for: "hello" != "hello1" +# Inequality checks that should succeed +ok {test-number} - data.str_hello.size() != 6 for: 5 != 6 +# Lambdas in assertions +ok {test-number} - []() { return true; }() for: true +# Less-than inequalities with different epsilons +ok {test-number} - d <= Approx( 1.24 ) for: 1.23 <= Approx( 1.24 ) +# Less-than inequalities with different epsilons +ok {test-number} - d <= Approx( 1.23 ) for: 1.23 <= Approx( 1.23 ) +# Less-than inequalities with different epsilons +ok {test-number} - !(d <= Approx( 1.22 )) for: !(1.23 <= Approx( 1.22 )) +# Less-than inequalities with different epsilons +ok {test-number} - d <= Approx( 1.22 ).epsilon(0.1) for: 1.23 <= Approx( 1.22 ) +# ManuallyRegistered +ok {test-number} - with 1 message: 'was called' +# Matchers can be (AllOf) composed with the && operator +ok {test-number} - testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) for: "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) +# Matchers can be (AnyOf) composed with the || operator +ok {test-number} - testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) +# Matchers can be (AnyOf) composed with the || operator +ok {test-number} - testStringForMatching2(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) for: "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) +# Matchers can be composed with both && and || +ok {test-number} - testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) +# Matchers can be composed with both && and || - failing +not ok {test-number} - testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) for: "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) +# Matchers can be negated (Not) with the ! operator +ok {test-number} - testStringForMatching(), !ContainsSubstring( "different" ) for: "this string contains 'abc' as a substring" not contains: "different" +# Matchers can be negated (Not) with the ! operator - failing +not ok {test-number} - testStringForMatching(), !ContainsSubstring( "substring" ) for: "this string contains 'abc' as a substring" not contains: "substring" +# Mayfail test case with nested sections +not ok {test-number} - explicitly +# Mayfail test case with nested sections +not ok {test-number} - explicitly +# Mayfail test case with nested sections +not ok {test-number} - explicitly +# Mayfail test case with nested sections +not ok {test-number} - explicitly +# Mismatching exception messages failing the test +ok {test-number} - thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" +# Mismatching exception messages failing the test +not ok {test-number} - thisThrows(), "should fail" for: "expected exception" equals: "should fail" +# Nested generators and captured variables +ok {test-number} - values > -6 for: 3 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 4 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 5 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 6 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: -5 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: -4 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 90 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 91 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 92 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 93 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 94 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 95 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 96 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 97 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 98 > -6 +# Nested generators and captured variables +ok {test-number} - values > -6 for: 99 > -6 +# Nice descriptive name +warning {test-number} - 'This one ran' +# Non-std exceptions can be translated +not ok {test-number} - unexpected exception with message: 'custom exception' +# Objects that evaluated in boolean contexts can be checked +ok {test-number} - True for: {?} +# Objects that evaluated in boolean contexts can be checked +ok {test-number} - !False for: true +# Objects that evaluated in boolean contexts can be checked +ok {test-number} - !(False) for: !{?} +# Optionally static assertions +ok {test-number} - with 1 message: 'std::is_void::value' +# Optionally static assertions +ok {test-number} - with 1 message: '!(std::is_void::value)' +# Optionally static assertions +ok {test-number} - with 1 message: 'std::is_void::value' +# Optionally static assertions +ok {test-number} - with 1 message: '!(std::is_void::value)' +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven > 7 for: 7 > 7 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven < 7 for: 7 < 7 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven > 8 for: 7 > 8 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven < 6 for: 7 < 6 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven < 0 for: 7 < 0 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven < -1 for: 7 < -1 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven >= 8 for: 7 >= 8 +# Ordering comparison checks that should fail +not ok {test-number} - data.int_seven <= 6 for: 7 <= 6 +# Ordering comparison checks that should fail +not ok {test-number} - data.float_nine_point_one < 9 for: 9.1f < 9 +# Ordering comparison checks that should fail +not ok {test-number} - data.float_nine_point_one > 10 for: 9.1f > 10 +# Ordering comparison checks that should fail +not ok {test-number} - data.float_nine_point_one > 9.2 for: 9.1f > 9.2 +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello > "hello" for: "hello" > "hello" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello < "hello" for: "hello" < "hello" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello > "hellp" for: "hello" > "hellp" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello > "z" for: "hello" > "z" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello < "hellm" for: "hello" < "hellm" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello < "a" for: "hello" < "a" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello >= "z" for: "hello" >= "z" +# Ordering comparison checks that should fail +not ok {test-number} - data.str_hello <= "a" for: "hello" <= "a" +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven < 8 for: 7 < 8 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven > 6 for: 7 > 6 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven > 0 for: 7 > 0 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven > -1 for: 7 > -1 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven >= 7 for: 7 >= 7 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven >= 6 for: 7 >= 6 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven <= 7 for: 7 <= 7 +# Ordering comparison checks that should succeed +ok {test-number} - data.int_seven <= 8 for: 7 <= 8 +# Ordering comparison checks that should succeed +ok {test-number} - data.float_nine_point_one > 9 for: 9.1f > 9 +# Ordering comparison checks that should succeed +ok {test-number} - data.float_nine_point_one < 10 for: 9.1f < 10 +# Ordering comparison checks that should succeed +ok {test-number} - data.float_nine_point_one < 9.2 for: 9.1f < 9.2 +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello <= "hello" for: "hello" <= "hello" +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello >= "hello" for: "hello" >= "hello" +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello < "hellp" for: "hello" < "hellp" +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello < "zebra" for: "hello" < "zebra" +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello > "hellm" for: "hello" > "hellm" +# Ordering comparison checks that should succeed +ok {test-number} - data.str_hello > "a" for: "hello" > "a" +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 4242248763 (0x) == 4242248763 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1867888929 (0x) == 1867888929 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1276619030 (0x) == 1276619030 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1911218783 (0x) == 1911218783 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1827115164 (0x) == 1827115164 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1472234645 (0x) == 1472234645 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 868832940 (0x) == 868832940 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 570883446 (0x) == 570883446 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 889299803 (0x) == 889299803 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 4261393167 (0x) == 4261393167 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 1472234645 (0x) == 1472234645 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 868832940 (0x) == 868832940 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 570883446 (0x) == 570883446 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 889299803 (0x) == 889299803 (0x) +# Our PCG implementation provides expected results for known seeds +ok {test-number} - rng() == 0x for: 4261393167 (0x) == 4261393167 (0x) +# Output from all sections is reported +not ok {test-number} - explicitly with 1 message: 'Message from section one' +# Output from all sections is reported +not ok {test-number} - explicitly with 1 message: 'Message from section two' +# Overloaded comma or address-of operators are not used +ok {test-number} - ( EvilMatcher(), EvilMatcher() ), EvilCommaOperatorUsed +# Overloaded comma or address-of operators are not used +ok {test-number} - &EvilMatcher(), EvilAddressOfOperatorUsed +# Overloaded comma or address-of operators are not used +ok {test-number} - EvilMatcher() || ( EvilMatcher() && !EvilMatcher() ) +# Overloaded comma or address-of operators are not used +ok {test-number} - ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher() +# Parse test names and tags +ok {test-number} - spec.hasFilters() == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - parseTestSpec( "*a" ).matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - parseTestSpec( "a*" ).matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - parseTestSpec( "*a*" ).matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.hasFilters() == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *tcA ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcB ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcC ) == false for: false == false +# Parse test names and tags +ok {test-number} - spec.matches( *tcD ) == true for: true == true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark" ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( " aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( "aardvark " ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches( *fakeTestCase( "aardvark" ) ) for: true +# Parse test names and tags +ok {test-number} - spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) for: true +# Parse test names and tags +ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false +# Parse test names and tags +ok {test-number} - !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) for: !false +# Parse test names and tags +ok {test-number} - !(spec.matches(*fakeTestCase("only foo", "[foo]"))) for: !false +# Parse test names and tags +ok {test-number} - !(spec.matches(*fakeTestCase("only hidden", "[.]"))) for: !false +# Parse test names and tags +ok {test-number} - spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) for: true +# Parsed tags are matched case insensitive +ok {test-number} - spec.hasFilters() for: true +# Parsed tags are matched case insensitive +ok {test-number} - spec.getInvalidSpecs().empty() for: true +# Parsed tags are matched case insensitive +ok {test-number} - spec.matches( testCase ) for: true +# Parsing sharding-related cli flags +ok {test-number} - cli.parse({ "test", "--shard-count=8" }) for: {?} +# Parsing sharding-related cli flags +ok {test-number} - config.shardCount == 8 for: 8 == 8 +# Parsing sharding-related cli flags +ok {test-number} - !(result) for: !{?} +# Parsing sharding-related cli flags +ok {test-number} - result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number" +# Parsing sharding-related cli flags +ok {test-number} - !(result) for: !{?} +# Parsing sharding-related cli flags +ok {test-number} - result.errorMessage(), ContainsSubstring("Shard count must be a positive number") for: "Shard count must be a positive number" contains: "Shard count must be a positive number" +# Parsing sharding-related cli flags +ok {test-number} - cli.parse({ "test", "--shard-index=2" }) for: {?} +# Parsing sharding-related cli flags +ok {test-number} - config.shardIndex == 2 for: 2 == 2 +# Parsing sharding-related cli flags +ok {test-number} - !(result) for: !{?} +# Parsing sharding-related cli flags +ok {test-number} - result.errorMessage(), ContainsSubstring("Shard index must be a non-negative number") for: "Shard index must be a non-negative number" contains: "Shard index must be a non-negative number" +# Parsing sharding-related cli flags +ok {test-number} - cli.parse({ "test", "--shard-index=0" }) for: {?} +# Parsing sharding-related cli flags +ok {test-number} - config.shardIndex == 0 for: 0 == 0 +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.hasFilters() for: true with 1 message: 'tagString := "[tag with spaces]"' +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[tag with spaces]"' +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.matches( testCase ) for: true with 1 message: 'tagString := "[tag with spaces]"' +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.hasFilters() for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.getInvalidSpecs().empty() for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +# Parsing tags with non-alphabetical characters is pass-through +ok {test-number} - spec.matches( testCase ) for: true with 1 message: 'tagString := "[I said "good day" sir!]"' +# Parsing warnings +ok {test-number} - cli.parse( { "test", "-w", "NoAssertions" } ) for: {?} +# Parsing warnings +ok {test-number} - config.warnings == WarnAbout::NoAssertions for: 1 == 1 +# Parsing warnings +ok {test-number} - !(cli.parse( { "test", "-w", "NoTests" } )) for: !{?} +# Parsing warnings +ok {test-number} - cli.parse( { "test", "--warn", "NoAssertions", "--warn", "UnmatchedTestSpec" } ) for: {?} +# Parsing warnings +ok {test-number} - config.warnings == ( WarnAbout::NoAssertions | WarnAbout::UnmatchedTestSpec ) for: 3 == 3 +# Pointers can be compared to null +ok {test-number} - p == 0 for: 0 == 0 +# Pointers can be compared to null +ok {test-number} - p == pNULL for: 0 == 0 +# Pointers can be compared to null +ok {test-number} - p != 0 for: 0x != 0 +# Pointers can be compared to null +ok {test-number} - cp != 0 for: 0x != 0 +# Pointers can be compared to null +ok {test-number} - cpc != 0 for: 0x != 0 +# Pointers can be compared to null +ok {test-number} - returnsNull() == 0 for: {null string} == 0 +# Pointers can be compared to null +ok {test-number} - returnsConstNull() == 0 for: {null string} == 0 +# Pointers can be compared to null +ok {test-number} - 0 != p for: 0 != 0x +# Precision of floating point stringification can be set +ok {test-number} - str1.size() == 3 + 5 for: 8 == 8 +# Precision of floating point stringification can be set +ok {test-number} - str2.size() == 3 + 10 for: 13 == 13 +# Precision of floating point stringification can be set +ok {test-number} - str1.size() == 2 + 5 for: 7 == 7 +# Precision of floating point stringification can be set +ok {test-number} - str2.size() == 2 + 15 for: 17 == 17 +# Predicate matcher can accept const char* +ok {test-number} - "foo", Predicate( []( const char* const& ) { return true; } ) for: "foo" matches undescribed predicate +# Process can be configured on command line +ok {test-number} - result for: {?} +# Process can be configured on command line +ok {test-number} - config.processName == "" for: "" == "" +# Process can be configured on command line +ok {test-number} - result for: {?} +# Process can be configured on command line +ok {test-number} - config.processName == "test" for: "test" == "test" +# Process can be configured on command line +ok {test-number} - config.shouldDebugBreak == false for: false == false +# Process can be configured on command line +ok {test-number} - config.abortAfter == -1 for: -1 == -1 +# Process can be configured on command line +ok {test-number} - config.noThrow == false for: false == false +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == std::vector{ {"console", {}} } for: { { console, } } == { { console, } } +# Process can be configured on command line +ok {test-number} - !(cfg.hasTestFilters()) for: !false +# Process can be configured on command line +ok {test-number} - result for: {?} +# Process can be configured on command line +ok {test-number} - cfg.hasTestFilters() for: true +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("notIncluded")) == false for: false == false +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("test1")) for: true +# Process can be configured on command line +ok {test-number} - result for: {?} +# Process can be configured on command line +ok {test-number} - cfg.hasTestFilters() for: true +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("test1")) == false for: false == false +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true +# Process can be configured on command line +ok {test-number} - result for: {?} +# Process can be configured on command line +ok {test-number} - cfg.hasTestFilters() for: true +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("test1")) == false for: false == false +# Process can be configured on command line +ok {test-number} - cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) for: true +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } for: { { console, } } == { { console, } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } for: { { xml, } } == { { xml, } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } for: { { junit, } } == { { junit, } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("Unrecognized reporter") for: "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } for: { { console, out.txt } } == { { console, out.txt } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - result for: {?} with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } for: { { console, C:\Temp\out.txt } } == { { console, C:\Temp\out.txt } } with 1 message: 'result.errorMessage() := ""' +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("empty filename") for: "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename" +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } for: { { xml, output.xml }, { junit, output-junit.xml } } == { { xml, output.xml }, { junit, output-junit.xml } } +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } for: { { xml, output.xml }, { console, } } == { { xml, output.xml }, { console, } } +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") for: "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-b"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.shouldDebugBreak == true for: true == true +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--break"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.shouldDebugBreak for: true +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-a"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.abortAfter == 1 for: 1 == 1 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-x", "2"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.abortAfter == 2 for: 2 == 2 +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("convert") && ContainsSubstring("oops") for: "Unable to convert 'oops' to destination type" ( contains: "convert" and contains: "oops" ) +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +# Process can be configured on command line +ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 0 == 0 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +# Process can be configured on command line +ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 1 == 1 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +# Process can be configured on command line +ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 2 == 2 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) for: {?} +# Process can be configured on command line +ok {test-number} - config.waitForKeypress == std::get<1>(input) for: 3 == 3 +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring("never") && ContainsSubstring("both") for: "keypress argument must be one of: never, start, exit or both. 'sometimes' not recognised" ( contains: "never" and contains: "both" ) +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-e"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.noThrow for: true +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--nothrow"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.noThrow for: true +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-o", "filename.ext"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--out", "filename.ext"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.defaultOutputFilename == "filename.ext" for: "filename.ext" == "filename.ext" +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "-abe"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.abortAfter == 1 for: 1 == 1 +# Process can be configured on command line +ok {test-number} - config.shouldDebugBreak for: true +# Process can be configured on command line +ok {test-number} - config.noThrow == true for: true == true +# Process can be configured on command line +ok {test-number} - cli.parse({"test"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--use-colour", "auto"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.useColour == UseColour::Auto for: 0 == 0 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--use-colour", "yes"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.useColour == UseColour::Yes for: 1 == 1 +# Process can be configured on command line +ok {test-number} - cli.parse({"test", "--use-colour", "no"}) for: {?} +# Process can be configured on command line +ok {test-number} - config.useColour == UseColour::No for: 2 == 2 +# Process can be configured on command line +ok {test-number} - !result for: true +# Process can be configured on command line +ok {test-number} - result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) for: "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of" +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "--benchmark-samples=200" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.benchmarkSamples == 200 for: 200 == 200 +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "--benchmark-resamples=20000" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.benchmarkResamples == 20000 for: 20000 (0x) == 20000 (0x) +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.benchmarkConfidenceInterval == Catch::Approx(0.99) for: 0.99 == Approx( 0.99 ) +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "--benchmark-no-analysis" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.benchmarkNoAnalysis for: true +# Process can be configured on command line +ok {test-number} - cli.parse({ "test", "--benchmark-warmup-time=10" }) for: {?} +# Process can be configured on command line +ok {test-number} - config.benchmarkWarmupTime == 10 for: 10 == 10 +# Product with differing arities - std::tuple +ok {test-number} - std::tuple_size::value >= 1 for: 3 >= 1 +# Product with differing arities - std::tuple +ok {test-number} - std::tuple_size::value >= 1 for: 2 >= 1 +# Product with differing arities - std::tuple +ok {test-number} - std::tuple_size::value >= 1 for: 1 >= 1 +# Random seed generation accepts known methods +ok {test-number} - Catch::generateRandomSeed(method) +# Random seed generation accepts known methods +ok {test-number} - Catch::generateRandomSeed(method) +# Random seed generation accepts known methods +ok {test-number} - Catch::generateRandomSeed(method) +# Random seed generation reports unknown methods +ok {test-number} - Catch::generateRandomSeed(static_cast(77)) +# Range type with sentinel +ok {test-number} - Catch::Detail::stringify(UsesSentinel{}) == "{ }" for: "{ }" == "{ }" +# Reconstruction should be based on stringification: #914 +not ok {test-number} - truthy(false) for: Hey, its truthy! +# Regex string matcher +not ok {test-number} - testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively +# Regex string matcher +not ok {test-number} - testStringForMatching(), Matches( "contains 'abc' as a substring" ) for: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively +# Regex string matcher +not ok {test-number} - testStringForMatching(), Matches( "this string contains 'abc' as a" ) for: "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively +# Regression test #1 +ok {test-number} - actual, !UnorderedEquals( expected ) for: { 'a', 'b' } not UnorderedEquals: { 'c', 'b' } +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: Automake' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: Automake' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: Automake' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: compact' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: compact' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: compact' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: console' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: console' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: console' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: " All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: JUnit' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: " Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: JUnit' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: JUnit' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: " All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: SonarQube' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: " Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: SonarQube' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: SonarQube' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: TAP' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: TAP' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TAP' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "fakeTag" with 1 message: 'Tested reporter: TeamCity' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" with 1 message: 'Tested reporter: TeamCity' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: TeamCity' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fakeTag"s) for: " 1 fakeTag " contains: "fakeTag" with 1 message: 'Tested reporter: XML' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: " fake reporter fake description " contains: "fake reporter" with 1 message: 'Tested reporter: XML' +# Reporter's write listings to provided stream +ok {test-number} - !(factories.empty()) for: !false +# Reporter's write listings to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: " fake test name [fakeTestTag] fake-file.cpp 123456789 " ( contains: "fake test name" and contains: "fakeTestTag" ) with 1 message: 'Tested reporter: XML' +# Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla +ok {test-number} - +# SUCCEED counts as a test pass +ok {test-number} - with 1 message: 'this is a success' +# SUCCEED does not require an argument +ok {test-number} - +# Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods +ok {test-number} - before == 0 for: 0 == 0 +# Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods +ok {test-number} - after > before for: 1 > 0 +# Scenario: Do that thing with the thing +ok {test-number} - itDoesThis() for: true +# Scenario: Do that thing with the thing +ok {test-number} - itDoesThat() for: true +# Scenario: This is a really long scenario name to see how the list command deals with wrapping +ok {test-number} - with 1 message: 'boo!' +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.size() == 0 for: 0 == 0 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.size() == 10 for: 10 == 10 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.size() == 5 for: 5 == 5 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.size() == 0 for: 0 == 0 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# Scenario: Vector resizing affects size and capacity +ok {test-number} - v.size() == 0 for: 0 == 0 +# Some simple comparisons between doubles +ok {test-number} - d == Approx( 1.23 ) for: 1.23 == Approx( 1.23 ) +# Some simple comparisons between doubles +ok {test-number} - d != Approx( 1.22 ) for: 1.23 != Approx( 1.22 ) +# Some simple comparisons between doubles +ok {test-number} - d != Approx( 1.24 ) for: 1.23 != Approx( 1.24 ) +# Some simple comparisons between doubles +ok {test-number} - d == 1.23_a for: 1.23 == Approx( 1.23 ) +# Some simple comparisons between doubles +ok {test-number} - d != 1.22_a for: 1.23 != Approx( 1.22 ) +# Some simple comparisons between doubles +ok {test-number} - Approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23 +# Some simple comparisons between doubles +ok {test-number} - Approx( d ) != 1.22 for: Approx( 1.23 ) != 1.22 +# Some simple comparisons between doubles +ok {test-number} - Approx( d ) != 1.24 for: Approx( 1.23 ) != 1.24 +# StartsWith string matcher +not ok {test-number} - testStringForMatching(), StartsWith( "This String" ) for: "this string contains 'abc' as a substring" starts with: "This String" +# StartsWith string matcher +not ok {test-number} - testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" starts with: "string" (case insensitive) +# Static arrays are convertible to string +ok {test-number} - Catch::Detail::stringify(singular) == "{ 1 }" for: "{ 1 }" == "{ 1 }" +# Static arrays are convertible to string +ok {test-number} - Catch::Detail::stringify(arr) == "{ 3, 2, 1 }" for: "{ 3, 2, 1 }" == "{ 3, 2, 1 }" +# Static arrays are convertible to string +ok {test-number} - Catch::Detail::stringify(arr) == R"({ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } })" for: "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" == "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" +# String matchers +ok {test-number} - testStringForMatching(), ContainsSubstring( "string" ) for: "this string contains 'abc' as a substring" contains: "string" +# String matchers +ok {test-number} - testStringForMatching(), ContainsSubstring( "string", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "string" (case insensitive) +# String matchers +ok {test-number} - testStringForMatching(), ContainsSubstring( "abc" ) for: "this string contains 'abc' as a substring" contains: "abc" +# String matchers +ok {test-number} - testStringForMatching(), ContainsSubstring( "aBC", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" contains: "abc" (case insensitive) +# String matchers +ok {test-number} - testStringForMatching(), StartsWith( "this" ) for: "this string contains 'abc' as a substring" starts with: "this" +# String matchers +ok {test-number} - testStringForMatching(), StartsWith( "THIS", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" starts with: "this" (case insensitive) +# String matchers +ok {test-number} - testStringForMatching(), EndsWith( "substring" ) for: "this string contains 'abc' as a substring" ends with: "substring" +# String matchers +ok {test-number} - testStringForMatching(), EndsWith( " SuBsTrInG", Catch::CaseSensitive::No ) for: "this string contains 'abc' as a substring" ends with: " substring" (case insensitive) +# StringRef +ok {test-number} - empty.empty() for: true +# StringRef +ok {test-number} - empty.size() == 0 for: 0 == 0 +# StringRef +ok {test-number} - std::strcmp( empty.data(), "" ) == 0 for: 0 == 0 +# StringRef +ok {test-number} - s.empty() == false for: false == false +# StringRef +ok {test-number} - s.size() == 5 for: 5 == 5 +# StringRef +ok {test-number} - std::strcmp( rawChars, "hello" ) == 0 for: 0 == 0 +# StringRef +ok {test-number} - s.data() == rawChars for: "hello" == "hello" +# StringRef +ok {test-number} - original == "original" +# StringRef +ok {test-number} - original.data() +# StringRef +ok {test-number} - original.begin() == copy.begin() for: "original string" == "original string" +# StringRef +ok {test-number} - original.begin() == copy.begin() for: "original string" == "original string" +# StringRef +ok {test-number} - ss.empty() == false for: false == false +# StringRef +ok {test-number} - ss.size() == 5 for: 5 == 5 +# StringRef +ok {test-number} - std::strncmp( ss.data(), "hello", 5 ) == 0 for: 0 == 0 +# StringRef +ok {test-number} - ss == "hello" for: hello == "hello" +# StringRef +ok {test-number} - ss.size() == 6 for: 6 == 6 +# StringRef +ok {test-number} - std::strcmp( ss.data(), "world!" ) == 0 for: 0 == 0 +# StringRef +ok {test-number} - s.data() == s2.data() for: "hello world!" == "hello world!" +# StringRef +ok {test-number} - s.data() == ss.data() for: "hello world!" == "hello world!" +# StringRef +ok {test-number} - s.substr(s.size() + 1, 123).empty() for: true +# StringRef +ok {test-number} - std::strcmp(ss.data(), "world!") == 0 for: 0 == 0 +# StringRef +ok {test-number} - s.substr(1'000'000, 1).empty() for: true +# StringRef +ok {test-number} - reinterpret_cast(buffer1) != reinterpret_cast(buffer2) for: "Hello" != "Hello" +# StringRef +ok {test-number} - left == right for: Hello == Hello +# StringRef +ok {test-number} - left != left.substr(0, 3) for: Hello != Hel +# StringRef +ok {test-number} - sr == "a standard string" for: a standard string == "a standard string" +# StringRef +ok {test-number} - sr.size() == stdStr.size() for: 17 == 17 +# StringRef +ok {test-number} - sr == "a standard string" for: a standard string == "a standard string" +# StringRef +ok {test-number} - sr.size() == stdStr.size() for: 17 == 17 +# StringRef +ok {test-number} - sr == "a standard string" for: a standard string == "a standard string" +# StringRef +ok {test-number} - sr.size() == stdStr.size() for: 17 == 17 +# StringRef +ok {test-number} - stdStr == "a stringref" for: "a stringref" == "a stringref" +# StringRef +ok {test-number} - stdStr.size() == sr.size() for: 11 == 11 +# StringRef +ok {test-number} - stdStr == "a stringref" for: "a stringref" == "a stringref" +# StringRef +ok {test-number} - stdStr.size() == sr.size() for: 11 == 11 +# StringRef +ok {test-number} - lhs == "some string += the stringref contents" for: "some string += the stringref contents" == "some string += the stringref contents" +# StringRef +ok {test-number} - together == "abrakadabra" for: "abrakadabra" == "abrakadabra" +# StringRef at compilation time +ok {test-number} - with 1 message: 'empty.size() == 0' +# StringRef at compilation time +ok {test-number} - with 1 message: 'empty.begin() == empty.end()' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.size() == 3' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.data() == abc' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.begin() == abc' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.begin() != stringref.end()' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.substr(10, 0).empty()' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref.substr(2, 1).data() == abc + 2' +# StringRef at compilation time +ok {test-number} - with 1 message: 'stringref[1] == 'b'' +# StringRef at compilation time +ok {test-number} - with 1 message: 'shortened.size() == 2' +# StringRef at compilation time +ok {test-number} - with 1 message: 'shortened.data() == abc' +# StringRef at compilation time +ok {test-number} - with 1 message: 'shortened.begin() != shortened.end()' +# StringRef at compilation time +ok {test-number} - with 1 message: '!(sr1.empty())' +# StringRef at compilation time +ok {test-number} - with 1 message: 'sr1.size() == 3' +# StringRef at compilation time +ok {test-number} - with 1 message: 'sr2.empty()' +# StringRef at compilation time +ok {test-number} - with 1 message: 'sr2.size() == 0' +# Stringifying char arrays with statically known sizes - char +ok {test-number} - ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying char arrays with statically known sizes - char +ok {test-number} - ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying char arrays with statically known sizes - signed char +ok {test-number} - ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying char arrays with statically known sizes - signed char +ok {test-number} - ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying char arrays with statically known sizes - unsigned char +ok {test-number} - ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying char arrays with statically known sizes - unsigned char +ok {test-number} - ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s for: ""abc"" == ""abc"" +# Stringifying std::chrono::duration helpers +ok {test-number} - minute == seconds for: 1 m == 60 s +# Stringifying std::chrono::duration helpers +ok {test-number} - hour != seconds for: 1 h != 60 s +# Stringifying std::chrono::duration helpers +ok {test-number} - micro != milli for: 1 us != 1 ms +# Stringifying std::chrono::duration helpers +ok {test-number} - nano != micro for: 1 ns != 1 us +# Stringifying std::chrono::duration with weird ratios +ok {test-number} - half_minute != femto_second for: 1 [30/1]s != 1 fs +# Stringifying std::chrono::duration with weird ratios +ok {test-number} - pico_second != atto_second for: 1 ps != 1 as +# Stringifying std::chrono::time_point +ok {test-number} - now != later for: {iso8601-timestamp} != {iso8601-timestamp} +# Tabs and newlines show in output +not ok {test-number} - s1 == s2 for: "if ($b == 10) { $a = 20; }" == "if ($b == 10) { $a = 20; } " +# Tag alias can be registered against tag patterns +ok {test-number} - what, ContainsSubstring( "[@zzz]" ) for: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "[@zzz]" +# Tag alias can be registered against tag patterns +ok {test-number} - what, ContainsSubstring( "file" ) for: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "file" +# Tag alias can be registered against tag patterns +ok {test-number} - what, ContainsSubstring( "2" ) for: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "2" +# Tag alias can be registered against tag patterns +ok {test-number} - what, ContainsSubstring( "10" ) for: "error: tag alias, '[@zzz]' already registered. First seen at: file:2 Redefined at: file:10" contains: "10" +# Tag alias can be registered against tag patterns +ok {test-number} - registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) +# Tag alias can be registered against tag patterns +ok {test-number} - registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) +# Tag alias can be registered against tag patterns +ok {test-number} - registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) +# Tag alias can be registered against tag patterns +ok {test-number} - registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) +# Tags with spaces and non-alphanumerical characters are accepted +ok {test-number} - testCase.tags.size() == 2 for: 2 == 2 +# Tags with spaces and non-alphanumerical characters are accepted +ok {test-number} - testCase.tags, VectorContains( Tag( "tag with spaces" ) ) && VectorContains( Tag( "I said \"good day\" sir!"_catch_sr ) ) for: { {?}, {?} } ( Contains: {?} and Contains: {?} ) +# Template test case method with test types specified inside std::tuple - MyTypes - 0 +ok {test-number} - Template_Fixture::m_a == 1 for: 1 == 1 +# Template test case method with test types specified inside std::tuple - MyTypes - 1 +ok {test-number} - Template_Fixture::m_a == 1 for: 1 == 1 +# Template test case method with test types specified inside std::tuple - MyTypes - 2 +ok {test-number} - Template_Fixture::m_a == 1 for: 1.0 == 1 +# Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 0 +ok {test-number} - sizeof(TestType) > 0 for: 1 > 0 +# Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 1 +ok {test-number} - sizeof(TestType) > 0 for: 4 > 0 +# Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0 +ok {test-number} - sizeof(TestType) > 0 for: 1 > 0 +# Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1 +ok {test-number} - sizeof(TestType) > 0 for: 4 > 0 +# Template test case with test types specified inside std::tuple - MyTypes - 0 +ok {test-number} - sizeof(TestType) > 0 for: 4 > 0 +# Template test case with test types specified inside std::tuple - MyTypes - 1 +ok {test-number} - sizeof(TestType) > 0 for: 1 > 0 +# Template test case with test types specified inside std::tuple - MyTypes - 2 +ok {test-number} - sizeof(TestType) > 0 for: 4 > 0 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 10 for: 10 == 10 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - float +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 10 for: 10 == 10 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - int +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 10 for: 10 == 10 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::string +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 10 for: 10 == 10 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.size() == 5 for: 5 == 5 +# TemplateTest: vectors can be sized and resized - std::tuple +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == 2 * V for: 12 == 12 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= 2 * V for: 12 >= 12 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= 2 * V for: 12 >= 12 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.size() == V for: 6 == 6 +# TemplateTestSig: vectors can be sized and resized - (std::tuple), 6 +ok {test-number} - v.capacity() >= V for: 6 >= 6 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == 2 * V for: 8 == 8 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= 2 * V for: 8 >= 8 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= 2 * V for: 8 >= 8 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.size() == V for: 4 == 4 +# TemplateTestSig: vectors can be sized and resized - float,4 +ok {test-number} - v.capacity() >= V for: 4 >= 4 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == 2 * V for: 10 == 10 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= 2 * V for: 10 >= 10 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= 2 * V for: 10 >= 10 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.size() == V for: 5 == 5 +# TemplateTestSig: vectors can be sized and resized - int,5 +ok {test-number} - v.capacity() >= V for: 5 >= 5 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == 2 * V for: 30 == 30 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= 2 * V for: 30 >= 30 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= 2 * V for: 30 >= 30 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.size() == V for: 15 == 15 +# TemplateTestSig: vectors can be sized and resized - std::string,15 +ok {test-number} - v.capacity() >= V for: 15 >= 15 +# Test case with identical tags keeps just one +ok {test-number} - testCase.tags.size() == 1 for: 1 == 1 +# Test case with identical tags keeps just one +ok {test-number} - testCase.tags[0] == Tag( "tag1" ) for: {?} == {?} +# Test case with one argument +ok {test-number} - with 1 message: 'no assertions' +# Test enum bit values +ok {test-number} - 0x == bit30and31 for: 3221225472 (0x) == 3221225472 +# Test with special, characters "in name +ok {test-number} - +# Testing checked-if +ok {test-number} - true +# Testing checked-if +ok {test-number} - +# Testing checked-if +ok {test-number} - false # TODO +# Testing checked-if +ok {test-number} - true +# Testing checked-if +ok {test-number} - false # TODO +# Testing checked-if +ok {test-number} - +# Testing checked-if 2 +ok {test-number} - true +# Testing checked-if 2 +not ok {test-number} - explicitly +# Testing checked-if 3 +ok {test-number} - false # TODO +# Testing checked-if 3 +not ok {test-number} - explicitly +# The NO_FAIL macro reports a failure but does not fail the test +ok {test-number} - 1 == 2 # TODO +# The default listing implementation write to provided stream +ok {test-number} - listingString, ContainsSubstring("[fakeTag]"s) for: "All available tags: 1 [fakeTag] 1 tag " contains: "[fakeTag]" +# The default listing implementation write to provided stream +ok {test-number} - listingString, ContainsSubstring("fake reporter"s) for: "Available reporters: fake reporter: fake description " contains: "fake reporter" +# The default listing implementation write to provided stream +ok {test-number} - listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) for: "All available test cases: fake test name [fakeTestTag] 1 test case " ( contains: "fake test name" and contains: "fakeTestTag" ) +# This test 'should' fail but doesn't +ok {test-number} - with 1 message: 'oops!' +# Thrown string literals are translated +not ok {test-number} - unexpected exception with message: 'For some reason someone is throwing a string literal!' +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s1.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - testCase.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s1.isComplete() for: true +# Tracker +ok {test-number} - s1.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - testCase.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase2.isOpen() for: true +# Tracker +ok {test-number} - s1b.isOpen() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - testCase.isComplete() for: true +# Tracker +ok {test-number} - testCase.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s1.isComplete() for: true +# Tracker +ok {test-number} - s1.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - testCase.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase2.isOpen() for: true +# Tracker +ok {test-number} - s1b.isOpen() == false for: false == false +# Tracker +ok {test-number} - s2.isOpen() for: true +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - testCase.isComplete() for: true +# Tracker +ok {test-number} - testCase.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s2.isOpen() == false for: false == false +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - testCase2.isOpen() for: true +# Tracker +ok {test-number} - s1b.isOpen() == false for: false == false +# Tracker +ok {test-number} - s2b.isOpen() for: true +# Tracker +ok {test-number} - ctx.completedCycle() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - s2b.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase2.isComplete() == false for: false == false +# Tracker +ok {test-number} - testCase2.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s2.isOpen() == false for: false == false +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - testCase2.isOpen() for: true +# Tracker +ok {test-number} - s1b.isOpen() == false for: false == false +# Tracker +ok {test-number} - s2b.isOpen() for: true +# Tracker +ok {test-number} - ctx.completedCycle() == false for: false == false +# Tracker +ok {test-number} - ctx.completedCycle() for: true +# Tracker +ok {test-number} - s2b.isComplete() for: true +# Tracker +ok {test-number} - s2b.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase2.isSuccessfullyCompleted() == false for: false == false +# Tracker +ok {test-number} - testCase3.isOpen() for: true +# Tracker +ok {test-number} - s1c.isOpen() == false for: false == false +# Tracker +ok {test-number} - s2c.isOpen() == false for: false == false +# Tracker +ok {test-number} - testCase3.isSuccessfullyCompleted() for: true +# Tracker +ok {test-number} - testCase.isOpen() for: true +# Tracker +ok {test-number} - s1.isOpen() for: true +# Tracker +ok {test-number} - s2.isOpen() for: true +# Tracker +ok {test-number} - s2.isComplete() for: true +# Tracker +ok {test-number} - s1.isComplete() == false for: false == false +# Tracker +ok {test-number} - s1.isComplete() for: true +# Tracker +ok {test-number} - testCase.isComplete() == false for: false == false +# Tracker +ok {test-number} - testCase.isComplete() for: true +# Trim strings +ok {test-number} - trim(std::string(no_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here" +# Trim strings +ok {test-number} - trim(std::string(leading_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here" +# Trim strings +ok {test-number} - trim(std::string(trailing_whitespace)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here" +# Trim strings +ok {test-number} - trim(std::string(whitespace_at_both_ends)) == no_whitespace for: "There is no extra whitespace here" == "There is no extra whitespace here" +# Trim strings +ok {test-number} - trim(StringRef(no_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here +# Trim strings +ok {test-number} - trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here +# Trim strings +ok {test-number} - trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here +# Trim strings +ok {test-number} - trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) for: There is no extra whitespace here == There is no extra whitespace here +# Unexpected exceptions can be translated +not ok {test-number} - unexpected exception with message: '3.14' +# Upcasting special member functions +ok {test-number} - bptr->i == 3 for: 3 == 3 +# Upcasting special member functions +ok {test-number} - bptr->i == 3 for: 3 == 3 +# Usage of AllMatch range matcher +ok {test-number} - data, AllMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } all match has size == 5 +# Usage of AllMatch range matcher +ok {test-number} - data, !AllMatch(Contains(0) && Contains(1)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not all match ( contains element 0 and contains element 1 ) +# Usage of AllMatch range matcher +ok {test-number} - needs_adl, AllMatch( Predicate( []( int elem ) { return elem < 6; } ) ) for: { 1, 2, 3, 4, 5 } all match matches undescribed predicate +# Usage of AllMatch range matcher +ok {test-number} - mocked, allMatch for: { 1, 2, 3, 4, 5 } all match matches undescribed predicate +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[1] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[2] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[3] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[4] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked, !allMatch for: { 1, 2, 3, 4, 5 } not all match matches undescribed predicate +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[1] for: true +# Usage of AllMatch range matcher +ok {test-number} - mocked.derefed[2] for: true +# Usage of AllMatch range matcher +ok {test-number} - !(mocked.derefed[3]) for: !false +# Usage of AllMatch range matcher +ok {test-number} - !(mocked.derefed[4]) for: !false +# Usage of AnyMatch range matcher +ok {test-number} - data, AnyMatch(SizeIs(5)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } any match has size == 5 +# Usage of AnyMatch range matcher +ok {test-number} - data, !AnyMatch(Contains(0) && Contains(10)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not any match ( contains element 0 and contains element 10 ) +# Usage of AnyMatch range matcher +ok {test-number} - needs_adl, AnyMatch( Predicate( []( int elem ) { return elem < 3; } ) ) for: { 1, 2, 3, 4, 5 } any match matches undescribed predicate +# Usage of AnyMatch range matcher +ok {test-number} - mocked, !anyMatch for: { 1, 2, 3, 4, 5 } not any match matches undescribed predicate +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[1] for: true +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[2] for: true +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[3] for: true +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[4] for: true +# Usage of AnyMatch range matcher +ok {test-number} - mocked, anyMatch for: { 1, 2, 3, 4, 5 } any match matches undescribed predicate +# Usage of AnyMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of AnyMatch range matcher +ok {test-number} - !(mocked.derefed[1]) for: !false +# Usage of AnyMatch range matcher +ok {test-number} - !(mocked.derefed[2]) for: !false +# Usage of AnyMatch range matcher +ok {test-number} - !(mocked.derefed[3]) for: !false +# Usage of AnyMatch range matcher +ok {test-number} - !(mocked.derefed[4]) for: !false +# Usage of NoneMatch range matcher +ok {test-number} - data, NoneMatch(SizeIs(6)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } none match has size == 6 +# Usage of NoneMatch range matcher +ok {test-number} - data, !NoneMatch(Contains(0) && Contains(1)) for: { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not none match ( contains element 0 and contains element 1 ) +# Usage of NoneMatch range matcher +ok {test-number} - needs_adl, NoneMatch( Predicate( []( int elem ) { return elem > 6; } ) ) for: { 1, 2, 3, 4, 5 } none match matches undescribed predicate +# Usage of NoneMatch range matcher +ok {test-number} - mocked, noneMatch for: { 1, 2, 3, 4, 5 } none match matches undescribed predicate +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[1] for: true +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[2] for: true +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[3] for: true +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[4] for: true +# Usage of NoneMatch range matcher +ok {test-number} - mocked, !noneMatch for: { 1, 2, 3, 4, 5 } not none match matches undescribed predicate +# Usage of NoneMatch range matcher +ok {test-number} - mocked.derefed[0] for: true +# Usage of NoneMatch range matcher +ok {test-number} - !(mocked.derefed[1]) for: !false +# Usage of NoneMatch range matcher +ok {test-number} - !(mocked.derefed[2]) for: !false +# Usage of NoneMatch range matcher +ok {test-number} - !(mocked.derefed[3]) for: !false +# Usage of NoneMatch range matcher +ok {test-number} - !(mocked.derefed[4]) for: !false +# Usage of the SizeIs range matcher +ok {test-number} - empty_vec, SizeIs(0) for: { } has size == 0 +# Usage of the SizeIs range matcher +ok {test-number} - empty_vec, !SizeIs(2) for: { } not has size == 2 +# Usage of the SizeIs range matcher +ok {test-number} - empty_vec, SizeIs(Lt(2)) for: { } size matches is less than 2 +# Usage of the SizeIs range matcher +ok {test-number} - arr, SizeIs(2) for: { 0, 0 } has size == 2 +# Usage of the SizeIs range matcher +ok {test-number} - arr, SizeIs( Lt(3)) for: { 0, 0 } size matches is less than 3 +# Usage of the SizeIs range matcher +ok {test-number} - arr, !SizeIs(!Lt(3)) for: { 0, 0 } not size matches not is less than 3 +# Usage of the SizeIs range matcher +ok {test-number} - map, SizeIs(3) for: { {?}, {?}, {?} } has size == 3 +# Usage of the SizeIs range matcher +ok {test-number} - unrelated::ADL_size{}, SizeIs(12) for: {?} has size == 12 +# Usage of the SizeIs range matcher +ok {test-number} - has_size{}, SizeIs(13) for: {?} has size == 13 +# Use a custom approx +ok {test-number} - d == approx( 1.23 ) for: 1.23 == Approx( 1.23 ) +# Use a custom approx +ok {test-number} - d == approx( 1.22 ) for: 1.23 == Approx( 1.22 ) +# Use a custom approx +ok {test-number} - d == approx( 1.24 ) for: 1.23 == Approx( 1.24 ) +# Use a custom approx +ok {test-number} - d != approx( 1.25 ) for: 1.23 != Approx( 1.25 ) +# Use a custom approx +ok {test-number} - approx( d ) == 1.23 for: Approx( 1.23 ) == 1.23 +# Use a custom approx +ok {test-number} - approx( d ) == 1.22 for: Approx( 1.23 ) == 1.22 +# Use a custom approx +ok {test-number} - approx( d ) == 1.24 for: Approx( 1.23 ) == 1.24 +# Use a custom approx +ok {test-number} - approx( d ) != 1.25 for: Approx( 1.23 ) != 1.25 +# Variadic macros +ok {test-number} - with 1 message: 'no assertions' +# Vector Approx matcher +ok {test-number} - empty, Approx( empty ) for: { } is approx: { } +# Vector Approx matcher +ok {test-number} - v1, Approx( v1 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } +# Vector Approx matcher +ok {test-number} - v1, Approx( { 1., 2., 3. } ) for: { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } +# Vector Approx matcher +ok {test-number} - v1, !Approx( temp ) for: { 1.0, 2.0, 3.0 } not is approx: { 1.0, 2.0, 3.0, 4.0 } +# Vector Approx matcher +ok {test-number} - v1, !Approx( v2 ) for: { 1.0, 2.0, 3.0 } not is approx: { 1.5, 2.5, 3.5 } +# Vector Approx matcher +ok {test-number} - v1, Approx( v2 ).margin( 0.5 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +# Vector Approx matcher +ok {test-number} - v1, Approx( v2 ).epsilon( 0.5 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +# Vector Approx matcher +ok {test-number} - v1, Approx( v2 ).epsilon( 0.1 ).scale( 500 ) for: { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } +# Vector Approx matcher -- failing +not ok {test-number} - empty, Approx( t1 ) for: { } is approx: { 1.0, 2.0 } +# Vector Approx matcher -- failing +not ok {test-number} - v1, Approx( v2 ) for: { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } +# Vector matchers +ok {test-number} - v, VectorContains( 1 ) for: { 1, 2, 3 } Contains: 1 +# Vector matchers +ok {test-number} - v, VectorContains( 2 ) for: { 1, 2, 3 } Contains: 2 +# Vector matchers +ok {test-number} - v5, ( VectorContains>( 2 ) ) for: { 1, 2, 3 } Contains: 2 +# Vector matchers +ok {test-number} - v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2 } +# Vector matchers +ok {test-number} - v, Contains( { 1, 2 } ) for: { 1, 2, 3 } Contains: { 1, 2 } +# Vector matchers +ok {test-number} - v5, ( Contains, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Contains: { 1, 2 } +# Vector matchers +ok {test-number} - v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v, Contains( empty ) for: { 1, 2, 3 } Contains: { } +# Vector matchers +ok {test-number} - empty, Contains( empty ) for: { } Contains: { } +# Vector matchers +ok {test-number} - v5, ( Contains, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Contains: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v5, Contains( v6 ) for: { 1, 2, 3 } Contains: { 1, 2 } +# Vector matchers +ok {test-number} - v, VectorContains( 1 ) && VectorContains( 2 ) for: { 1, 2, 3 } ( Contains: 1 and Contains: 2 ) +# Vector matchers +ok {test-number} - v, Equals( v ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - empty, Equals( empty ) for: { } Equals: { } +# Vector matchers +ok {test-number} - v, Equals( { 1, 2, 3 } ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v, Equals( v2 ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v5, ( Equals, CustomAllocator>( v2 ) ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v5, Equals( v6 ) for: { 1, 2, 3 } Equals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v, UnorderedEquals( v ) for: { 1, 2, 3 } UnorderedEquals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v, UnorderedEquals( { 3, 2, 1 } ) for: { 1, 2, 3 } UnorderedEquals: { 3, 2, 1 } +# Vector matchers +ok {test-number} - empty, UnorderedEquals( empty ) for: { } UnorderedEquals: { } +# Vector matchers +ok {test-number} - permuted, UnorderedEquals( v ) for: { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - permuted, UnorderedEquals( v ) for: { 2, 3, 1 } UnorderedEquals: { 1, 2, 3 } +# Vector matchers +ok {test-number} - v5, ( UnorderedEquals, CustomAllocator>( permuted ) ) for: { 1, 2, 3 } UnorderedEquals: { 2, 3, 1 } +# Vector matchers +ok {test-number} - v5_permuted, UnorderedEquals( v5 ) for: { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - v, VectorContains( -1 ) for: { 1, 2, 3 } Contains: -1 +# Vector matchers that fail +not ok {test-number} - empty, VectorContains( 1 ) for: { } Contains: 1 +# Vector matchers that fail +not ok {test-number} - empty, Contains( v ) for: { } Contains: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - v, Contains( v2 ) for: { 1, 2, 3 } Contains: { 1, 2, 4 } +# Vector matchers that fail +not ok {test-number} - v, Equals( v2 ) for: { 1, 2, 3 } Equals: { 1, 2 } +# Vector matchers that fail +not ok {test-number} - v2, Equals( v ) for: { 1, 2 } Equals: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - empty, Equals( v ) for: { } Equals: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - v, Equals( empty ) for: { 1, 2, 3 } Equals: { } +# Vector matchers that fail +not ok {test-number} - v, UnorderedEquals( empty ) for: { 1, 2, 3 } UnorderedEquals: { } +# Vector matchers that fail +not ok {test-number} - empty, UnorderedEquals( v ) for: { } UnorderedEquals: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - permuted, UnorderedEquals( v ) for: { 1, 3 } UnorderedEquals: { 1, 2, 3 } +# Vector matchers that fail +not ok {test-number} - permuted, UnorderedEquals( v ) for: { 3, 1 } UnorderedEquals: { 1, 2, 3 } +# When checked exceptions are thrown they can be expected or unexpected +ok {test-number} - thisThrows(), std::domain_error +# When checked exceptions are thrown they can be expected or unexpected +ok {test-number} - thisDoesntThrow() +# When checked exceptions are thrown they can be expected or unexpected +ok {test-number} - thisThrows() +# When unchecked exceptions are thrown directly they are always failures +not ok {test-number} - unexpected exception with message: 'unexpected exception' +# When unchecked exceptions are thrown during a CHECK the test should continue +not ok {test-number} - unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +# When unchecked exceptions are thrown during a REQUIRE the test should abort fail +not ok {test-number} - unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +# When unchecked exceptions are thrown from functions they are always failures +not ok {test-number} - unexpected exception with message: 'expected exception'; expression was: thisThrows() == 0 +# When unchecked exceptions are thrown from sections they are always failures +not ok {test-number} - unexpected exception with message: 'unexpected exception' +# X/level/0/a +ok {test-number} - +# X/level/0/b +ok {test-number} - +# X/level/1/a +ok {test-number} - +# X/level/1/b +ok {test-number} - +# XmlEncode +ok {test-number} - encode( "normal string" ) == "normal string" for: "normal string" == "normal string" +# XmlEncode +ok {test-number} - encode( "" ) == "" for: "" == "" +# XmlEncode +ok {test-number} - encode( "smith & jones" ) == "smith & jones" for: "smith & jones" == "smith & jones" +# XmlEncode +ok {test-number} - encode( "smith < jones" ) == "smith < jones" for: "smith < jones" == "smith < jones" +# XmlEncode +ok {test-number} - encode( "smith > jones" ) == "smith > jones" for: "smith > jones" == "smith > jones" +# XmlEncode +ok {test-number} - encode( "smith ]]> jones" ) == "smith ]]> jones" for: "smith ]]> jones" == "smith ]]> jones" +# XmlEncode +ok {test-number} - encode( stringWithQuotes ) == stringWithQuotes for: "don't "quote" me on that" == "don't "quote" me on that" +# XmlEncode +ok {test-number} - encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" for: "don't "quote" me on that" == "don't "quote" me on that" +# XmlEncode +ok {test-number} - encode( "[\x01]" ) == "[\\x01]" for: "[\x01]" == "[\x01]" +# XmlEncode +ok {test-number} - encode( "[\x7F]" ) == "[\\x7F]" for: "[\x7F]" == "[\x7F]" +# XmlWriter writes boolean attributes as true/false +ok {test-number} - stream.str(), ContainsSubstring(R"(attr1="true")") && ContainsSubstring(R"(attr2="false")") for: " " ( contains: "attr1="true"" and contains: "attr2="false"" ) +# analyse no analysis +ok {test-number} - analysis.mean.point.count() == 23 for: 23.0 == 23 +# analyse no analysis +ok {test-number} - analysis.mean.lower_bound.count() == 23 for: 23.0 == 23 +# analyse no analysis +ok {test-number} - analysis.mean.upper_bound.count() == 23 for: 23.0 == 23 +# analyse no analysis +ok {test-number} - analysis.standard_deviation.point.count() == 0 for: 0.0 == 0 +# analyse no analysis +ok {test-number} - analysis.standard_deviation.lower_bound.count() == 0 for: 0.0 == 0 +# analyse no analysis +ok {test-number} - analysis.standard_deviation.upper_bound.count() == 0 for: 0.0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.total() == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.low_mild == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.low_severe == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.high_mild == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.high_severe == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outliers.samples_seen == 0 for: 0 == 0 +# analyse no analysis +ok {test-number} - analysis.outlier_variance == 0 for: 0.0 == 0 +# array -> toString +ok {test-number} - Catch::Detail::stringify( empty ) == "{ }" for: "{ }" == "{ }" +# array -> toString +ok {test-number} - Catch::Detail::stringify( oneValue ) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +# array -> toString +ok {test-number} - Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +# benchmark function call +ok {test-number} - model.started == 1 for: 1 == 1 +# benchmark function call +ok {test-number} - model.finished == 0 for: 0 == 0 +# benchmark function call +ok {test-number} - model.started == 1 for: 1 == 1 +# benchmark function call +ok {test-number} - model.finished == 1 for: 1 == 1 +# benchmark function call +ok {test-number} - called == 1 for: 1 == 1 +# benchmark function call +ok {test-number} - model.started == 0 for: 0 == 0 +# benchmark function call +ok {test-number} - model.finished == 0 for: 0 == 0 +# benchmark function call +ok {test-number} - model.started == 0 for: 0 == 0 +# benchmark function call +ok {test-number} - model.finished == 0 for: 0 == 0 +# benchmark function call +ok {test-number} - called == 1 for: 1 == 1 +# boolean member +ok {test-number} - obj.prop != 0 for: 0x != 0 +# checkedElse +ok {test-number} - flag for: true +# checkedElse +ok {test-number} - testCheckedElse( true ) for: true +# checkedElse, failing +ok {test-number} - flag for: false # TODO +# checkedElse, failing +not ok {test-number} - testCheckedElse( false ) for: false +# checkedIf +ok {test-number} - flag for: true +# checkedIf +ok {test-number} - testCheckedIf( true ) for: true +# checkedIf, failing +ok {test-number} - flag for: false # TODO +# checkedIf, failing +not ok {test-number} - testCheckedIf( false ) for: false +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 0 == 0 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_mild == him for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_severe == his for: 0 == 0 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 0 == 0 +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 1 == 1 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_mild == him for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_severe == his for: 0 == 0 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 1 == 1 +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 0 == 0 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 1 == 1 +# classify_outliers +ok {test-number} - o.high_mild == him for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_severe == his for: 0 == 0 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 1 == 1 +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 0 == 0 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_mild == him for: 1 == 1 +# classify_outliers +ok {test-number} - o.high_severe == his for: 0 == 0 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 1 == 1 +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 0 == 0 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_mild == him for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_severe == his for: 1 == 1 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 1 == 1 +# classify_outliers +ok {test-number} - o.samples_seen == static_cast(x.size()) for: 6 == 6 +# classify_outliers +ok {test-number} - o.low_severe == los for: 1 == 1 +# classify_outliers +ok {test-number} - o.low_mild == lom for: 0 == 0 +# classify_outliers +ok {test-number} - o.high_mild == him for: 1 == 1 +# classify_outliers +ok {test-number} - o.high_severe == his for: 0 == 0 +# classify_outliers +ok {test-number} - o.total() == los + lom + him + his for: 2 == 2 +# comparisons between const int variables +ok {test-number} - unsigned_char_var == 1 for: 1 == 1 +# comparisons between const int variables +ok {test-number} - unsigned_short_var == 1 for: 1 == 1 +# comparisons between const int variables +ok {test-number} - unsigned_int_var == 1 for: 1 == 1 +# comparisons between const int variables +ok {test-number} - unsigned_long_var == 1 for: 1 == 1 +# comparisons between int variables +ok {test-number} - long_var == unsigned_char_var for: 1 == 1 +# comparisons between int variables +ok {test-number} - long_var == unsigned_short_var for: 1 == 1 +# comparisons between int variables +ok {test-number} - long_var == unsigned_int_var for: 1 == 1 +# comparisons between int variables +ok {test-number} - long_var == unsigned_long_var for: 1 == 1 +# convertToBits +ok {test-number} - convertToBits( 0.f ) == 0 for: 0 == 0 +# convertToBits +ok {test-number} - convertToBits( -0.f ) == ( 1ULL << 31 ) for: 2147483648 (0x) == 2147483648 (0x) +# convertToBits +ok {test-number} - convertToBits( 0. ) == 0 for: 0 == 0 +# convertToBits +ok {test-number} - convertToBits( -0. ) == ( 1ULL << 63 ) for: 9223372036854775808 (0x) == 9223372036854775808 (0x) +# convertToBits +ok {test-number} - convertToBits( std::numeric_limits::denorm_min() ) == 1 for: 1 == 1 +# convertToBits +ok {test-number} - convertToBits( std::numeric_limits::denorm_min() ) == 1 for: 1 == 1 +# empty tags are not allowed +ok {test-number} - Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo) +# erfc_inv +ok {test-number} - erfc_inv(1.103560) == Approx(-0.09203687623843015) for: -0.0920368762 == Approx( -0.0920368762 ) +# erfc_inv +ok {test-number} - erfc_inv(1.067400) == Approx(-0.05980291115763361) for: -0.0598029112 == Approx( -0.0598029112 ) +# erfc_inv +ok {test-number} - erfc_inv(0.050000) == Approx(1.38590382434967796) for: 1.3859038243 == Approx( 1.3859038243 ) +# estimate_clock_resolution +ok {test-number} - res.mean.count() == rate for: 2000.0 == 2000 (0x) +# estimate_clock_resolution +ok {test-number} - res.outliers.total() == 0 for: 0 == 0 +# even more nested SECTION tests +ok {test-number} - +# even more nested SECTION tests +ok {test-number} - +# even more nested SECTION tests +ok {test-number} - +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: 'Catch::Clara::Detail::is_unary_function::value' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# is_unary_function +ok {test-number} - with 1 message: '!(Catch::Clara::Detail::is_unary_function::value)' +# just failure +not ok {test-number} - explicitly with 1 message: 'Previous info should not be seen' +# just failure after unscoped info +not ok {test-number} - explicitly with 1 message: 'previous unscoped info SHOULD not be seen' +# long long +ok {test-number} - l == std::numeric_limits::max() for: 9223372036854775807 (0x) == 9223372036854775807 (0x) +# looped SECTION tests +not ok {test-number} - b > a for: 0 > 1 +# looped SECTION tests +not ok {test-number} - b > a for: 1 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 2 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 3 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 4 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 5 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 6 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 7 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 8 > 1 +# looped SECTION tests +ok {test-number} - b > a for: 9 > 1 +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[0] (1) is even' +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[1] (1) is even' +# looped tests +ok {test-number} - ( fib[i] % 2 ) == 0 for: 0 == 0 with 1 message: 'Testing if fib[2] (2) is even' +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[3] (3) is even' +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[4] (5) is even' +# looped tests +ok {test-number} - ( fib[i] % 2 ) == 0 for: 0 == 0 with 1 message: 'Testing if fib[5] (8) is even' +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[6] (13) is even' +# looped tests +not ok {test-number} - ( fib[i] % 2 ) == 0 for: 1 == 0 with 1 message: 'Testing if fib[7] (21) is even' +# make_unique reimplementation +ok {test-number} - !(lval.has_moved) for: !false +# make_unique reimplementation +ok {test-number} - rval.has_moved for: true +# make_unique reimplementation +ok {test-number} - *ptr == std::tuple{1, 2., 3} for: {?} == {?} +# mean +ok {test-number} - m == 19. for: 19.0 == 19.0 +# measure +ok {test-number} - x == 17 for: 17 == 17 +# measure +ok {test-number} - x == 23 for: 23 == 23 +# measure +ok {test-number} - r.elapsed.count() == 42 for: 42 == 42 +# measure +ok {test-number} - r.result == 23 for: 23 == 23 +# measure +ok {test-number} - r.iterations == 1 for: 1 == 1 +# measure +ok {test-number} - s.elapsed.count() == 69 for: 69 == 69 +# measure +ok {test-number} - s.result == 17 for: 17 == 17 +# measure +ok {test-number} - s.iterations == 1 for: 1 == 1 +# mix info, unscoped info and warning +warning {test-number} - 'info' with 2 messages: 'unscoped info' and 'and warn may mix' +# mix info, unscoped info and warning +warning {test-number} - 'info' with 2 messages: 'unscoped info' and 'they are not cleared after warnings' +# more nested SECTION tests +not ok {test-number} - a == b for: 1 == 2 +# more nested SECTION tests +ok {test-number} - a != b for: 1 != 2 +# more nested SECTION tests +ok {test-number} - a < b for: 1 < 2 +# nested SECTION tests +ok {test-number} - a != b for: 1 != 2 +# nested SECTION tests +ok {test-number} - b != a for: 2 != 1 +# nested SECTION tests +ok {test-number} - a != b for: 1 != 2 +# non streamable - with conv. op +ok {test-number} - s == "7" for: "7" == "7" +# non-copyable objects +ok {test-number} - ti == typeid(int) for: {?} == {?} +# normal_cdf +ok {test-number} - normal_cdf(0.000000) == Approx(0.50000000000000000) for: 0.5 == Approx( 0.5 ) +# normal_cdf +ok {test-number} - normal_cdf(1.000000) == Approx(0.84134474606854293) for: 0.8413447461 == Approx( 0.8413447461 ) +# normal_cdf +ok {test-number} - normal_cdf(-1.000000) == Approx(0.15865525393145705) for: 0.1586552539 == Approx( 0.1586552539 ) +# normal_cdf +ok {test-number} - normal_cdf(2.809729) == Approx(0.99752083845315409) for: 0.9975208385 == Approx( 0.9975208385 ) +# normal_cdf +ok {test-number} - normal_cdf(-1.352570) == Approx(0.08809652095066035) for: 0.088096521 == Approx( 0.088096521 ) +# normal_quantile +ok {test-number} - normal_quantile(0.551780) == Approx(0.13015979861484198) for: 0.1301597986 == Approx( 0.1301597986 ) +# normal_quantile +ok {test-number} - normal_quantile(0.533700) == Approx(0.08457408802851875) for: 0.084574088 == Approx( 0.084574088 ) +# normal_quantile +ok {test-number} - normal_quantile(0.025000) == Approx(-1.95996398454005449) for: -1.9599639845 == Approx( -1.9599639845 ) +# not allowed +ok {test-number} - +# not prints unscoped info from previous failures +ok {test-number} - true with 1 message: 'this MAY be seen only for the FIRST assertion IF info is printed for passing assertions' +# not prints unscoped info from previous failures +ok {test-number} - true with 1 message: 'this MAY be seen only for the SECOND assertion IF info is printed for passing assertions' +# not prints unscoped info from previous failures +not ok {test-number} - false with 1 message: 'this SHOULD be seen' +# null strings +ok {test-number} - makeString( false ) != static_cast(0) for: "valid string" != {null string} +# null strings +ok {test-number} - makeString( true ) == static_cast(0) for: {null string} == {null string} +# null_ptr +ok {test-number} - ptr.get() == 0 for: 0 == 0 +# pair > -> toString +ok {test-number} - ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" for: "{ { 42, "Arthur" }, { "Ford", 24 } }" == "{ { 42, "Arthur" }, { "Ford", 24 } }" +# parseEnums +ok {test-number} - parseEnums( "" ), Equals( std::vector{} ) for: { } Equals: { } +# parseEnums +ok {test-number} - parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +# parseEnums +ok {test-number} - parseEnums( "Value1" ), Equals( std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +# parseEnums +ok {test-number} - parseEnums( "EnumName::Value1" ), Equals(std::vector{"Value1"} ) for: { Value1 } Equals: { Value1 } +# parseEnums +ok {test-number} - parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector{"Value1", "Value2"} ) for: { Value1, Value2 } Equals: { Value1, Value2 } +# parseEnums +ok {test-number} - parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +# parseEnums +ok {test-number} - parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector{"Value1", "Value2", "Value3"} ) for: { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } +# pointer to class +ok {test-number} - p == 0 for: 0 == 0 +# print unscoped info if passing unscoped info is printed +ok {test-number} - true with 1 message: 'this MAY be seen IF info is printed for passing assertions' +# prints unscoped info on failure +not ok {test-number} - false with 2 messages: 'this SHOULD be seen' and 'this SHOULD also be seen' +# prints unscoped info only for the first assertion +not ok {test-number} - false with 1 message: 'this SHOULD be seen only ONCE' +# prints unscoped info only for the first assertion +ok {test-number} - true +# prints unscoped info only for the first assertion +ok {test-number} - true with 1 message: 'this MAY also be seen only ONCE IF info is printed for passing assertions' +# prints unscoped info only for the first assertion +ok {test-number} - true +# random SECTION tests +ok {test-number} - a != b for: 1 != 2 +# random SECTION tests +ok {test-number} - b != a for: 2 != 1 +# random SECTION tests +ok {test-number} - a != b for: 1 != 2 +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(letters, "b", "z") for: true +# replaceInPlace +ok {test-number} - letters == "azcdefcg" for: "azcdefcg" == "azcdefcg" +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(letters, "c", "z") for: true +# replaceInPlace +ok {test-number} - letters == "abzdefzg" for: "abzdefzg" == "abzdefzg" +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(letters, "a", "z") for: true +# replaceInPlace +ok {test-number} - letters == "zbcdefcg" for: "zbcdefcg" == "zbcdefcg" +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(letters, "g", "z") for: true +# replaceInPlace +ok {test-number} - letters == "abcdefcz" for: "abcdefcz" == "abcdefcz" +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(letters, letters, "replaced") for: true +# replaceInPlace +ok {test-number} - letters == "replaced" for: "replaced" == "replaced" +# replaceInPlace +ok {test-number} - !(Catch::replaceInPlace(letters, "x", "z")) for: !false +# replaceInPlace +ok {test-number} - letters == letters for: "abcdefcg" == "abcdefcg" +# replaceInPlace +ok {test-number} - Catch::replaceInPlace(s, "'", "|'") for: true +# replaceInPlace +ok {test-number} - s == "didn|'t" for: "didn|'t" == "didn|'t" +# resolution +ok {test-number} - res.size() == count for: 10 == 10 +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# resolution +ok {test-number} - res[i] == rate for: 1000.0 == 1000 (0x) +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 1 >= 1 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 2 >= 1 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 4 >= 2 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 8 >= 4 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 16 >= 8 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 32 >= 16 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 64 >= 32 +# run_for_at_least, chronometer +ok {test-number} - meter.runs() >= old_runs for: 128 >= 64 +# run_for_at_least, chronometer +ok {test-number} - Timing.elapsed >= time for: 128 ns >= 100 ns +# run_for_at_least, chronometer +ok {test-number} - Timing.result == Timing.iterations + 17 for: 145 == 145 +# run_for_at_least, chronometer +ok {test-number} - Timing.iterations >= time.count() for: 128 >= 100 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 1 >= 1 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 2 >= 1 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 4 >= 2 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 8 >= 4 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 16 >= 8 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 32 >= 16 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 64 >= 32 +# run_for_at_least, int +ok {test-number} - x >= old_x for: 128 >= 64 +# run_for_at_least, int +ok {test-number} - Timing.elapsed >= time for: 128 ns >= 100 ns +# run_for_at_least, int +ok {test-number} - Timing.result == Timing.iterations + 17 for: 145 == 145 +# run_for_at_least, int +ok {test-number} - Timing.iterations >= time.count() for: 128 >= 100 +# send a single char to INFO +not ok {test-number} - false with 1 message: '3' +# sends information to INFO +not ok {test-number} - false with 2 messages: 'hi' and 'i := 7' +# shortened hide tags are split apart +ok {test-number} - testcase.tags, VectorContains( Tag( "magic-tag" ) ) && VectorContains( Tag( "."_catch_sr ) ) for: { {?}, {?} } ( Contains: {?} and Contains: {?} ) +# splitString +ok {test-number} - splitStringRef("", ','), Equals(std::vector()) for: { } Equals: { } +# splitString +ok {test-number} - splitStringRef("abc", ','), Equals(std::vector{"abc"}) for: { abc } Equals: { abc } +# splitString +ok {test-number} - splitStringRef("abc,def", ','), Equals(std::vector{"abc", "def"}) for: { abc, def } Equals: { abc, def } +# stacks unscoped info in loops +not ok {test-number} - false with 4 messages: 'Count 1 to 3...' and '1' and '2' and '3' +# stacks unscoped info in loops +not ok {test-number} - false with 4 messages: 'Count 4 to 6...' and '4' and '5' and '6' +# startsWith +ok {test-number} - !(startsWith("", 'c')) for: !false +# startsWith +ok {test-number} - startsWith(std::string("abc"), 'a') for: true +# startsWith +ok {test-number} - startsWith("def"_catch_sr, 'd') for: true +# std::map is convertible string +ok {test-number} - Catch::Detail::stringify( emptyMap ) == "{ }" for: "{ }" == "{ }" +# std::map is convertible string +ok {test-number} - Catch::Detail::stringify( map ) == "{ { \"one\", 1 } }" for: "{ { "one", 1 } }" == "{ { "one", 1 } }" +# std::map is convertible string +ok {test-number} - Catch::Detail::stringify( map ) == "{ { \"abc\", 1 }, { \"def\", 2 }, { \"ghi\", 3 } }" for: "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" == "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" +# std::pair -> toString +ok {test-number} - ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" for: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" +# std::pair -> toString +ok {test-number} - ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" for: "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" +# std::set is convertible string +ok {test-number} - Catch::Detail::stringify( emptySet ) == "{ }" for: "{ }" == "{ }" +# std::set is convertible string +ok {test-number} - Catch::Detail::stringify( set ) == "{ \"one\" }" for: "{ "one" }" == "{ "one" }" +# std::set is convertible string +ok {test-number} - Catch::Detail::stringify( set ) == "{ \"abc\", \"def\", \"ghi\" }" for: "{ "abc", "def", "ghi" }" == "{ "abc", "def", "ghi" }" +# std::vector > -> toString +ok {test-number} - ::Catch::Detail::stringify( pr ) == "{ { \"green\", 55 } }" for: "{ { "green", 55 } }" == "{ { "green", 55 } }" +# stringify ranges +ok {test-number} - ::Catch::Detail::stringify(streamable_range{}) == "op<<(streamable_range)" for: "op<<(streamable_range)" == "op<<(streamable_range)" +# stringify ranges +ok {test-number} - ::Catch::Detail::stringify(stringmaker_range{}) == "stringmaker(streamable_range)" for: "stringmaker(streamable_range)" == "stringmaker(streamable_range)" +# stringify ranges +ok {test-number} - ::Catch::Detail::stringify(just_range{}) == "{ 1, 2, 3, 4 }" for: "{ 1, 2, 3, 4 }" == "{ 1, 2, 3, 4 }" +# stringify ranges +ok {test-number} - ::Catch::Detail::stringify(disabled_range{}) == "{?}" for: "{?}" == "{?}" +# stringify( has_maker ) +ok {test-number} - ::Catch::Detail::stringify( item ) == "StringMaker" for: "StringMaker" == "StringMaker" +# stringify( has_maker_and_operator ) +ok {test-number} - ::Catch::Detail::stringify( item ) == "StringMaker" for: "StringMaker" == "StringMaker" +# stringify( has_neither ) +ok {test-number} - ::Catch::Detail::stringify(item) == "{?}" for: "{?}" == "{?}" +# stringify( has_operator ) +ok {test-number} - ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" for: "operator<<( has_operator )" == "operator<<( has_operator )" +# stringify( has_template_operator ) +ok {test-number} - ::Catch::Detail::stringify( item ) == "operator<<( has_template_operator )" for: "operator<<( has_template_operator )" == "operator<<( has_template_operator )" +# stringify( vectors ) +ok {test-number} - ::Catch::Detail::stringify( v ) == "{ StringMaker }" for: "{ StringMaker }" == "{ StringMaker }" +# stringify( vectors ) +ok {test-number} - ::Catch::Detail::stringify( v ) == "{ StringMaker }" for: "{ StringMaker }" == "{ StringMaker }" +# stringify( vectors ) +ok {test-number} - ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" for: "{ operator<<( has_operator ) }" == "{ operator<<( has_operator ) }" +# strlen3 +ok {test-number} - data.str.size() == data.len for: 3 == 3 +# strlen3 +ok {test-number} - data.str.size() == data.len for: 3 == 3 +# strlen3 +ok {test-number} - data.str.size() == data.len for: 5 == 5 +# strlen3 +ok {test-number} - data.str.size() == data.len for: 4 == 4 +# tables +ok {test-number} - strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 5 == 5 +# tables +ok {test-number} - strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 6 == 6 +# tables +ok {test-number} - strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 5 == 5 +# tables +ok {test-number} - strlen(std::get<0>(data)) == static_cast(std::get<1>(data)) for: 6 == 6 +# tags with dots in later positions are not parsed as hidden +ok {test-number} - testcase.tags.size() == 1 for: 1 == 1 +# tags with dots in later positions are not parsed as hidden +ok {test-number} - testcase.tags[0].original == "magic.tag"_catch_sr for: magic.tag == magic.tag +# thrown std::strings are translated +not ok {test-number} - unexpected exception with message: 'Why would you throw a std::string?' +# toString on const wchar_t const pointer returns the string contents +ok {test-number} - result == "\"wide load\"" for: ""wide load"" == ""wide load"" +# toString on const wchar_t pointer returns the string contents +ok {test-number} - result == "\"wide load\"" for: ""wide load"" == ""wide load"" +# toString on wchar_t const pointer returns the string contents +ok {test-number} - result == "\"wide load\"" for: ""wide load"" == ""wide load"" +# toString on wchar_t returns the string contents +ok {test-number} - result == "\"wide load\"" for: ""wide load"" == ""wide load"" +# toString(enum class w/operator<<) +ok {test-number} - ::Catch::Detail::stringify(e0) == "E2/V0" for: "E2/V0" == "E2/V0" +# toString(enum class w/operator<<) +ok {test-number} - ::Catch::Detail::stringify(e1) == "E2/V1" for: "E2/V1" == "E2/V1" +# toString(enum class w/operator<<) +ok {test-number} - ::Catch::Detail::stringify(e3) == "Unknown enum value 10" for: "Unknown enum value 10" == "Unknown enum value 10" +# toString(enum class) +ok {test-number} - ::Catch::Detail::stringify(e0) == "0" for: "0" == "0" +# toString(enum class) +ok {test-number} - ::Catch::Detail::stringify(e1) == "1" for: "1" == "1" +# toString(enum w/operator<<) +ok {test-number} - ::Catch::Detail::stringify(e0) == "E2{0}" for: "E2{0}" == "E2{0}" +# toString(enum w/operator<<) +ok {test-number} - ::Catch::Detail::stringify(e1) == "E2{1}" for: "E2{1}" == "E2{1}" +# toString(enum) +ok {test-number} - ::Catch::Detail::stringify(e0) == "0" for: "0" == "0" +# toString(enum) +ok {test-number} - ::Catch::Detail::stringify(e1) == "1" for: "1" == "1" +# tuple<> +ok {test-number} - "{ }" == ::Catch::Detail::stringify(type{}) for: "{ }" == "{ }" +# tuple<> +ok {test-number} - "{ }" == ::Catch::Detail::stringify(value) for: "{ }" == "{ }" +# tuple +ok {test-number} - "1.2f" == ::Catch::Detail::stringify(float(1.2)) for: "1.2f" == "1.2f" +# tuple +ok {test-number} - "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) for: "{ 1.2f, 0 }" == "{ 1.2f, 0 }" +# tuple +ok {test-number} - "{ 0 }" == ::Catch::Detail::stringify(type{0}) for: "{ 0 }" == "{ 0 }" +# tuple<0,int,const char *> +ok {test-number} - "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) for: "{ 0, 42, "Catch me" }" == "{ 0, 42, "Catch me" }" +# tuple +ok {test-number} - "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) for: "{ "hello", "world" }" == "{ "hello", "world" }" +# tuple,tuple<>,float> +ok {test-number} - "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) for: "{ { 42 }, { }, 1.2f }" == "{ { 42 }, { }, 1.2f }" +# uniform samples +ok {test-number} - e.point == 23 for: 23.0 == 23 +# uniform samples +ok {test-number} - e.upper_bound == 23 for: 23.0 == 23 +# uniform samples +ok {test-number} - e.lower_bound == 23 for: 23.0 == 23 +# uniform samples +ok {test-number} - e.confidence_interval == 0.95 for: 0.95 == 0.95 +# unique_ptr reimplementation: basic functionality +ok {test-number} - !(ptr) for: !{?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() == 0 for: 0 == 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr for: {?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr == 0 for: 0 == 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() == naked_ptr for: 0x == 0x +# unique_ptr reimplementation: basic functionality +ok {test-number} - !(ptr) for: !{?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() == 0 for: 0 == 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr for: {?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr == 0 for: 0 == 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() == naked_ptr for: 0x == 0x +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr for: {?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() != 0 for: 0x != 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr == 2 for: 2 == 2 +# unique_ptr reimplementation: basic functionality +ok {test-number} - !(ptr) for: !{?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr.get() == 0 for: 0 == 0 +# unique_ptr reimplementation: basic functionality +ok {test-number} - !(ptr1) for: !{?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr2 for: {?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr2 == 1 for: 1 == 1 +# unique_ptr reimplementation: basic functionality +ok {test-number} - !(ptr2) for: !{?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - ptr1 for: {?} +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr1 == 2 for: 2 == 2 +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr1 == 2 for: 2 == 2 +# unique_ptr reimplementation: basic functionality +ok {test-number} - *ptr2 == 1 for: 1 == 1 +# vec> -> toString +ok {test-number} - ::Catch::Detail::stringify(v) == "{ }" for: "{ }" == "{ }" +# vec> -> toString +ok {test-number} - ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" for: "{ { "hello" }, { "world" } }" == "{ { "hello" }, { "world" } }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(bools) == "{ }" for: "{ }" == "{ }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(bools) == "{ true }" for: "{ true }" == "{ true }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(bools) == "{ true, false }" for: "{ true, false }" == "{ true, false }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ 42 }" for: "{ 42 }" == "{ 42 }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ 42, 250 }" for: "{ 42, 250 }" == "{ 42, 250 }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ }" for: "{ }" == "{ }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ \"hello\" }" for: "{ "hello" }" == "{ "hello" }" +# vector -> toString +ok {test-number} - ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" for: "{ "hello", "world" }" == "{ "hello", "world" }" +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# vectors can be sized and resized +ok {test-number} - v.size() == 10 for: 10 == 10 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# vectors can be sized and resized +ok {test-number} - v.size() == 0 for: 0 == 0 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() == 0 for: 0 == 0 +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 10 for: 10 >= 10 +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# vectors can be sized and resized +ok {test-number} - v.size() == 5 for: 5 == 5 +# vectors can be sized and resized +ok {test-number} - v.capacity() >= 5 for: 5 >= 5 +# warmup +ok {test-number} - (iterations * rate) > Catch::Benchmark::Detail::warmup_time.count() for: 160000000 (0x) > 100 +# warmup +ok {test-number} - (end - start) > Catch::Benchmark::Detail::warmup_time for: 310016000 ns > 100 ms +# weighted_average_quantile +ok {test-number} - q1 == 14.5 for: 14.5 == 14.5 +# weighted_average_quantile +ok {test-number} - med == 18. for: 18.0 == 18.0 +# weighted_average_quantile +ok {test-number} - q3 == 23. for: 23.0 == 23.0 +# xmlentitycheck +ok {test-number} - +# xmlentitycheck +ok {test-number} - +1..2209 + diff --git a/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt b/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt new file mode 100644 index 0000000000..c57fd14e78 --- /dev/null +++ b/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt @@ -0,0 +1,922 @@ +##teamcity[testSuiteStarted name=''] +##teamcity[testStarted name='# A test name that starts with a #'] +##teamcity[testFinished name='# A test name that starts with a #' duration="{duration}"] +##teamcity[testStarted name='#1005: Comparing pointer to int and long (NULL can be either on various systems)'] +##teamcity[testFinished name='#1005: Comparing pointer to int and long (NULL can be either on various systems)' duration="{duration}"] +##teamcity[testStarted name='#1027: Bitfields can be captured'] +##teamcity[testFinished name='#1027: Bitfields can be captured' duration="{duration}"] +##teamcity[testStarted name='#1147'] +##teamcity[testFinished name='#1147' duration="{duration}"] +##teamcity[testStarted name='#1175 - Hidden Test'] +##teamcity[testFinished name='#1175 - Hidden Test' duration="{duration}"] +##teamcity[testStarted name='#1238'] +##teamcity[testFinished name='#1238' duration="{duration}"] +##teamcity[testStarted name='#1245'] +##teamcity[testFinished name='#1245' duration="{duration}"] +##teamcity[testStarted name='#1319: Sections can have description (even if it is not saved'] +##teamcity[testFinished name='#1319: Sections can have description (even if it is not saved' duration="{duration}"] +##teamcity[testStarted name='#1403'] +##teamcity[testFinished name='#1403' duration="{duration}"] +##teamcity[testStarted name='#1455 - INFO and WARN can start with a linebreak'] +##teamcity[testFinished name='#1455 - INFO and WARN can start with a linebreak' duration="{duration}"] +##teamcity[testStarted name='#1514: stderr/stdout is not captured in tests aborted by an exception'] +Tricky.tests.cpp:|nexplicit failure with message:|n "1514"'] +##teamcity[testStdOut name='#1514: stderr/stdout is not captured in tests aborted by an exception' out='This would not be caught previously|n'] +##teamcity[testStdErr name='#1514: stderr/stdout is not captured in tests aborted by an exception' out='Nor would this|n'] +##teamcity[testFinished name='#1514: stderr/stdout is not captured in tests aborted by an exception' duration="{duration}"] +##teamcity[testStarted name='#1548'] +##teamcity[testFinished name='#1548' duration="{duration}"] +##teamcity[testStarted name='#1905 -- test spec parser properly clears internal state between compound tests'] +##teamcity[testFinished name='#1905 -- test spec parser properly clears internal state between compound tests' duration="{duration}"] +##teamcity[testStarted name='#1912 -- test spec parser handles escaping'] +##teamcity[testFinished name='#1912 -- test spec parser handles escaping' duration="{duration}"] +##teamcity[testStarted name='#1913 - GENERATE inside a for loop should not keep recreating the generator'] +##teamcity[testFinished name='#1913 - GENERATE inside a for loop should not keep recreating the generator' duration="{duration}"] +##teamcity[testStarted name='#1913 - GENERATEs can share a line'] +##teamcity[testFinished name='#1913 - GENERATEs can share a line' duration="{duration}"] +##teamcity[testStarted name='#1938 - GENERATE after a section'] +##teamcity[testFinished name='#1938 - GENERATE after a section' duration="{duration}"] +##teamcity[testStarted name='#1938 - Section followed by flat generate'] +##teamcity[testFinished name='#1938 - Section followed by flat generate' duration="{duration}"] +##teamcity[testStarted name='#1938 - flat generate'] +##teamcity[testFinished name='#1938 - flat generate' duration="{duration}"] +##teamcity[testStarted name='#1938 - mixed sections and generates'] +##teamcity[testFinished name='#1938 - mixed sections and generates' duration="{duration}"] +##teamcity[testStarted name='#1938 - nested generate'] +##teamcity[testFinished name='#1938 - nested generate' duration="{duration}"] +##teamcity[testStarted name='#1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0'] +##teamcity[testFinished name='#1954 - 7 arg template test case sig compiles - 1, 1, 1, 1, 1, 0, 0' duration="{duration}"] +##teamcity[testStarted name='#1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0'] +##teamcity[testFinished name='#1954 - 7 arg template test case sig compiles - 5, 1, 1, 1, 1, 0, 0' duration="{duration}"] +##teamcity[testStarted name='#1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0'] +##teamcity[testFinished name='#1954 - 7 arg template test case sig compiles - 5, 3, 1, 1, 1, 0, 0' duration="{duration}"] +##teamcity[testStarted name='#2152 - ULP checks between differently signed values were wrong - double'] +##teamcity[testFinished name='#2152 - ULP checks between differently signed values were wrong - double' duration="{duration}"] +##teamcity[testStarted name='#2152 - ULP checks between differently signed values were wrong - float'] +##teamcity[testFinished name='#2152 - ULP checks between differently signed values were wrong - float' duration="{duration}"] +##teamcity[testStarted name='#748 - captures with unexpected exceptions'] +Exception.tests.cpp:|nunexpected exception with messages:|n "answer := 42"|n "expected exception"- failure ignore as test marked as |'ok to fail|'|n'] +Exception.tests.cpp:|nunexpected exception with messages:|n "answer := 42"|n "expected exception"|n REQUIRE_NOTHROW( thisThrows() )|nwith expansion:|n thisThrows()|n- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='#748 - captures with unexpected exceptions' duration="{duration}"] +##teamcity[testStarted name='#809'] +##teamcity[testFinished name='#809' duration="{duration}"] +##teamcity[testStarted name='#833'] +##teamcity[testFinished name='#833' duration="{duration}"] +##teamcity[testStarted name='#835 -- errno should not be touched by Catch'] +Misc.tests.cpp:|nexpression failed|n CHECK( f() == 0 )|nwith expansion:|n 1 == 0|n- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='#835 -- errno should not be touched by Catch' duration="{duration}"] +##teamcity[testStarted name='#872'] +##teamcity[testFinished name='#872' duration="{duration}"] +##teamcity[testStarted name='#961 -- Dynamically created sections should all be reported'] +##teamcity[testFinished name='#961 -- Dynamically created sections should all be reported' duration="{duration}"] +##teamcity[testStarted name='|'Not|' checks that should fail'] +Condition.tests.cpp:|nexpression failed|n CHECK( false != false )|nwith expansion:|n false != false|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( true != true )|nwith expansion:|n true != true|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( !true )|nwith expansion:|n false|n'] +Condition.tests.cpp:|nexpression failed|n CHECK_FALSE( true )|nwith expansion:|n !true|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( !trueValue )|nwith expansion:|n false|n'] +Condition.tests.cpp:|nexpression failed|n CHECK_FALSE( trueValue )|nwith expansion:|n !true|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( !(1 == 1) )|nwith expansion:|n false|n'] +Condition.tests.cpp:|nexpression failed|n CHECK_FALSE( 1 == 1 )|nwith expansion:|n !(1 == 1)|n'] +##teamcity[testFinished name='|'Not|' checks that should fail' duration="{duration}"] +##teamcity[testStarted name='|'Not|' checks that should succeed'] +##teamcity[testFinished name='|'Not|' checks that should succeed' duration="{duration}"] +##teamcity[testStarted name='(unimplemented) static bools can be evaluated'] +##teamcity[testFinished name='(unimplemented) static bools can be evaluated' duration="{duration}"] +##teamcity[testStarted name='3x3x3 ints'] +##teamcity[testFinished name='3x3x3 ints' duration="{duration}"] +##teamcity[testStarted name='A METHOD_AS_TEST_CASE based test run that fails'] +Class.tests.cpp:|nexpression failed|n REQUIRE( s == "world" )|nwith expansion:|n "hello" == "world"|n'] +##teamcity[testFinished name='A METHOD_AS_TEST_CASE based test run that fails' duration="{duration}"] +##teamcity[testStarted name='A METHOD_AS_TEST_CASE based test run that succeeds'] +##teamcity[testFinished name='A METHOD_AS_TEST_CASE based test run that succeeds' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2::m_a.size() == 1 )|nwith expansion:|n 0 == 1|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2::m_a.size() == 1 )|nwith expansion:|n 0 == 1|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - Template_Foo' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2::m_a.size() == 1 )|nwith expansion:|n 0 == 1|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2::m_a.size() == 1 )|nwith expansion:|n 0 == 1|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails - std::vector' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - Template_Foo' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds - std::vector' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2{}.m_a.size() < 2 )|nwith expansion:|n 6 < 2|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2{}.m_a.size() < 2 )|nwith expansion:|n 2 < 2|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - Template_Foo_2' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2{}.m_a.size() < 2 )|nwith expansion:|n 6 < 2|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture_2{}.m_a.size() < 2 )|nwith expansion:|n 2 < 2|n'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails - std::array' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - Template_Foo_2' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array'] +##teamcity[testFinished name='A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds - std::array' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - double'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture::m_a == 2 )|nwith expansion:|n 1.0 == 2|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - double' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - float'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture::m_a == 2 )|nwith expansion:|n 1.0f == 2|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - float' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - int'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Template_Fixture::m_a == 2 )|nwith expansion:|n 1 == 2|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that fails - int' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - double' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - float' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD based test run that succeeds - int' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Nttp_Fixture::value == 0 )|nwith expansion:|n 1 == 0|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 1' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Nttp_Fixture::value == 0 )|nwith expansion:|n 3 == 0|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 3' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6'] +Class.tests.cpp:|nexpression failed|n REQUIRE( Nttp_Fixture::value == 0 )|nwith expansion:|n 6 == 0|n'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails - 6' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 1' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 3' duration="{duration}"] +##teamcity[testStarted name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6'] +##teamcity[testFinished name='A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds - 6' duration="{duration}"] +##teamcity[testStarted name='A TEST_CASE_METHOD based test run that fails'] +Class.tests.cpp:|nexpression failed|n REQUIRE( m_a == 2 )|nwith expansion:|n 1 == 2|n'] +##teamcity[testFinished name='A TEST_CASE_METHOD based test run that fails' duration="{duration}"] +##teamcity[testStarted name='A TEST_CASE_METHOD based test run that succeeds'] +##teamcity[testFinished name='A TEST_CASE_METHOD based test run that succeeds' duration="{duration}"] +##teamcity[testStarted name='A Template product test case - Foo'] +##teamcity[testFinished name='A Template product test case - Foo' duration="{duration}"] +##teamcity[testStarted name='A Template product test case - Foo'] +##teamcity[testFinished name='A Template product test case - Foo' duration="{duration}"] +##teamcity[testStarted name='A Template product test case - std::vector'] +##teamcity[testFinished name='A Template product test case - std::vector' duration="{duration}"] +##teamcity[testStarted name='A Template product test case - std::vector'] +##teamcity[testFinished name='A Template product test case - std::vector' duration="{duration}"] +##teamcity[testStarted name='A Template product test case with array signature - Bar'] +##teamcity[testFinished name='A Template product test case with array signature - Bar' duration="{duration}"] +##teamcity[testStarted name='A Template product test case with array signature - Bar'] +##teamcity[testFinished name='A Template product test case with array signature - Bar' duration="{duration}"] +##teamcity[testStarted name='A Template product test case with array signature - std::array'] +##teamcity[testFinished name='A Template product test case with array signature - std::array' duration="{duration}"] +##teamcity[testStarted name='A Template product test case with array signature - std::array'] +##teamcity[testFinished name='A Template product test case with array signature - std::array' duration="{duration}"] +##teamcity[testStarted name='A comparison that uses literals instead of the normal constructor'] +##teamcity[testFinished name='A comparison that uses literals instead of the normal constructor' duration="{duration}"] +##teamcity[testStarted name='A couple of nested sections followed by a failure'] +Misc.tests.cpp:|nexplicit failure with message:|n "to infinity and beyond"'] +##teamcity[testFinished name='A couple of nested sections followed by a failure' duration="{duration}"] +##teamcity[testStarted name='A failing expression with a non streamable type is still captured'] +Tricky.tests.cpp:|nexpression failed|n CHECK( &o1 == &o2 )|nwith expansion:|n 0x == 0x|n'] +Tricky.tests.cpp:|nexpression failed|n CHECK( o1 == o2 )|nwith expansion:|n {?} == {?}|n'] +##teamcity[testFinished name='A failing expression with a non streamable type is still captured' duration="{duration}"] +##teamcity[testStarted name='Absolute margin'] +##teamcity[testFinished name='Absolute margin' duration="{duration}"] +##teamcity[testStarted name='An empty test with no assertions'] +##teamcity[testFinished name='An empty test with no assertions' duration="{duration}"] +##teamcity[testStarted name='An expression with side-effects should only be evaluated once'] +##teamcity[testFinished name='An expression with side-effects should only be evaluated once' duration="{duration}"] +##teamcity[testStarted name='An unchecked exception reports the line of the last assertion'] +Exception.tests.cpp:|nunexpected exception with message:|n "unexpected exception"|n {Unknown expression after the reported line}|nwith expansion:|n {Unknown expression after the reported line}|n'] +##teamcity[testFinished name='An unchecked exception reports the line of the last assertion' duration="{duration}"] +##teamcity[testStarted name='Anonymous test case 1'] +##teamcity[testFinished name='Anonymous test case 1' duration="{duration}"] +##teamcity[testStarted name='Approx setters validate their arguments'] +##teamcity[testFinished name='Approx setters validate their arguments' duration="{duration}"] +##teamcity[testStarted name='Approx with exactly-representable margin'] +##teamcity[testFinished name='Approx with exactly-representable margin' duration="{duration}"] +##teamcity[testStarted name='Approximate PI'] +##teamcity[testFinished name='Approximate PI' duration="{duration}"] +##teamcity[testStarted name='Approximate comparisons with different epsilons'] +##teamcity[testFinished name='Approximate comparisons with different epsilons' duration="{duration}"] +##teamcity[testStarted name='Approximate comparisons with floats'] +##teamcity[testFinished name='Approximate comparisons with floats' duration="{duration}"] +##teamcity[testStarted name='Approximate comparisons with ints'] +##teamcity[testFinished name='Approximate comparisons with ints' duration="{duration}"] +##teamcity[testStarted name='Approximate comparisons with mixed numeric types'] +##teamcity[testFinished name='Approximate comparisons with mixed numeric types' duration="{duration}"] +##teamcity[testStarted name='Arbitrary predicate matcher'] +##teamcity[testFinished name='Arbitrary predicate matcher' duration="{duration}"] +##teamcity[testStarted name='Assertion macros support bit operators and bool conversions'] +##teamcity[testFinished name='Assertion macros support bit operators and bool conversions' duration="{duration}"] +##teamcity[testStarted name='Assertions then sections'] +##teamcity[testFinished name='Assertions then sections' duration="{duration}"] +##teamcity[testStarted name='Basic use of the Contains range matcher'] +##teamcity[testFinished name='Basic use of the Contains range matcher' duration="{duration}"] +##teamcity[testStarted name='Basic use of the Empty range matcher'] +##teamcity[testFinished name='Basic use of the Empty range matcher' duration="{duration}"] +##teamcity[testStarted name='CAPTURE can deal with complex expressions'] +##teamcity[testFinished name='CAPTURE can deal with complex expressions' duration="{duration}"] +##teamcity[testStarted name='CAPTURE can deal with complex expressions involving commas'] +##teamcity[testFinished name='CAPTURE can deal with complex expressions involving commas' duration="{duration}"] +##teamcity[testStarted name='CAPTURE parses string and character constants'] +##teamcity[testFinished name='CAPTURE parses string and character constants' duration="{duration}"] +##teamcity[testStarted name='Capture and info messages'] +##teamcity[testFinished name='Capture and info messages' duration="{duration}"] +##teamcity[testStarted name='CaseInsensitiveEqualsTo is case insensitive'] +##teamcity[testFinished name='CaseInsensitiveEqualsTo is case insensitive' duration="{duration}"] +##teamcity[testStarted name='CaseInsensitiveLess is case insensitive'] +##teamcity[testFinished name='CaseInsensitiveLess is case insensitive' duration="{duration}"] +##teamcity[testStarted name='Character pretty printing'] +##teamcity[testFinished name='Character pretty printing' duration="{duration}"] +##teamcity[testStarted name='Clara::Arg supports single-arg parse the way Opt does'] +##teamcity[testFinished name='Clara::Arg supports single-arg parse the way Opt does' duration="{duration}"] +##teamcity[testStarted name='Clara::Opt supports accept-many lambdas'] +##teamcity[testFinished name='Clara::Opt supports accept-many lambdas' duration="{duration}"] +##teamcity[testStarted name='Combining MatchAllOfGeneric does not nest'] +##teamcity[testFinished name='Combining MatchAllOfGeneric does not nest' duration="{duration}"] +##teamcity[testStarted name='Combining MatchAnyOfGeneric does not nest'] +##teamcity[testFinished name='Combining MatchAnyOfGeneric does not nest' duration="{duration}"] +##teamcity[testStarted name='Combining MatchNotOfGeneric does not nest'] +##teamcity[testFinished name='Combining MatchNotOfGeneric does not nest' duration="{duration}"] +##teamcity[testStarted name='Combining concrete matchers does not use templated matchers'] +##teamcity[testFinished name='Combining concrete matchers does not use templated matchers' duration="{duration}"] +##teamcity[testStarted name='Combining only templated matchers'] +##teamcity[testFinished name='Combining only templated matchers' duration="{duration}"] +##teamcity[testStarted name='Combining templated and concrete matchers'] +##teamcity[testFinished name='Combining templated and concrete matchers' duration="{duration}"] +##teamcity[testStarted name='Combining templated matchers'] +##teamcity[testFinished name='Combining templated matchers' duration="{duration}"] +##teamcity[testStarted name='Commas in various macros are allowed'] +##teamcity[testFinished name='Commas in various macros are allowed' duration="{duration}"] +##teamcity[testStarted name='Comparing function pointers'] +##teamcity[testFinished name='Comparing function pointers' duration="{duration}"] +##teamcity[testStarted name='Comparison ops'] +##teamcity[testFinished name='Comparison ops' duration="{duration}"] +##teamcity[testStarted name='Comparison with explicitly convertible types'] +##teamcity[testFinished name='Comparison with explicitly convertible types' duration="{duration}"] +##teamcity[testStarted name='Comparisons between ints where one side is computed'] +##teamcity[testFinished name='Comparisons between ints where one side is computed' duration="{duration}"] +##teamcity[testStarted name='Comparisons between unsigned ints and negative signed ints match c++ standard behaviour'] +##teamcity[testFinished name='Comparisons between unsigned ints and negative signed ints match c++ standard behaviour' duration="{duration}"] +##teamcity[testStarted name='Comparisons with int literals don|'t warn when mixing signed/ unsigned'] +##teamcity[testFinished name='Comparisons with int literals don|'t warn when mixing signed/ unsigned' duration="{duration}"] +##teamcity[testStarted name='Composed generic matchers shortcircuit'] +##teamcity[testFinished name='Composed generic matchers shortcircuit' duration="{duration}"] +##teamcity[testStarted name='Composed matchers shortcircuit'] +##teamcity[testFinished name='Composed matchers shortcircuit' duration="{duration}"] +##teamcity[testStarted name='Contains string matcher'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" contains: "not there" (case insensitive)|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), ContainsSubstring( "STRING" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" contains: "STRING"|n'] +##teamcity[testFinished name='Contains string matcher' duration="{duration}"] +##teamcity[testStarted name='Copy and then generate a range'] +##teamcity[testFinished name='Copy and then generate a range' duration="{duration}"] +##teamcity[testStarted name='Custom exceptions can be translated when testing for nothrow'] +Exception.tests.cpp:|nunexpected exception with message:|n "custom exception - not std"|n REQUIRE_NOTHROW( throwCustom() )|nwith expansion:|n throwCustom()|n'] +##teamcity[testFinished name='Custom exceptions can be translated when testing for nothrow' duration="{duration}"] +##teamcity[testStarted name='Custom exceptions can be translated when testing for throwing as something else'] +Exception.tests.cpp:|nunexpected exception with message:|n "custom exception - not std"|n REQUIRE_THROWS_AS( throwCustom(), std::exception )|nwith expansion:|n throwCustom(), std::exception|n'] +##teamcity[testFinished name='Custom exceptions can be translated when testing for throwing as something else' duration="{duration}"] +##teamcity[testStarted name='Custom std-exceptions can be custom translated'] +Exception.tests.cpp:|nunexpected exception with message:|n "custom std exception"'] +##teamcity[testFinished name='Custom std-exceptions can be custom translated' duration="{duration}"] +##teamcity[testStarted name='Default scale is invisible to comparison'] +##teamcity[testFinished name='Default scale is invisible to comparison' duration="{duration}"] +##teamcity[testStarted name='Directly creating an EnumInfo'] +##teamcity[testFinished name='Directly creating an EnumInfo' duration="{duration}"] +##teamcity[testStarted name='Empty tag is not allowed'] +##teamcity[testFinished name='Empty tag is not allowed' duration="{duration}"] +##teamcity[testStarted name='EndsWith string matcher'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "Substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "Substring"|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ends with: "this" (case insensitive)|n'] +##teamcity[testFinished name='EndsWith string matcher' duration="{duration}"] +##teamcity[testStarted name='Enums can quickly have stringification enabled using REGISTER_ENUM'] +##teamcity[testFinished name='Enums can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"] +##teamcity[testStarted name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM'] +##teamcity[testFinished name='Enums in namespaces can quickly have stringification enabled using REGISTER_ENUM' duration="{duration}"] +##teamcity[testStarted name='Epsilon only applies to Approx|'s value'] +##teamcity[testFinished name='Epsilon only applies to Approx|'s value' duration="{duration}"] +##teamcity[testStarted name='Equality checks that should fail'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven == 6 )|nwith expansion:|n 7 == 6|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven == 8 )|nwith expansion:|n 7 == 8|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven == 0 )|nwith expansion:|n 7 == 0|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.11f ) )|nwith expansion:|n 9.1f == Approx( 9.1099996567 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 9.0f ) )|nwith expansion:|n 9.1f == Approx( 9.0 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 1 ) )|nwith expansion:|n 9.1f == Approx( 1.0 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one == Approx( 0 ) )|nwith expansion:|n 9.1f == Approx( 0.0 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.double_pi == Approx( 3.1415 ) )|nwith expansion:|n 3.1415926535 == Approx( 3.1415 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello == "goodbye" )|nwith expansion:|n "hello" == "goodbye"|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello == "hell" )|nwith expansion:|n "hello" == "hell"|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello == "hello1" )|nwith expansion:|n "hello" == "hello1"|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello.size() == 6 )|nwith expansion:|n 5 == 6|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( x == Approx( 1.301 ) )|nwith expansion:|n 1.3 == Approx( 1.301 )|n- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='Equality checks that should fail' duration="{duration}"] +##teamcity[testStarted name='Equality checks that should succeed'] +##teamcity[testFinished name='Equality checks that should succeed' duration="{duration}"] +##teamcity[testStarted name='Equals'] +##teamcity[testFinished name='Equals' duration="{duration}"] +##teamcity[testStarted name='Equals string matcher'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), Equals( "this string contains |'ABC|' as a substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" equals: "this string contains |'ABC|' as a substring"|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" equals: "something else" (case insensitive)|n'] +##teamcity[testFinished name='Equals string matcher' duration="{duration}"] +##teamcity[testStarted name='Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified'] +##teamcity[testFinished name='Exception as a value (e.g. in REQUIRE_THROWS_MATCHES) can be stringified' duration="{duration}"] +##teamcity[testStarted name='Exception matchers that fail'] +Matchers.tests.cpp:|nno exception was thrown where one was expected|n CHECK_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n doesNotThrow(), SpecialException, ExceptionMatcher{ 1 }|n'] +Matchers.tests.cpp:|nno exception was thrown where one was expected|n REQUIRE_THROWS_MATCHES( doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n doesNotThrow(), SpecialException, ExceptionMatcher{ 1 }|n'] +Matchers.tests.cpp:|nunexpected exception with message:|n "Unknown exception"|n CHECK_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 }|n'] +Matchers.tests.cpp:|nunexpected exception with message:|n "Unknown exception"|n REQUIRE_THROWS_MATCHES( throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THROWS_MATCHES( throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n SpecialException::what special exception has value of 1|n'] +Matchers.tests.cpp:|nexpression failed|n REQUIRE_THROWS_MATCHES( throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } )|nwith expansion:|n SpecialException::what special exception has value of 1|n'] +##teamcity[testFinished name='Exception matchers that fail' duration="{duration}"] +##teamcity[testStarted name='Exception matchers that succeed'] +##teamcity[testFinished name='Exception matchers that succeed' duration="{duration}"] +##teamcity[testStarted name='Exception messages can be tested for'] +##teamcity[testFinished name='Exception messages can be tested for' duration="{duration}"] +##teamcity[testStarted name='Exceptions matchers'] +##teamcity[testFinished name='Exceptions matchers' duration="{duration}"] +##teamcity[testStarted name='Expected exceptions that don|'t throw or unexpected exceptions fail the test'] +Exception.tests.cpp:|nunexpected exception with message:|n "expected exception"|n CHECK_THROWS_AS( thisThrows(), std::string )|nwith expansion:|n thisThrows(), std::string|n'] +Exception.tests.cpp:|nno exception was thrown where one was expected|n CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error )|nwith expansion:|n thisDoesntThrow(), std::domain_error|n'] +Exception.tests.cpp:|nunexpected exception with message:|n "expected exception"|n CHECK_NOTHROW( thisThrows() )|nwith expansion:|n thisThrows()|n'] +##teamcity[testFinished name='Expected exceptions that don|'t throw or unexpected exceptions fail the test' duration="{duration}"] +##teamcity[testStarted name='FAIL aborts the test'] +Message.tests.cpp:|nexplicit failure with message:|n "This is a failure"'] +##teamcity[testFinished name='FAIL aborts the test' duration="{duration}"] +##teamcity[testStarted name='FAIL does not require an argument'] +Message.tests.cpp:|nexplicit failure'] +##teamcity[testFinished name='FAIL does not require an argument' duration="{duration}"] +##teamcity[testStarted name='FAIL_CHECK does not abort the test'] +Message.tests.cpp:|nexplicit failure with message:|n "This is a failure"'] +##teamcity[testFinished name='FAIL_CHECK does not abort the test' duration="{duration}"] +##teamcity[testStarted name='Factorials are computed'] +##teamcity[testFinished name='Factorials are computed' duration="{duration}"] +##teamcity[testStarted name='Floating point matchers: double'] +##teamcity[testFinished name='Floating point matchers: double' duration="{duration}"] +##teamcity[testStarted name='Floating point matchers: float'] +##teamcity[testFinished name='Floating point matchers: float' duration="{duration}"] +##teamcity[testStarted name='Generators -- adapters'] +##teamcity[testFinished name='Generators -- adapters' duration="{duration}"] +##teamcity[testStarted name='Generators -- simple'] +##teamcity[testFinished name='Generators -- simple' duration="{duration}"] +##teamcity[testStarted name='Generators internals'] +##teamcity[testFinished name='Generators internals' duration="{duration}"] +##teamcity[testStarted name='Greater-than inequalities with different epsilons'] +##teamcity[testFinished name='Greater-than inequalities with different epsilons' duration="{duration}"] +##teamcity[testStarted name='INFO and WARN do not abort tests'] +##teamcity[testFinished name='INFO and WARN do not abort tests' duration="{duration}"] +##teamcity[testStarted name='INFO gets logged on failure'] +Message.tests.cpp:|nexpression failed with messages:|n "this message should be logged"|n "so should this"|n REQUIRE( a == 1 )|nwith expansion:|n 2 == 1|n'] +##teamcity[testFinished name='INFO gets logged on failure' duration="{duration}"] +##teamcity[testStarted name='INFO gets logged on failure, even if captured before successful assertions'] +Message.tests.cpp:|nexpression failed with messages:|n "this message may be logged later"|n "this message should be logged"|n CHECK( a == 1 )|nwith expansion:|n 2 == 1|n'] +Message.tests.cpp:|nexpression failed with messages:|n "this message may be logged later"|n "this message should be logged"|n "and this, but later"|n CHECK( a == 0 )|nwith expansion:|n 2 == 0|n'] +##teamcity[testFinished name='INFO gets logged on failure, even if captured before successful assertions' duration="{duration}"] +##teamcity[testStarted name='INFO is reset for each loop'] +Message.tests.cpp:|nexpression failed with messages:|n "current counter 10"|n "i := 10"|n REQUIRE( i < 10 )|nwith expansion:|n 10 < 10|n'] +##teamcity[testFinished name='INFO is reset for each loop' duration="{duration}"] +##teamcity[testStarted name='Inequality checks that should fail'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven != 7 )|nwith expansion:|n 7 != 7|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one != Approx( 9.1f ) )|nwith expansion:|n 9.1f != Approx( 9.1000003815 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.double_pi != Approx( 3.1415926535 ) )|nwith expansion:|n 3.1415926535 != Approx( 3.1415926535 )|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello != "hello" )|nwith expansion:|n "hello" != "hello"|n- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello.size() != 5 )|nwith expansion:|n 5 != 5|n- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='Inequality checks that should fail' duration="{duration}"] +##teamcity[testStarted name='Inequality checks that should succeed'] +##teamcity[testFinished name='Inequality checks that should succeed' duration="{duration}"] +##teamcity[testStarted name='Lambdas in assertions'] +##teamcity[testFinished name='Lambdas in assertions' duration="{duration}"] +##teamcity[testStarted name='Less-than inequalities with different epsilons'] +##teamcity[testFinished name='Less-than inequalities with different epsilons' duration="{duration}"] +##teamcity[testStarted name='ManuallyRegistered'] +##teamcity[testFinished name='ManuallyRegistered' duration="{duration}"] +##teamcity[testStarted name='Matchers can be (AllOf) composed with the && operator'] +##teamcity[testFinished name='Matchers can be (AllOf) composed with the && operator' duration="{duration}"] +##teamcity[testStarted name='Matchers can be (AnyOf) composed with the |||| operator'] +##teamcity[testFinished name='Matchers can be (AnyOf) composed with the |||| operator' duration="{duration}"] +##teamcity[testStarted name='Matchers can be composed with both && and ||||'] +##teamcity[testFinished name='Matchers can be composed with both && and ||||' duration="{duration}"] +##teamcity[testStarted name='Matchers can be composed with both && and |||| - failing'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), ( ContainsSubstring( "string" ) |||| ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )|n'] +##teamcity[testFinished name='Matchers can be composed with both && and |||| - failing' duration="{duration}"] +##teamcity[testStarted name='Matchers can be negated (Not) with the ! operator'] +##teamcity[testFinished name='Matchers can be negated (Not) with the ! operator' duration="{duration}"] +##teamcity[testStarted name='Matchers can be negated (Not) with the ! operator - failing'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), !ContainsSubstring( "substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" not contains: "substring"|n'] +##teamcity[testFinished name='Matchers can be negated (Not) with the ! operator - failing' duration="{duration}"] +##teamcity[testStarted name='Mayfail test case with nested sections'] +Condition.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +Condition.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='Mayfail test case with nested sections' duration="{duration}"] +##teamcity[testStarted name='Mismatching exception messages failing the test'] +Exception.tests.cpp:|nexpression failed|n REQUIRE_THROWS_WITH( thisThrows(), "should fail" )|nwith expansion:|n "expected exception" equals: "should fail"|n'] +##teamcity[testFinished name='Mismatching exception messages failing the test' duration="{duration}"] +##teamcity[testStarted name='Nested generators and captured variables'] +##teamcity[testFinished name='Nested generators and captured variables' duration="{duration}"] +##teamcity[testStarted name='Nice descriptive name'] +##teamcity[testFinished name='Nice descriptive name' duration="{duration}"] +##teamcity[testStarted name='Non-std exceptions can be translated'] +Exception.tests.cpp:|nunexpected exception with message:|n "custom exception"'] +##teamcity[testFinished name='Non-std exceptions can be translated' duration="{duration}"] +##teamcity[testStarted name='Objects that evaluated in boolean contexts can be checked'] +##teamcity[testFinished name='Objects that evaluated in boolean contexts can be checked' duration="{duration}"] +##teamcity[testStarted name='Optionally static assertions'] +##teamcity[testFinished name='Optionally static assertions' duration="{duration}"] +##teamcity[testStarted name='Ordering comparison checks that should fail'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven > 7 )|nwith expansion:|n 7 > 7|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven < 7 )|nwith expansion:|n 7 < 7|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven > 8 )|nwith expansion:|n 7 > 8|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven < 6 )|nwith expansion:|n 7 < 6|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven < 0 )|nwith expansion:|n 7 < 0|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven < -1 )|nwith expansion:|n 7 < -1|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven >= 8 )|nwith expansion:|n 7 >= 8|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.int_seven <= 6 )|nwith expansion:|n 7 <= 6|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one < 9 )|nwith expansion:|n 9.1f < 9|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one > 10 )|nwith expansion:|n 9.1f > 10|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.float_nine_point_one > 9.2 )|nwith expansion:|n 9.1f > 9.2|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello > "hello" )|nwith expansion:|n "hello" > "hello"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello < "hello" )|nwith expansion:|n "hello" < "hello"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello > "hellp" )|nwith expansion:|n "hello" > "hellp"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello > "z" )|nwith expansion:|n "hello" > "z"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello < "hellm" )|nwith expansion:|n "hello" < "hellm"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello < "a" )|nwith expansion:|n "hello" < "a"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello >= "z" )|nwith expansion:|n "hello" >= "z"|n'] +Condition.tests.cpp:|nexpression failed|n CHECK( data.str_hello <= "a" )|nwith expansion:|n "hello" <= "a"|n'] +##teamcity[testFinished name='Ordering comparison checks that should fail' duration="{duration}"] +##teamcity[testStarted name='Ordering comparison checks that should succeed'] +##teamcity[testFinished name='Ordering comparison checks that should succeed' duration="{duration}"] +##teamcity[testStarted name='Our PCG implementation provides expected results for known seeds'] +##teamcity[testFinished name='Our PCG implementation provides expected results for known seeds' duration="{duration}"] +##teamcity[testStarted name='Output from all sections is reported'] +Message.tests.cpp:|nexplicit failure with message:|n "Message from section one"'] +Message.tests.cpp:|nexplicit failure with message:|n "Message from section two"'] +##teamcity[testFinished name='Output from all sections is reported' duration="{duration}"] +##teamcity[testStarted name='Overloaded comma or address-of operators are not used'] +##teamcity[testFinished name='Overloaded comma or address-of operators are not used' duration="{duration}"] +##teamcity[testStarted name='Parse test names and tags'] +##teamcity[testFinished name='Parse test names and tags' duration="{duration}"] +##teamcity[testStarted name='Parsed tags are matched case insensitive'] +##teamcity[testFinished name='Parsed tags are matched case insensitive' duration="{duration}"] +##teamcity[testStarted name='Parsing sharding-related cli flags'] +##teamcity[testFinished name='Parsing sharding-related cli flags' duration="{duration}"] +##teamcity[testStarted name='Parsing tags with non-alphabetical characters is pass-through'] +##teamcity[testFinished name='Parsing tags with non-alphabetical characters is pass-through' duration="{duration}"] +##teamcity[testStarted name='Parsing warnings'] +##teamcity[testFinished name='Parsing warnings' duration="{duration}"] +##teamcity[testStarted name='Pointers can be compared to null'] +##teamcity[testFinished name='Pointers can be compared to null' duration="{duration}"] +##teamcity[testStarted name='Precision of floating point stringification can be set'] +##teamcity[testFinished name='Precision of floating point stringification can be set' duration="{duration}"] +##teamcity[testStarted name='Predicate matcher can accept const char*'] +##teamcity[testFinished name='Predicate matcher can accept const char*' duration="{duration}"] +##teamcity[testStarted name='Process can be configured on command line'] +##teamcity[testFinished name='Process can be configured on command line' duration="{duration}"] +##teamcity[testStarted name='Product with differing arities - std::tuple'] +##teamcity[testFinished name='Product with differing arities - std::tuple' duration="{duration}"] +##teamcity[testStarted name='Product with differing arities - std::tuple'] +##teamcity[testFinished name='Product with differing arities - std::tuple' duration="{duration}"] +##teamcity[testStarted name='Product with differing arities - std::tuple'] +##teamcity[testFinished name='Product with differing arities - std::tuple' duration="{duration}"] +##teamcity[testStarted name='Random seed generation accepts known methods'] +##teamcity[testFinished name='Random seed generation accepts known methods' duration="{duration}"] +##teamcity[testStarted name='Random seed generation reports unknown methods'] +##teamcity[testFinished name='Random seed generation reports unknown methods' duration="{duration}"] +##teamcity[testStarted name='Range type with sentinel'] +##teamcity[testFinished name='Range type with sentinel' duration="{duration}"] +##teamcity[testStarted name='Reconstruction should be based on stringification: #914'] +Decomposition.tests.cpp:|nexpression failed|n CHECK( truthy(false) )|nwith expansion:|n Hey, its truthy!|n'] +##teamcity[testFinished name='Reconstruction should be based on stringification: #914' duration="{duration}"] +##teamcity[testStarted name='Regex string matcher'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), Matches( "this STRING contains |'abc|' as a substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" matches "this STRING contains |'abc|' as a substring" case sensitively|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), Matches( "contains |'abc|' as a substring" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" matches "contains |'abc|' as a substring" case sensitively|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), Matches( "this string contains |'abc|' as a" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" matches "this string contains |'abc|' as a" case sensitively|n'] +##teamcity[testFinished name='Regex string matcher' duration="{duration}"] +##teamcity[testStarted name='Regression test #1'] +##teamcity[testFinished name='Regression test #1' duration="{duration}"] +##teamcity[testStarted name='Reporter|'s write listings to provided stream'] +##teamcity[testFinished name='Reporter|'s write listings to provided stream' duration="{duration}"] +##teamcity[testStarted name='Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla'] +##teamcity[testFinished name='Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla' duration="{duration}"] +##teamcity[testStarted name='SUCCEED counts as a test pass'] +##teamcity[testFinished name='SUCCEED counts as a test pass' duration="{duration}"] +##teamcity[testStarted name='SUCCEED does not require an argument'] +##teamcity[testFinished name='SUCCEED does not require an argument' duration="{duration}"] +##teamcity[testStarted name='Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods'] +##teamcity[testFinished name='Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods' duration="{duration}"] +##teamcity[testStarted name='Scenario: Do that thing with the thing'] +##teamcity[testFinished name='Scenario: Do that thing with the thing' duration="{duration}"] +##teamcity[testStarted name='Scenario: This is a really long scenario name to see how the list command deals with wrapping'] +##teamcity[testFinished name='Scenario: This is a really long scenario name to see how the list command deals with wrapping' duration="{duration}"] +##teamcity[testStarted name='Scenario: Vector resizing affects size and capacity'] +##teamcity[testFinished name='Scenario: Vector resizing affects size and capacity' duration="{duration}"] +##teamcity[testStarted name='Sends stuff to stdout and stderr'] +##teamcity[testStdOut name='Sends stuff to stdout and stderr' out='A string sent directly to stdout|n'] +##teamcity[testStdErr name='Sends stuff to stdout and stderr' out='A string sent directly to stderr|nA string sent to stderr via clog|n'] +##teamcity[testFinished name='Sends stuff to stdout and stderr' duration="{duration}"] +##teamcity[testStarted name='Some simple comparisons between doubles'] +##teamcity[testFinished name='Some simple comparisons between doubles' duration="{duration}"] +##teamcity[testStarted name='Standard output from all sections is reported'] +##teamcity[testStdOut name='Standard output from all sections is reported' out='Message from section one|nMessage from section two|n'] +##teamcity[testFinished name='Standard output from all sections is reported' duration="{duration}"] +##teamcity[testStarted name='StartsWith string matcher'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), StartsWith( "This String" ) )|nwith expansion:|n "this string contains |'abc|' as a substring" starts with: "This String"|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) )|nwith expansion:|n "this string contains |'abc|' as a substring" starts with: "string" (case insensitive)|n'] +##teamcity[testFinished name='StartsWith string matcher' duration="{duration}"] +##teamcity[testStarted name='Static arrays are convertible to string'] +##teamcity[testFinished name='Static arrays are convertible to string' duration="{duration}"] +##teamcity[testStarted name='String matchers'] +##teamcity[testFinished name='String matchers' duration="{duration}"] +##teamcity[testStarted name='StringRef'] +##teamcity[testFinished name='StringRef' duration="{duration}"] +##teamcity[testStarted name='StringRef at compilation time'] +##teamcity[testFinished name='StringRef at compilation time' duration="{duration}"] +##teamcity[testStarted name='Stringifying char arrays with statically known sizes - char'] +##teamcity[testFinished name='Stringifying char arrays with statically known sizes - char' duration="{duration}"] +##teamcity[testStarted name='Stringifying char arrays with statically known sizes - signed char'] +##teamcity[testFinished name='Stringifying char arrays with statically known sizes - signed char' duration="{duration}"] +##teamcity[testStarted name='Stringifying char arrays with statically known sizes - unsigned char'] +##teamcity[testFinished name='Stringifying char arrays with statically known sizes - unsigned char' duration="{duration}"] +##teamcity[testStarted name='Stringifying std::chrono::duration helpers'] +##teamcity[testFinished name='Stringifying std::chrono::duration helpers' duration="{duration}"] +##teamcity[testStarted name='Stringifying std::chrono::duration with weird ratios'] +##teamcity[testFinished name='Stringifying std::chrono::duration with weird ratios' duration="{duration}"] +##teamcity[testStarted name='Stringifying std::chrono::time_point'] +##teamcity[testFinished name='Stringifying std::chrono::time_point' duration="{duration}"] +##teamcity[testStarted name='Tabs and newlines show in output'] +Misc.tests.cpp:|nexpression failed|n CHECK( s1 == s2 )|nwith expansion:|n "if ($b == 10) {|n $a = 20;|n}"|n==|n"if ($b == 10) {|n $a = 20;|n}|n"|n'] +##teamcity[testFinished name='Tabs and newlines show in output' duration="{duration}"] +##teamcity[testStarted name='Tag alias can be registered against tag patterns'] +##teamcity[testFinished name='Tag alias can be registered against tag patterns' duration="{duration}"] +##teamcity[testStarted name='Tags with spaces and non-alphanumerical characters are accepted'] +##teamcity[testFinished name='Tags with spaces and non-alphanumerical characters are accepted' duration="{duration}"] +##teamcity[testStarted name='Template test case method with test types specified inside std::tuple - MyTypes - 0'] +##teamcity[testFinished name='Template test case method with test types specified inside std::tuple - MyTypes - 0' duration="{duration}"] +##teamcity[testStarted name='Template test case method with test types specified inside std::tuple - MyTypes - 1'] +##teamcity[testFinished name='Template test case method with test types specified inside std::tuple - MyTypes - 1' duration="{duration}"] +##teamcity[testStarted name='Template test case method with test types specified inside std::tuple - MyTypes - 2'] +##teamcity[testFinished name='Template test case method with test types specified inside std::tuple - MyTypes - 2' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 0'] +##teamcity[testFinished name='Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 0' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 1'] +##teamcity[testFinished name='Template test case with test types specified inside non-copyable and non-movable std::tuple - NonCopyableAndNonMovableTypes - 1' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0'] +##teamcity[testFinished name='Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1'] +##teamcity[testFinished name='Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside std::tuple - MyTypes - 0'] +##teamcity[testFinished name='Template test case with test types specified inside std::tuple - MyTypes - 0' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside std::tuple - MyTypes - 1'] +##teamcity[testFinished name='Template test case with test types specified inside std::tuple - MyTypes - 1' duration="{duration}"] +##teamcity[testStarted name='Template test case with test types specified inside std::tuple - MyTypes - 2'] +##teamcity[testFinished name='Template test case with test types specified inside std::tuple - MyTypes - 2' duration="{duration}"] +##teamcity[testStarted name='TemplateTest: vectors can be sized and resized - float'] +##teamcity[testFinished name='TemplateTest: vectors can be sized and resized - float' duration="{duration}"] +##teamcity[testStarted name='TemplateTest: vectors can be sized and resized - int'] +##teamcity[testFinished name='TemplateTest: vectors can be sized and resized - int' duration="{duration}"] +##teamcity[testStarted name='TemplateTest: vectors can be sized and resized - std::string'] +##teamcity[testFinished name='TemplateTest: vectors can be sized and resized - std::string' duration="{duration}"] +##teamcity[testStarted name='TemplateTest: vectors can be sized and resized - std::tuple'] +##teamcity[testFinished name='TemplateTest: vectors can be sized and resized - std::tuple' duration="{duration}"] +##teamcity[testStarted name='TemplateTestSig: vectors can be sized and resized - (std::tuple), 6'] +##teamcity[testFinished name='TemplateTestSig: vectors can be sized and resized - (std::tuple), 6' duration="{duration}"] +##teamcity[testStarted name='TemplateTestSig: vectors can be sized and resized - float,4'] +##teamcity[testFinished name='TemplateTestSig: vectors can be sized and resized - float,4' duration="{duration}"] +##teamcity[testStarted name='TemplateTestSig: vectors can be sized and resized - int,5'] +##teamcity[testFinished name='TemplateTestSig: vectors can be sized and resized - int,5' duration="{duration}"] +##teamcity[testStarted name='TemplateTestSig: vectors can be sized and resized - std::string,15'] +##teamcity[testFinished name='TemplateTestSig: vectors can be sized and resized - std::string,15' duration="{duration}"] +##teamcity[testStarted name='Test case with identical tags keeps just one'] +##teamcity[testFinished name='Test case with identical tags keeps just one' duration="{duration}"] +##teamcity[testStarted name='Test case with one argument'] +##teamcity[testFinished name='Test case with one argument' duration="{duration}"] +##teamcity[testStarted name='Test enum bit values'] +##teamcity[testFinished name='Test enum bit values' duration="{duration}"] +##teamcity[testStarted name='Test with special, characters "in name'] +##teamcity[testFinished name='Test with special, characters "in name' duration="{duration}"] +##teamcity[testStarted name='Testing checked-if'] +##teamcity[testFinished name='Testing checked-if' duration="{duration}"] +##teamcity[testStarted name='Testing checked-if 2'] +Misc.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='Testing checked-if 2' duration="{duration}"] +##teamcity[testStarted name='Testing checked-if 3'] +Misc.tests.cpp:|nexplicit failure- failure ignore as test marked as |'ok to fail|'|n'] +##teamcity[testFinished name='Testing checked-if 3' duration="{duration}"] +##teamcity[testStarted name='The NO_FAIL macro reports a failure but does not fail the test'] +##teamcity[testFinished name='The NO_FAIL macro reports a failure but does not fail the test' duration="{duration}"] +##teamcity[testStarted name='The default listing implementation write to provided stream'] +##teamcity[testFinished name='The default listing implementation write to provided stream' duration="{duration}"] +##teamcity[testStarted name='This test |'should|' fail but doesn|'t'] +##teamcity[testFinished name='This test |'should|' fail but doesn|'t' duration="{duration}"] +##teamcity[testStarted name='Thrown string literals are translated'] +Exception.tests.cpp:|nunexpected exception with message:|n "For some reason someone is throwing a string literal!"'] +##teamcity[testFinished name='Thrown string literals are translated' duration="{duration}"] +##teamcity[testStarted name='Tracker'] +##teamcity[testFinished name='Tracker' duration="{duration}"] +##teamcity[testStarted name='Trim strings'] +##teamcity[testFinished name='Trim strings' duration="{duration}"] +##teamcity[testStarted name='Unexpected exceptions can be translated'] +Exception.tests.cpp:|nunexpected exception with message:|n "3.14"'] +##teamcity[testFinished name='Unexpected exceptions can be translated' duration="{duration}"] +##teamcity[testStarted name='Upcasting special member functions'] +##teamcity[testFinished name='Upcasting special member functions' duration="{duration}"] +##teamcity[testStarted name='Usage of AllMatch range matcher'] +##teamcity[testFinished name='Usage of AllMatch range matcher' duration="{duration}"] +##teamcity[testStarted name='Usage of AnyMatch range matcher'] +##teamcity[testFinished name='Usage of AnyMatch range matcher' duration="{duration}"] +##teamcity[testStarted name='Usage of NoneMatch range matcher'] +##teamcity[testFinished name='Usage of NoneMatch range matcher' duration="{duration}"] +##teamcity[testStarted name='Usage of the SizeIs range matcher'] +##teamcity[testFinished name='Usage of the SizeIs range matcher' duration="{duration}"] +##teamcity[testStarted name='Use a custom approx'] +##teamcity[testFinished name='Use a custom approx' duration="{duration}"] +##teamcity[testStarted name='Variadic macros'] +##teamcity[testFinished name='Variadic macros' duration="{duration}"] +##teamcity[testStarted name='Vector Approx matcher'] +##teamcity[testFinished name='Vector Approx matcher' duration="{duration}"] +##teamcity[testStarted name='Vector Approx matcher -- failing'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( empty, Approx( t1 ) )|nwith expansion:|n { } is approx: { 1.0, 2.0 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v1, Approx( v2 ) )|nwith expansion:|n { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 }|n'] +##teamcity[testFinished name='Vector Approx matcher -- failing' duration="{duration}"] +##teamcity[testStarted name='Vector matchers'] +##teamcity[testFinished name='Vector matchers' duration="{duration}"] +##teamcity[testStarted name='Vector matchers that fail'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v, VectorContains( -1 ) )|nwith expansion:|n { 1, 2, 3 } Contains: -1|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( empty, VectorContains( 1 ) )|nwith expansion:|n { } Contains: 1|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( empty, Contains( v ) )|nwith expansion:|n { } Contains: { 1, 2, 3 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v, Contains( v2 ) )|nwith expansion:|n { 1, 2, 3 } Contains: { 1, 2, 4 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v, Equals( v2 ) )|nwith expansion:|n { 1, 2, 3 } Equals: { 1, 2 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v2, Equals( v ) )|nwith expansion:|n { 1, 2 } Equals: { 1, 2, 3 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( empty, Equals( v ) )|nwith expansion:|n { } Equals: { 1, 2, 3 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v, Equals( empty ) )|nwith expansion:|n { 1, 2, 3 } Equals: { }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( v, UnorderedEquals( empty ) )|nwith expansion:|n { 1, 2, 3 } UnorderedEquals: { }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( empty, UnorderedEquals( v ) )|nwith expansion:|n { } UnorderedEquals: { 1, 2, 3 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( permuted, UnorderedEquals( v ) )|nwith expansion:|n { 1, 3 } UnorderedEquals: { 1, 2, 3 }|n'] +Matchers.tests.cpp:|nexpression failed|n CHECK_THAT( permuted, UnorderedEquals( v ) )|nwith expansion:|n { 3, 1 } UnorderedEquals: { 1, 2, 3 }|n'] +##teamcity[testFinished name='Vector matchers that fail' duration="{duration}"] +##teamcity[testStarted name='When checked exceptions are thrown they can be expected or unexpected'] +##teamcity[testFinished name='When checked exceptions are thrown they can be expected or unexpected' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown directly they are always failures'] +Exception.tests.cpp:|nunexpected exception with message:|n "unexpected exception"'] +##teamcity[testFinished name='When unchecked exceptions are thrown directly they are always failures' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown during a CHECK the test should continue'] +Exception.tests.cpp:|nunexpected exception with message:|n "expected exception"|n CHECK( thisThrows() == 0 )|nwith expansion:|n thisThrows() == 0|n'] +##teamcity[testFinished name='When unchecked exceptions are thrown during a CHECK the test should continue' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown during a REQUIRE the test should abort fail'] +Exception.tests.cpp:|nunexpected exception with message:|n "expected exception"|n REQUIRE( thisThrows() == 0 )|nwith expansion:|n thisThrows() == 0|n'] +##teamcity[testFinished name='When unchecked exceptions are thrown during a REQUIRE the test should abort fail' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown from functions they are always failures'] +Exception.tests.cpp:|nunexpected exception with message:|n "expected exception"|n CHECK( thisThrows() == 0 )|nwith expansion:|n thisThrows() == 0|n'] +##teamcity[testFinished name='When unchecked exceptions are thrown from functions they are always failures' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown from sections they are always failures'] +Exception.tests.cpp:|nunexpected exception with message:|n "unexpected exception"'] +##teamcity[testFinished name='When unchecked exceptions are thrown from sections they are always failures' duration="{duration}"] +##teamcity[testStarted name='When unchecked exceptions are thrown, but caught, they do not affect the test'] +##teamcity[testFinished name='When unchecked exceptions are thrown, but caught, they do not affect the test' duration="{duration}"] +##teamcity[testStarted name='X/level/0/a'] +##teamcity[testFinished name='X/level/0/a' duration="{duration}"] +##teamcity[testStarted name='X/level/0/b'] +##teamcity[testFinished name='X/level/0/b' duration="{duration}"] +##teamcity[testStarted name='X/level/1/a'] +##teamcity[testFinished name='X/level/1/a' duration="{duration}"] +##teamcity[testStarted name='X/level/1/b'] +##teamcity[testFinished name='X/level/1/b' duration="{duration}"] +##teamcity[testStarted name='XmlEncode'] +##teamcity[testFinished name='XmlEncode' duration="{duration}"] +##teamcity[testStarted name='XmlWriter writes boolean attributes as true/false'] +##teamcity[testFinished name='XmlWriter writes boolean attributes as true/false' duration="{duration}"] +##teamcity[testStarted name='analyse no analysis'] +##teamcity[testFinished name='analyse no analysis' duration="{duration}"] +##teamcity[testStarted name='array -> toString'] +##teamcity[testFinished name='array -> toString' duration="{duration}"] +##teamcity[testStarted name='benchmark function call'] +##teamcity[testFinished name='benchmark function call' duration="{duration}"] +##teamcity[testStarted name='boolean member'] +##teamcity[testFinished name='boolean member' duration="{duration}"] +##teamcity[testStarted name='checkedElse'] +##teamcity[testFinished name='checkedElse' duration="{duration}"] +##teamcity[testStarted name='checkedElse, failing'] +Misc.tests.cpp:|nexpression failed|n REQUIRE( testCheckedElse( false ) )|nwith expansion:|n false|n'] +##teamcity[testFinished name='checkedElse, failing' duration="{duration}"] +##teamcity[testStarted name='checkedIf'] +##teamcity[testFinished name='checkedIf' duration="{duration}"] +##teamcity[testStarted name='checkedIf, failing'] +Misc.tests.cpp:|nexpression failed|n REQUIRE( testCheckedIf( false ) )|nwith expansion:|n false|n'] +##teamcity[testFinished name='checkedIf, failing' duration="{duration}"] +##teamcity[testStarted name='classify_outliers'] +##teamcity[testFinished name='classify_outliers' duration="{duration}"] +##teamcity[testStarted name='comparisons between const int variables'] +##teamcity[testFinished name='comparisons between const int variables' duration="{duration}"] +##teamcity[testStarted name='comparisons between int variables'] +##teamcity[testFinished name='comparisons between int variables' duration="{duration}"] +##teamcity[testStarted name='convertToBits'] +##teamcity[testFinished name='convertToBits' duration="{duration}"] +##teamcity[testStarted name='empty tags are not allowed'] +##teamcity[testFinished name='empty tags are not allowed' duration="{duration}"] +##teamcity[testStarted name='erfc_inv'] +##teamcity[testFinished name='erfc_inv' duration="{duration}"] +##teamcity[testStarted name='estimate_clock_resolution'] +##teamcity[testFinished name='estimate_clock_resolution' duration="{duration}"] +##teamcity[testStarted name='even more nested SECTION tests'] +##teamcity[testFinished name='even more nested SECTION tests' duration="{duration}"] +##teamcity[testStarted name='first tag'] +##teamcity[testFinished name='first tag' duration="{duration}"] +##teamcity[testStarted name='has printf'] +##teamcity[testFinished name='has printf' duration="{duration}"] +##teamcity[testStarted name='is_unary_function'] +##teamcity[testFinished name='is_unary_function' duration="{duration}"] +##teamcity[testStarted name='just failure'] +Message.tests.cpp:|nexplicit failure with message:|n "Previous info should not be seen"'] +##teamcity[testFinished name='just failure' duration="{duration}"] +##teamcity[testStarted name='just failure after unscoped info'] +Message.tests.cpp:|nexplicit failure with message:|n "previous unscoped info SHOULD not be seen"'] +##teamcity[testFinished name='just failure after unscoped info' duration="{duration}"] +##teamcity[testStarted name='just info'] +##teamcity[testFinished name='just info' duration="{duration}"] +##teamcity[testStarted name='just unscoped info'] +##teamcity[testFinished name='just unscoped info' duration="{duration}"] +##teamcity[testStarted name='long long'] +##teamcity[testFinished name='long long' duration="{duration}"] +##teamcity[testStarted name='looped SECTION tests'] +Misc.tests.cpp:|nexpression failed|n CHECK( b > a )|nwith expansion:|n 0 > 1|n'] +Misc.tests.cpp:|nexpression failed|n CHECK( b > a )|nwith expansion:|n 1 > 1|n'] +##teamcity[testFinished name='looped SECTION tests' duration="{duration}"] +##teamcity[testStarted name='looped tests'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[0|] (1) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[1|] (1) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[3|] (3) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[4|] (5) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[6|] (13) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +Misc.tests.cpp:|nexpression failed with message:|n "Testing if fib|[7|] (21) is even"|n CHECK( ( fib|[i|] % 2 ) == 0 )|nwith expansion:|n 1 == 0|n'] +##teamcity[testFinished name='looped tests' duration="{duration}"] +##teamcity[testStarted name='make_unique reimplementation'] +##teamcity[testFinished name='make_unique reimplementation' duration="{duration}"] +##teamcity[testStarted name='mean'] +##teamcity[testFinished name='mean' duration="{duration}"] +##teamcity[testStarted name='measure'] +##teamcity[testFinished name='measure' duration="{duration}"] +##teamcity[testStarted name='mix info, unscoped info and warning'] +##teamcity[testFinished name='mix info, unscoped info and warning' duration="{duration}"] +##teamcity[testStarted name='more nested SECTION tests'] +Misc.tests.cpp:|nexpression failed|n REQUIRE( a == b )|nwith expansion:|n 1 == 2|n'] +##teamcity[testFinished name='more nested SECTION tests' duration="{duration}"] +##teamcity[testStarted name='nested SECTION tests'] +##teamcity[testFinished name='nested SECTION tests' duration="{duration}"] +##teamcity[testStarted name='non streamable - with conv. op'] +##teamcity[testFinished name='non streamable - with conv. op' duration="{duration}"] +##teamcity[testStarted name='non-copyable objects'] +##teamcity[testFinished name='non-copyable objects' duration="{duration}"] +##teamcity[testStarted name='normal_cdf'] +##teamcity[testFinished name='normal_cdf' duration="{duration}"] +##teamcity[testStarted name='normal_quantile'] +##teamcity[testFinished name='normal_quantile' duration="{duration}"] +##teamcity[testStarted name='not allowed'] +##teamcity[testFinished name='not allowed' duration="{duration}"] +##teamcity[testStarted name='not prints unscoped info from previous failures'] +Message.tests.cpp:|nexpression failed with message:|n "this SHOULD be seen"|n REQUIRE( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='not prints unscoped info from previous failures' duration="{duration}"] +##teamcity[testStarted name='null strings'] +##teamcity[testFinished name='null strings' duration="{duration}"] +##teamcity[testStarted name='null_ptr'] +##teamcity[testFinished name='null_ptr' duration="{duration}"] +##teamcity[testStarted name='pair > -> toString'] +##teamcity[testFinished name='pair > -> toString' duration="{duration}"] +##teamcity[testStarted name='parseEnums'] +##teamcity[testFinished name='parseEnums' duration="{duration}"] +##teamcity[testStarted name='pointer to class'] +##teamcity[testFinished name='pointer to class' duration="{duration}"] +##teamcity[testStarted name='print unscoped info if passing unscoped info is printed'] +##teamcity[testFinished name='print unscoped info if passing unscoped info is printed' duration="{duration}"] +##teamcity[testStarted name='prints unscoped info on failure'] +Message.tests.cpp:|nexpression failed with messages:|n "this SHOULD be seen"|n "this SHOULD also be seen"|n REQUIRE( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='prints unscoped info on failure' duration="{duration}"] +##teamcity[testStarted name='prints unscoped info only for the first assertion'] +Message.tests.cpp:|nexpression failed with message:|n "this SHOULD be seen only ONCE"|n CHECK( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='prints unscoped info only for the first assertion' duration="{duration}"] +##teamcity[testStarted name='random SECTION tests'] +##teamcity[testFinished name='random SECTION tests' duration="{duration}"] +##teamcity[testStarted name='replaceInPlace'] +##teamcity[testFinished name='replaceInPlace' duration="{duration}"] +##teamcity[testStarted name='resolution'] +##teamcity[testFinished name='resolution' duration="{duration}"] +##teamcity[testStarted name='run_for_at_least, chronometer'] +##teamcity[testFinished name='run_for_at_least, chronometer' duration="{duration}"] +##teamcity[testStarted name='run_for_at_least, int'] +##teamcity[testFinished name='run_for_at_least, int' duration="{duration}"] +##teamcity[testStarted name='second tag'] +##teamcity[testFinished name='second tag' duration="{duration}"] +##teamcity[testStarted name='send a single char to INFO'] +Misc.tests.cpp:|nexpression failed with message:|n "3"|n REQUIRE( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='send a single char to INFO' duration="{duration}"] +##teamcity[testStarted name='sends information to INFO'] +Message.tests.cpp:|nexpression failed with messages:|n "hi"|n "i := 7"|n REQUIRE( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='sends information to INFO' duration="{duration}"] +##teamcity[testStarted name='shortened hide tags are split apart'] +##teamcity[testFinished name='shortened hide tags are split apart' duration="{duration}"] +##teamcity[testStarted name='splitString'] +##teamcity[testFinished name='splitString' duration="{duration}"] +##teamcity[testStarted name='stacks unscoped info in loops'] +Message.tests.cpp:|nexpression failed with messages:|n "Count 1 to 3..."|n "1"|n "2"|n "3"|n CHECK( false )|nwith expansion:|n false|n'] +Message.tests.cpp:|nexpression failed with messages:|n "Count 4 to 6..."|n "4"|n "5"|n "6"|n CHECK( false )|nwith expansion:|n false|n'] +##teamcity[testFinished name='stacks unscoped info in loops' duration="{duration}"] +##teamcity[testStarted name='startsWith'] +##teamcity[testFinished name='startsWith' duration="{duration}"] +##teamcity[testStarted name='std::map is convertible string'] +##teamcity[testFinished name='std::map is convertible string' duration="{duration}"] +##teamcity[testStarted name='std::pair -> toString'] +##teamcity[testFinished name='std::pair -> toString' duration="{duration}"] +##teamcity[testStarted name='std::pair -> toString'] +##teamcity[testFinished name='std::pair -> toString' duration="{duration}"] +##teamcity[testStarted name='std::set is convertible string'] +##teamcity[testFinished name='std::set is convertible string' duration="{duration}"] +##teamcity[testStarted name='std::vector > -> toString'] +##teamcity[testFinished name='std::vector > -> toString' duration="{duration}"] +##teamcity[testStarted name='stringify ranges'] +##teamcity[testFinished name='stringify ranges' duration="{duration}"] +##teamcity[testStarted name='stringify( has_maker )'] +##teamcity[testFinished name='stringify( has_maker )' duration="{duration}"] +##teamcity[testStarted name='stringify( has_maker_and_operator )'] +##teamcity[testFinished name='stringify( has_maker_and_operator )' duration="{duration}"] +##teamcity[testStarted name='stringify( has_neither )'] +##teamcity[testFinished name='stringify( has_neither )' duration="{duration}"] +##teamcity[testStarted name='stringify( has_operator )'] +##teamcity[testFinished name='stringify( has_operator )' duration="{duration}"] +##teamcity[testStarted name='stringify( has_template_operator )'] +##teamcity[testFinished name='stringify( has_template_operator )' duration="{duration}"] +##teamcity[testStarted name='stringify( vectors )'] +##teamcity[testFinished name='stringify( vectors )' duration="{duration}"] +##teamcity[testStarted name='stringify( vectors )'] +##teamcity[testFinished name='stringify( vectors )' duration="{duration}"] +##teamcity[testStarted name='stringify( vectors )'] +##teamcity[testFinished name='stringify( vectors )' duration="{duration}"] +##teamcity[testStarted name='strlen3'] +##teamcity[testFinished name='strlen3' duration="{duration}"] +##teamcity[testStarted name='tables'] +##teamcity[testFinished name='tables' duration="{duration}"] +##teamcity[testStarted name='tags with dots in later positions are not parsed as hidden'] +##teamcity[testFinished name='tags with dots in later positions are not parsed as hidden' duration="{duration}"] +##teamcity[testStarted name='thrown std::strings are translated'] +Exception.tests.cpp:|nunexpected exception with message:|n "Why would you throw a std::string?"'] +##teamcity[testFinished name='thrown std::strings are translated' duration="{duration}"] +##teamcity[testStarted name='toString on const wchar_t const pointer returns the string contents'] +##teamcity[testFinished name='toString on const wchar_t const pointer returns the string contents' duration="{duration}"] +##teamcity[testStarted name='toString on const wchar_t pointer returns the string contents'] +##teamcity[testFinished name='toString on const wchar_t pointer returns the string contents' duration="{duration}"] +##teamcity[testStarted name='toString on wchar_t const pointer returns the string contents'] +##teamcity[testFinished name='toString on wchar_t const pointer returns the string contents' duration="{duration}"] +##teamcity[testStarted name='toString on wchar_t returns the string contents'] +##teamcity[testFinished name='toString on wchar_t returns the string contents' duration="{duration}"] +##teamcity[testStarted name='toString(enum class w/operator<<)'] +##teamcity[testFinished name='toString(enum class w/operator<<)' duration="{duration}"] +##teamcity[testStarted name='toString(enum class)'] +##teamcity[testFinished name='toString(enum class)' duration="{duration}"] +##teamcity[testStarted name='toString(enum w/operator<<)'] +##teamcity[testFinished name='toString(enum w/operator<<)' duration="{duration}"] +##teamcity[testStarted name='toString(enum)'] +##teamcity[testFinished name='toString(enum)' duration="{duration}"] +##teamcity[testStarted name='tuple<>'] +##teamcity[testFinished name='tuple<>' duration="{duration}"] +##teamcity[testStarted name='tuple'] +##teamcity[testFinished name='tuple' duration="{duration}"] +##teamcity[testStarted name='tuple'] +##teamcity[testFinished name='tuple' duration="{duration}"] +##teamcity[testStarted name='tuple<0,int,const char *>'] +##teamcity[testFinished name='tuple<0,int,const char *>' duration="{duration}"] +##teamcity[testStarted name='tuple'] +##teamcity[testFinished name='tuple' duration="{duration}"] +##teamcity[testStarted name='tuple,tuple<>,float>'] +##teamcity[testFinished name='tuple,tuple<>,float>' duration="{duration}"] +##teamcity[testStarted name='uniform samples'] +##teamcity[testFinished name='uniform samples' duration="{duration}"] +##teamcity[testStarted name='unique_ptr reimplementation: basic functionality'] +##teamcity[testFinished name='unique_ptr reimplementation: basic functionality' duration="{duration}"] +##teamcity[testStarted name='vec> -> toString'] +##teamcity[testFinished name='vec> -> toString' duration="{duration}"] +##teamcity[testStarted name='vector -> toString'] +##teamcity[testFinished name='vector -> toString' duration="{duration}"] +##teamcity[testStarted name='vector -> toString'] +##teamcity[testFinished name='vector -> toString' duration="{duration}"] +##teamcity[testStarted name='vector -> toString'] +##teamcity[testFinished name='vector -> toString' duration="{duration}"] +##teamcity[testStarted name='vector -> toString'] +##teamcity[testFinished name='vector -> toString' duration="{duration}"] +##teamcity[testStarted name='vectors can be sized and resized'] +##teamcity[testFinished name='vectors can be sized and resized' duration="{duration}"] +##teamcity[testStarted name='warmup'] +##teamcity[testFinished name='warmup' duration="{duration}"] +##teamcity[testStarted name='weighted_average_quantile'] +##teamcity[testFinished name='weighted_average_quantile' duration="{duration}"] +##teamcity[testStarted name='xmlentitycheck'] +##teamcity[testFinished name='xmlentitycheck' duration="{duration}"] +##teamcity[testSuiteFinished name=''] diff --git a/tests/SelfTest/Baselines/xml.sw.approved.txt b/tests/SelfTest/Baselines/xml.sw.approved.txt index 1fc5d63bda..c10acdeab9 100644 --- a/tests/SelfTest/Baselines/xml.sw.approved.txt +++ b/tests/SelfTest/Baselines/xml.sw.approved.txt @@ -11158,10 +11158,12 @@ Nor would this - config.reporterName == "console" + config.reporterSpecifications == std::vector<Catch::ConfigData::ReporterAndFile>{ {"console", {}} } - "console" == "console" + { { console, <default-output> } } +== +{ { console, <default-output> } } @@ -11290,20 +11292,28 @@ Nor would this
+ + result.errorMessage() := "" + - cli.parse({"test", "-r", "console"}) + result {?} + + result.errorMessage() := "" + - config.reporterName == "console" + config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } - "console" == "console" + { { console, <default-output> } } +== +{ { console, <default-output> } } @@ -11312,20 +11322,28 @@ Nor would this
+ + result.errorMessage() := "" + - cli.parse({"test", "-r", "xml"}) + result {?} + + result.errorMessage() := "" + - config.reporterName == "xml" + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } - "xml" == "xml" + { { xml, <default-output> } } +== +{ { xml, <default-output> } } @@ -11334,20 +11352,28 @@ Nor would this
+ + result.errorMessage() := "" + - cli.parse({"test", "--reporter", "junit"}) + result {?} + + result.errorMessage() := "" + - config.reporterName == "junit" + config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } - "junit" == "junit" + { { junit, <default-output> } } +== +{ { junit, <default-output> } } @@ -11355,21 +11381,89 @@ Nor would this
-
- +
+ - !(cli.parse({ "test", "-r", "xml", "-r", "junit" })) + !result - !{?} + true - + + + result.errorMessage(), ContainsSubstring("Unrecognized reporter") + + + "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" + + +
- +
-
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } + + + { { console, out.txt } } +== +{ { console, out.txt } } + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } + + + { { console, C:\Temp\out.txt } } +== +{ { console, C:\Temp\out.txt } } + + + +
+ +
+
+
!result @@ -11380,16 +11474,95 @@ Nor would this - result.errorMessage(), ContainsSubstring("Unrecognized reporter") + result.errorMessage(), ContainsSubstring("empty filename") - "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" + "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename"
+
+
+
+ + + cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) + + + {?} + + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } + + + { { xml, output.xml }, { junit, output-junit.xml } } +== +{ { xml, output.xml }, { junit, output-junit.xml } } + + + +
+ +
+ +
+
+
+
+ + + cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) + + + {?} + + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } + + + { { xml, output.xml }, { console, <default-output> } } +== +{ { xml, output.xml }, { console, <default-output> } } + + + +
+ +
+ +
+
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") + + + "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." + + + +
+ +
+ +
@@ -11681,7 +11854,7 @@ Nor would this - config.outputFilename == "filename.ext" + config.defaultOutputFilename == "filename.ext" "filename.ext" == "filename.ext" @@ -11703,7 +11876,7 @@ Nor would this - config.outputFilename == "filename.ext" + config.defaultOutputFilename == "filename.ext" "filename.ext" == "filename.ext" @@ -20561,6 +20734,6 @@ loose text artifact
- + diff --git a/tests/SelfTest/Baselines/xml.sw.multi.approved.txt b/tests/SelfTest/Baselines/xml.sw.multi.approved.txt new file mode 100644 index 0000000000..0491ec505f --- /dev/null +++ b/tests/SelfTest/Baselines/xml.sw.multi.approved.txt @@ -0,0 +1,20738 @@ + + + + + + + + + fptr == 0 + + + 0 == 0 + + + + + fptr == 0l + + + 0 == 0 + + + + + + + + y.v == 0 + + + 0 == 0 + + + + + 0 == y.v + + + 0 == 0 + + + + + + + + t1 == t2 + + + {?} == {?} + + + + + t1 != t2 + + + {?} != {?} + + + + + t1 < t2 + + + {?} < {?} + + + + + t1 > t2 + + + {?} > {?} + + + + + t1 <= t2 + + + {?} <= {?} + + + + + t1 >= t2 + + + {?} >= {?} + + + + + + + + + + uarr := "123" + + + sarr := "456" + + + + std::memcmp(uarr, "123", sizeof(uarr)) == 0 + + + 0 == 0 + + + + uarr := "123" + + + sarr := "456" + + + + std::memcmp(sarr, "456", sizeof(sarr)) == 0 + + + 0 == 0 + + + + + + + + +
+ +
+ +
+ + + + h1 == h2 + + + [1403 helper] == [1403 helper] + + + + + + + +This info message starts with a linebreak + + + +This warning message starts with a linebreak + + + + + + 1514 + + + +This would not be caught previously + + +Nor would this + + + + + + + std::is_same<TypeList<int>, TypeList<int>>::value + + + true + + + + + + + + spec.matches(*fakeTestCase("spec . char")) + + + true + + + + + spec.matches(*fakeTestCase("spec , char")) + + + true + + + + + !(spec.matches(*fakeTestCase(R"(spec \, char)"))) + + + !false + + + + + +
+ + + spec.matches(*fakeTestCase(R"(spec {a} char)")) + + + true + + + + + spec.matches(*fakeTestCase(R"(spec [a] char)")) + + + true + + + + + !(spec.matches(*fakeTestCase("differs but has similar tag", "[a]"))) + + + !false + + + +
+
+ + + spec.matches(*fakeTestCase(R"(spec \ char)")) + + + true + + + +
+ +
+ + + + counter < 7 + + + 3 < 7 + + + + + counter < 7 + + + 6 < 7 + + + + + + + + i != j + + + 1 != 3 + + + + + i != j + + + 1 != 4 + + + + + i != j + + + 2 != 3 + + + + + i != j + + + 2 != 4 + + + + + +
+ +
+
+ + + m + + + 1 + + + +
+
+ + + m + + + 2 + + + +
+
+ + + m + + + 3 + + + +
+ +
+ +
+ + + 1 + + + 1 + + + +
+ + + m + + + 2 + + + + + m + + + 3 + + + +
+ + + + m + + + 1 + + + + + m + + + 2 + + + + + m + + + 3 + + + + + +
+ +
+ + i := 1 + + + j := 3 + + + k := 5 + +
+ +
+ + i := 1 + + + j := 3 + + + k := 6 + +
+ +
+ + i := 1 + + + j := 4 + + + k := 5 + + + i := 1 + + + j := 4 + + + k := 6 + +
+ +
+ + i := 2 + + + j := 3 + + + k := 5 + +
+ +
+ + i := 2 + + + j := 3 + + + k := 6 + +
+ +
+ + i := 2 + + + j := 4 + + + k := 5 + + + i := 2 + + + j := 4 + + + k := 6 + + +
+ + + + m + + + 1 + + + + + n + + + 1 + + + + + m + + + 1 + + + + + n + + + 2 + + + + + m + + + 1 + + + + + n + + + 3 + + + + + m + + + 2 + + + + + n + + + 1 + + + + + m + + + 2 + + + + + n + + + 2 + + + + + m + + + 2 + + + + + n + + + 3 + + + + + m + + + 3 + + + + + n + + + 1 + + + + + m + + + 3 + + + + + n + + + 2 + + + + + m + + + 3 + + + + + n + + + 3 + + + + + + + + + + + + + + + + + smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) + + + 0.0 is within 2 ULPs of -4.9406564584124654e-324 ([-1.4821969375237396e-323, 4.9406564584124654e-324]) + + + + + smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) + + + 0.0 not is within 1 ULPs of -4.9406564584124654e-324 ([-9.8813129168249309e-324, -0.0000000000000000e+00]) + + + + + + + + smallest_non_zero, WithinULP( -smallest_non_zero, 2 ) + + + 0.0f is within 2 ULPs of -1.40129846e-45f ([-4.20389539e-45, 1.40129846e-45]) + + + + + smallest_non_zero, !WithinULP( -smallest_non_zero, 1 ) + + + 0.0f not is within 1 ULPs of -1.40129846e-45f ([-2.80259693e-45, -0.00000000e+00]) + + + + + +
+ + answer := 42 + + + expected exception + + +
+
+ + answer := 42 + + + + thisThrows() + + + thisThrows() + + + expected exception + + + +
+
+ + answer := 42 + + + + thisThrows() + + + thisThrows() + + + +
+ +
+ + + + 42 == f + + + 42 == {?} + + + + + + + + a == t + + + 3 == 3 + + + + + a == t + + + 3 == 3 + + + + + throws_int(true) + + + throws_int(true) + + + + + throws_int(true), int + + + throws_int(true), int + + + + + throws_int(false) + + + throws_int(false) + + + + + "aaa", Catch::Matchers::EndsWith("aaa") + + + "aaa" ends with: "aaa" + + + + + templated_tests<int>(3) + + + true + + + + + + + + f() == 0 + + + 1 == 0 + + + + + errno == 1 + + + 1 == 1 + + + + + + + dummy := 0 + + + + x == 4 + + + {?} == 4 + + + + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ + + + false != false + + + false != false + + + + + true != true + + + true != true + + + + + !true + + + false + + + + + !(true) + + + !true + + + + + !trueValue + + + false + + + + + !(trueValue) + + + !true + + + + + !(1 == 1) + + + false + + + + + !(1 == 1) + + + !(1 == 1) + + + + + + + + false == false + + + false == false + + + + + true == true + + + true == true + + + + + !false + + + true + + + + + !(false) + + + !false + + + + + !falseValue + + + true + + + + + !(falseValue) + + + !false + + + + + !(1 == 2) + + + true + + + + + !(1 == 2) + + + !(1 == 2) + + + + + +
+ + + is_true<true>::value == true + + + true == true + + + + + true == is_true<true>::value + + + true == true + + + +
+
+ + + is_true<false>::value == false + + + false == false + + + + + false == is_true<false>::value + + + false == false + + + +
+
+ + + !is_true<false>::value + + + true + + + +
+
+ + + !!is_true<true>::value + + + true + + + +
+
+ + + is_true<true>::value + + + true + + + + + !(is_true<false>::value) + + + !false + + + +
+ +
+ + + + x < y + + + 1 < 4 + + + + + y < z + + + 4 < 7 + + + + + x < z + + + 1 < 7 + + + + + x < y + + + 1 < 4 + + + + + y < z + + + 4 < 8 + + + + + x < z + + + 1 < 8 + + + + + x < y + + + 1 < 4 + + + + + y < z + + + 4 < 9 + + + + + x < z + + + 1 < 9 + + + + + x < y + + + 1 < 5 + + + + + y < z + + + 5 < 7 + + + + + x < z + + + 1 < 7 + + + + + x < y + + + 1 < 5 + + + + + y < z + + + 5 < 8 + + + + + x < z + + + 1 < 8 + + + + + x < y + + + 1 < 5 + + + + + y < z + + + 5 < 9 + + + + + x < z + + + 1 < 9 + + + + + x < y + + + 1 < 6 + + + + + y < z + + + 6 < 7 + + + + + x < z + + + 1 < 7 + + + + + x < y + + + 1 < 6 + + + + + y < z + + + 6 < 8 + + + + + x < z + + + 1 < 8 + + + + + x < y + + + 1 < 6 + + + + + y < z + + + 6 < 9 + + + + + x < z + + + 1 < 9 + + + + + x < y + + + 2 < 4 + + + + + y < z + + + 4 < 7 + + + + + x < z + + + 2 < 7 + + + + + x < y + + + 2 < 4 + + + + + y < z + + + 4 < 8 + + + + + x < z + + + 2 < 8 + + + + + x < y + + + 2 < 4 + + + + + y < z + + + 4 < 9 + + + + + x < z + + + 2 < 9 + + + + + x < y + + + 2 < 5 + + + + + y < z + + + 5 < 7 + + + + + x < z + + + 2 < 7 + + + + + x < y + + + 2 < 5 + + + + + y < z + + + 5 < 8 + + + + + x < z + + + 2 < 8 + + + + + x < y + + + 2 < 5 + + + + + y < z + + + 5 < 9 + + + + + x < z + + + 2 < 9 + + + + + x < y + + + 2 < 6 + + + + + y < z + + + 6 < 7 + + + + + x < z + + + 2 < 7 + + + + + x < y + + + 2 < 6 + + + + + y < z + + + 6 < 8 + + + + + x < z + + + 2 < 8 + + + + + x < y + + + 2 < 6 + + + + + y < z + + + 6 < 9 + + + + + x < z + + + 2 < 9 + + + + + x < y + + + 3 < 4 + + + + + y < z + + + 4 < 7 + + + + + x < z + + + 3 < 7 + + + + + x < y + + + 3 < 4 + + + + + y < z + + + 4 < 8 + + + + + x < z + + + 3 < 8 + + + + + x < y + + + 3 < 4 + + + + + y < z + + + 4 < 9 + + + + + x < z + + + 3 < 9 + + + + + x < y + + + 3 < 5 + + + + + y < z + + + 5 < 7 + + + + + x < z + + + 3 < 7 + + + + + x < y + + + 3 < 5 + + + + + y < z + + + 5 < 8 + + + + + x < z + + + 3 < 8 + + + + + x < y + + + 3 < 5 + + + + + y < z + + + 5 < 9 + + + + + x < z + + + 3 < 9 + + + + + x < y + + + 3 < 6 + + + + + y < z + + + 6 < 7 + + + + + x < z + + + 3 < 7 + + + + + x < y + + + 3 < 6 + + + + + y < z + + + 6 < 8 + + + + + x < z + + + 3 < 8 + + + + + x < y + + + 3 < 6 + + + + + y < z + + + 6 < 9 + + + + + x < z + + + 3 < 9 + + + + + + + + s == "world" + + + "hello" == "world" + + + + + + + + s == "hello" + + + "hello" == "hello" + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 1 + + + 0 == 1 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 1 + + + 0 == 1 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 1 + + + 0 == 1 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 1 + + + 0 == 1 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 0 + + + 0 == 0 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 0 + + + 0 == 0 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 0 + + + 0 == 0 + + + + + + + + Template_Fixture_2<TestType>::m_a.size() == 0 + + + 0 == 0 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() < 2 + + + 6 < 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() < 2 + + + 2 < 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() < 2 + + + 6 < 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() < 2 + + + 2 < 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() >= 2 + + + 6 >= 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() >= 2 + + + 2 >= 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() >= 2 + + + 6 >= 2 + + + + + + + + Template_Fixture_2<TestType>{}.m_a.size() >= 2 + + + 2 >= 2 + + + + + + + + Template_Fixture<TestType>::m_a == 2 + + + 1.0 == 2 + + + + + + + + Template_Fixture<TestType>::m_a == 2 + + + 1.0f == 2 + + + + + + + + Template_Fixture<TestType>::m_a == 2 + + + 1 == 2 + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1.0 == 1 + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1.0f == 1 + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1 == 1 + + + + + + + + Nttp_Fixture<V>::value == 0 + + + 1 == 0 + + + + + + + + Nttp_Fixture<V>::value == 0 + + + 3 == 0 + + + + + + + + Nttp_Fixture<V>::value == 0 + + + 6 == 0 + + + + + + + + Nttp_Fixture<V>::value > 0 + + + 1 > 0 + + + + + + + + Nttp_Fixture<V>::value > 0 + + + 3 > 0 + + + + + + + + Nttp_Fixture<V>::value > 0 + + + 6 > 0 + + + + + + + + m_a == 2 + + + 1 == 2 + + + + + + + + m_a == 1 + + + 1 == 1 + + + + + + + + x.size() == 0 + + + 0 == 0 + + + + + + + + x.size() == 0 + + + 0 == 0 + + + + + + + + x.size() == 0 + + + 0 == 0 + + + + + + + + x.size() == 0 + + + 0 == 0 + + + + + + + + x.size() > 0 + + + 42 > 0 + + + + + + + + x.size() > 0 + + + 9 > 0 + + + + + + + + x.size() > 0 + + + 42 > 0 + + + + + + + + x.size() > 0 + + + 9 > 0 + + + + + + + + d == 1.23_a + + + 1.23 == Approx( 1.23 ) + + + + + d != 1.22_a + + + 1.23 != Approx( 1.22 ) + + + + + -d == -1.23_a + + + -1.23 == Approx( -1.23 ) + + + + + d == 1.2_a .epsilon(.1) + + + 1.23 == Approx( 1.2 ) + + + + + d != 1.2_a .epsilon(.001) + + + 1.23 != Approx( 1.2 ) + + + + + d == 1_a .epsilon(.3) + + + 1.23 == Approx( 1.0 ) + + + + + +
+
+ +
+ +
+ + to infinity and beyond + + +
+ + + + &o1 == &o2 + + + 0x == 0x + + + + + o1 == o2 + + + {?} == {?} + + + + + + + + 104.0 != Approx(100.0) + + + 104.0 != Approx( 100.0 ) + + + + + 104.0 == Approx(100.0).margin(5) + + + 104.0 == Approx( 100.0 ) + + + + + 104.0 == Approx(100.0).margin(4) + + + 104.0 == Approx( 100.0 ) + + + + + 104.0 != Approx(100.0).margin(3) + + + 104.0 != Approx( 100.0 ) + + + + + 100.3 != Approx(100.0) + + + 100.3 != Approx( 100.0 ) + + + + + 100.3 == Approx(100.0).margin(0.5) + + + 100.3 == Approx( 100.0 ) + + + + + + + + + + + i++ == 7 + + + 7 == 7 + + + + + i++ == 8 + + + 8 == 8 + + + + + + + + 1 == 1 + + + 1 == 1 + + + + + {Unknown expression after the reported line} + + + {Unknown expression after the reported line} + + + unexpected exception + + + + + + + + + + + Approx(0).margin(0) + + + Approx(0).margin(0) + + + + + Approx(0).margin(1234656) + + + Approx(0).margin(1234656) + + + + + Approx(0).margin(-2), std::domain_error + + + Approx(0).margin(-2), std::domain_error + + + + + Approx(0).epsilon(0) + + + Approx(0).epsilon(0) + + + + + Approx(0).epsilon(1) + + + Approx(0).epsilon(1) + + + + + Approx(0).epsilon(-0.001), std::domain_error + + + Approx(0).epsilon(-0.001), std::domain_error + + + + + Approx(0).epsilon(1.0001), std::domain_error + + + Approx(0).epsilon(1.0001), std::domain_error + + + + + + + + 0.25f == Approx(0.0f).margin(0.25f) + + + 0.25f == Approx( 0.0 ) + + + + + 0.0f == Approx(0.25f).margin(0.25f) + + + 0.0f == Approx( 0.25 ) + + + + + 0.5f == Approx(0.25f).margin(0.25f) + + + 0.5f == Approx( 0.25 ) + + + + + 245.0f == Approx(245.25f).margin(0.25f) + + + 245.0f == Approx( 245.25 ) + + + + + 245.5f == Approx(245.25f).margin(0.25f) + + + 245.5f == Approx( 245.25 ) + + + + + + + + divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) + + + 3.1428571429 == Approx( 3.141 ) + + + + + divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) + + + 3.1428571429 != Approx( 3.141 ) + + + + + + + + d != Approx( 1.231 ) + + + 1.23 != Approx( 1.231 ) + + + + + d == Approx( 1.231 ).epsilon( 0.1 ) + + + 1.23 == Approx( 1.231 ) + + + + + + + + 1.23f == Approx( 1.23f ) + + + 1.23f == Approx( 1.2300000191 ) + + + + + 0.0f == Approx( 0.0f ) + + + 0.0f == Approx( 0.0 ) + + + + + + + + 1 == Approx( 1 ) + + + 1 == Approx( 1.0 ) + + + + + 0 == Approx( 0 ) + + + 0 == Approx( 0.0 ) + + + + + + + + 1.0f == Approx( 1 ) + + + 1.0f == Approx( 1.0 ) + + + + + 0 == Approx( dZero) + + + 0 == Approx( 0.0 ) + + + + + 0 == Approx( dSmall ).margin( 0.001 ) + + + 0 == Approx( 0.00001 ) + + + + + 1.234f == Approx( dMedium ) + + + 1.234f == Approx( 1.234 ) + + + + + dMedium == Approx( 1.234f ) + + + 1.234 == Approx( 1.2339999676 ) + + + + + +
+ + + 1, Predicate<int>( alwaysTrue, "always true" ) + + + 1 matches predicate: "always true" + + + + + 1, !Predicate<int>( alwaysFalse, "always false" ) + + + 1 not matches predicate: "always false" + + + +
+
+ + + "Hello olleH", Predicate<std::string>( []( std::string const& str ) -> bool { return str.front() == str.back(); }, "First and last character should be equal" ) + + + "Hello olleH" matches predicate: "First and last character should be equal" + + + + + "This wouldn't pass", !Predicate<std::string>( []( std::string const& str ) -> bool { return str.front() == str.back(); } ) + + + "This wouldn't pass" not matches undescribed predicate + + + +
+ +
+ + + + lhs | rhs + + + Val: 1 | Val: 2 + + + + + !(lhs & rhs) + + + !(Val: 1 & Val: 2) + + + + + HasBitOperators{ 1 } & HasBitOperators{ 1 } + + + Val: 1 & Val: 1 + + + + + lhs ^ rhs + + + Val: 1 ^ Val: 2 + + + + + !(lhs ^ lhs) + + + !(Val: 1 ^ Val: 1) + + + + + + + + true + + + true + + +
+ + + true + + + true + + +
+ + + true + + + true + + + +
+ +
+ + + true + + + true + + +
+ + + true + + + true + + +
+ + + true + + + true + + + +
+ +
+ +
+ +
+ + + a, Contains(1) + + + { 1, 2, 3 } contains element 1 + + + + + b, Contains(1) + + + { 0, 1, 2 } contains element 1 + + + + + c, !Contains(1) + + + { 4, 5, 6 } not contains element 1 + + + +
+
+ + + a, Contains(0, close_enough) + + + { 1, 2, 3 } contains element 0 + + + + + b, Contains(0, close_enough) + + + { 0, 1, 2 } contains element 0 + + + + + c, !Contains(0, close_enough) + + + { 4, 5, 6 } not contains element 0 + + + +
+
+ + + a, Contains(4, [](auto&& lhs, size_t sz) { return lhs.size() == sz; }) + + + { "abc", "abcd", "abcde" } contains element 4 + + + +
+
+ + + in, Contains(1) + + + { 1, 2, 3, 4, 5 } contains element 1 + + + + + in, !Contains(8) + + + { 1, 2, 3, 4, 5 } not contains element 8 + + + +
+
+ + + in, Contains(MoveOnlyTestElement{ 2 }) + + + { 1, 2, 3 } contains element 2 + + + + + in, !Contains(MoveOnlyTestElement{ 9 }) + + + { 1, 2, 3 } not contains element 9 + + + +
+
+ + + in, Contains(Catch::Matchers::WithinAbs(0.5, 0.5)) + + + { 1.0, 2.0, 3.0, 0.0 } contains element matching is within 0.5 of 0.5 + + + +
+ +
+ +
+ + + empty_array, IsEmpty() + + + { } is empty + + + + + non_empty_array, !IsEmpty() + + + { 0.0 } not is empty + + + + + empty_vec, IsEmpty() + + + { } is empty + + + + + non_empty_vec, !IsEmpty() + + + { 'a', 'b', 'c' } not is empty + + + + + inner_lists_are_empty, !IsEmpty() + + + { { } } not is empty + + + + + inner_lists_are_empty.front(), IsEmpty() + + + { } is empty + + + +
+
+ + + has_empty{}, !IsEmpty() + + + {?} not is empty + + + +
+
+ + + unrelated::ADL_empty{}, IsEmpty() + + + {?} is empty + + + +
+ +
+ + + a := 1 + + + b := 2 + + + c := 3 + + + a + b := 3 + + + a+b := 3 + + + c > b := true + + + a == 1 := true + + + + + + std::vector<int>{1, 2, 3}[0, 1, 2] := 3 + + + std::vector<int>{1, 2, 3}[(0, 1)] := 2 + + + std::vector<int>{1, 2, 3}[0] := 1 + + + (helper_1436<int, int>{12, -12}) := { 12, -12 } + + + (helper_1436<int, int>(-12, 12)) := { -12, 12 } + + + (1, 2) := 2 + + + (2, 3) := 3 + + + + + + ("comma, in string", "escaped, \", ") := "escaped, ", " + + + "single quote in string,'," := "single quote in string,'," + + + "some escapes, \\,\\\\" := "some escapes, \,\\" + + + "some, ), unmatched, } prenheses {[<" := "some, ), unmatched, } prenheses {[<" + + + '"' := '"' + + + '\'' := ''' + + + ',' := ',' + + + '}' := '}' + + + ')' := ')' + + + '(' := '(' + + + '{' := '{' + + + + +
+ + i := 2 + + + + true + + + true + + + +
+
+ + 3 + + + + true + + + true + + + +
+ +
+ +
+ + + eq( "", "" ) + + + true + + + + + !(eq( "", "a" )) + + + !false + + + +
+
+ + + eq( "a", "a" ) + + + true + + + + + eq( "a", "A" ) + + + true + + + + + eq( "A", "a" ) + + + true + + + + + eq( "A", "A" ) + + + true + + + + + !(eq( "a", "b" )) + + + !false + + + + + !(eq( "a", "B" )) + + + !false + + + +
+ +
+ +
+ + + lt( "", "a" ) + + + true + + + + + !(lt( "a", "a" )) + + + !false + + + + + !(lt( "", "" )) + + + !false + + + +
+
+ + + lt( "a", "b" ) + + + true + + + + + lt( "a", "B" ) + + + true + + + + + lt( "A", "b" ) + + + true + + + + + lt( "A", "B" ) + + + true + + + +
+ +
+ +
+ + + tab == '\t' + + + '\t' == '\t' + + + + + newline == '\n' + + + '\n' == '\n' + + + + + carr_return == '\r' + + + '\r' == '\r' + + + + + form_feed == '\f' + + + '\f' == '\f' + + + +
+
+ + + space == ' ' + + + ' ' == ' ' + + + + + c == chars[i] + + + 'a' == 'a' + + + + + c == chars[i] + + + 'z' == 'z' + + + + + c == chars[i] + + + 'A' == 'A' + + + + + c == chars[i] + + + 'Z' == 'Z' + + + +
+
+ + + null_terminator == '\0' + + + 0 == 0 + + + + + c == i + + + 2 == 2 + + + + + c == i + + + 3 == 3 + + + + + c == i + + + 4 == 4 + + + + + c == i + + + 5 == 5 + + + +
+ +
+ + + + name.empty() + + + true + + + + + name == "foo" + + + "foo" == "foo" + + + + + +
+ + + !(parse_result) + + + !{?} + + + +
+
+ + + parse_result + + + {?} + + + + + res == std::vector<std::string>{ "aaa", "bbb" } + + + { "aaa", "bbb" } == { "aaa", "bbb" } + + + +
+ +
+ + + + 1, ( MatcherA() && MatcherB() ) && MatcherC() + + + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) + + + + + 1, MatcherA() && ( MatcherB() && MatcherC() ) + + + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 ) + + + + + 1, ( MatcherA() && MatcherB() ) && ( MatcherC() && MatcherD() ) + + + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 and equals: (T) 1 and equals: true ) + + + + + + + + 1, ( MatcherA() || MatcherB() ) || MatcherC() + + + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) + + + + + 1, MatcherA() || ( MatcherB() || MatcherC() ) + + + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 ) + + + + + 1, ( MatcherA() || MatcherB() ) || ( MatcherC() || MatcherD() ) + + + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 or equals: (T) 1 or equals: true ) + + + + + + + + 0, !MatcherA() + + + 0 not equals: (int) 1 or (float) 1.0f + + + + + 1, !!MatcherA() + + + 1 equals: (int) 1 or (float) 1.0f + + + + + 0, !!!MatcherA() + + + 0 not equals: (int) 1 or (float) 1.0f + + + + + 1, !!!!MatcherA() + + + 1 equals: (int) 1 or (float) 1.0f + + + + + + + + + + + 1, MatcherA() || MatcherB() + + + 1 ( equals: (int) 1 or (float) 1.0f or equals: (long long) 1 ) + + + + + 1, MatcherA() && MatcherB() + + + 1 ( equals: (int) 1 or (float) 1.0f and equals: (long long) 1 ) + + + + + 1, MatcherA() || !MatcherB() + + + 1 ( equals: (int) 1 or (float) 1.0f or not equals: (long long) 1 ) + + + + + + + + vec, Predicate<std::vector<int>>( []( auto const& v ) { return std::all_of( v.begin(), v.end(), []( int elem ) { return elem % 2 == 1; } ); }, "All elements are odd" ) && !EqualsRange( a ) + + + { 1, 3, 5 } ( matches predicate: "All elements are odd" and not Equals: { 5, 3, 1 } ) + + + + + str, StartsWith( "foo" ) && EqualsRange( arr ) && EndsWith( "bar" ) + + + "foobar" ( starts with: "foo" and Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and ends with: "bar" ) + + + + + str, StartsWith( "foo" ) && !EqualsRange( bad_arr ) && EndsWith( "bar" ) + + + "foobar" ( starts with: "foo" and not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and ends with: "bar" ) + + + + + str, EqualsRange( arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) + + + "foobar" ( Equals: { 'f', 'o', 'o', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) + + + + + str, !EqualsRange( bad_arr ) && StartsWith( "foo" ) && EndsWith( "bar" ) + + + "foobar" ( not Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } and starts with: "foo" and ends with: "bar" ) + + + + + str, EqualsRange( bad_arr ) || ( StartsWith( "foo" ) && EndsWith( "bar" ) ) + + + "foobar" ( Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } or ( starts with: "foo" and ends with: "bar" ) ) + + + + + str, ( StartsWith( "foo" ) && EndsWith( "bar" ) ) || EqualsRange( bad_arr ) + + + "foobar" ( ( starts with: "foo" and ends with: "bar" ) or Equals: { 'o', 'o', 'f', 'b', 'a', 'r' } ) + + + + + + + + container, EqualsRange( a ) || EqualsRange( b ) || EqualsRange( c ) + + + { 1, 2, 3 } ( Equals: { 1, 2, 3 } or Equals: { 0, 1, 2 } or Equals: { 4, 5, 6 } ) + + + + + + + + std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} + + + std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} + + + + + std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} + + + std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} + + + + + std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} + + + std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} + + + + + std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} + + + std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} + + + + + std::vector<int>{1, 2} == std::vector<int>{1, 2} + + + { 1, 2 } == { 1, 2 } + + + + + std::vector<int>{1, 2} == std::vector<int>{1, 2} + + + { 1, 2 } == { 1, 2 } + + + + + !(std::vector<int>{1, 2} == std::vector<int>{1, 2, 3}) + + + !({ 1, 2 } == { 1, 2, 3 }) + + + + + !(std::vector<int>{1, 2} == std::vector<int>{1, 2, 3}) + + + !({ 1, 2 } == { 1, 2, 3 }) + + + + + std::vector<int>{1, 2} == std::vector<int>{1, 2} + + + { 1, 2 } == { 1, 2 } + + + + + std::vector<int>{1, 2} == std::vector<int>{1, 2} + + + { 1, 2 } == { 1, 2 } + + + + + true + + + true + + + + + std::vector<int>{1, 2} == std::vector<int>{1, 2} + + + { 1, 2 } == { 1, 2 } + + + + + + + + a + + + 0x + + + + + a == &foo + + + 0x == 0x + + + + + + + + SimplePcg32{} == SimplePcg32{} + + + {?} == {?} + + + + + SimplePcg32{ 0 } != SimplePcg32{} + + + {?} != {?} + + + + + !(SimplePcg32{ 1 } == SimplePcg32{ 2 }) + + + !({?} == {?}) + + + + + !(SimplePcg32{ 1 } != SimplePcg32{ 1 }) + + + !({?} != {?}) + + + + + + + + td == Approx(10.0) + + + StrongDoubleTypedef(10) == Approx( 10.0 ) + + + + + Approx(10.0) == td + + + Approx( 10.0 ) == StrongDoubleTypedef(10) + + + + + td != Approx(11.0) + + + StrongDoubleTypedef(10) != Approx( 11.0 ) + + + + + Approx(11.0) != td + + + Approx( 11.0 ) != StrongDoubleTypedef(10) + + + + + td <= Approx(10.0) + + + StrongDoubleTypedef(10) <= Approx( 10.0 ) + + + + + td <= Approx(11.0) + + + StrongDoubleTypedef(10) <= Approx( 11.0 ) + + + + + Approx(10.0) <= td + + + Approx( 10.0 ) <= StrongDoubleTypedef(10) + + + + + Approx(9.0) <= td + + + Approx( 9.0 ) <= StrongDoubleTypedef(10) + + + + + td >= Approx(9.0) + + + StrongDoubleTypedef(10) >= Approx( 9.0 ) + + + + + td >= Approx(td) + + + StrongDoubleTypedef(10) >= Approx( 10.0 ) + + + + + Approx(td) >= td + + + Approx( 10.0 ) >= StrongDoubleTypedef(10) + + + + + Approx(11.0) >= td + + + Approx( 11.0 ) >= StrongDoubleTypedef(10) + + + + + + + + 54 == 6*9 + + + 54 == 54 + + + + + + + + ( -1 > 2u ) + + + true + + + + + -1 > 2u + + + -1 > 2 + + + + + ( 2u < -1 ) + + + true + + + + + 2u < -1 + + + 2 < -1 + + + + + ( minInt > 2u ) + + + true + + + + + minInt > 2u + + + -2147483648 > 2 + + + + + + + + i == 1 + + + 1 == 1 + + + + + ui == 2 + + + 2 == 2 + + + + + l == 3 + + + 3 == 3 + + + + + ul == 4 + + + 4 == 4 + + + + + c == 5 + + + 5 == 5 + + + + + uc == 6 + + + 6 == 6 + + + + + 1 == i + + + 1 == 1 + + + + + 2 == ui + + + 2 == 2 + + + + + 3 == l + + + 3 == 3 + + + + + 4 == ul + + + 4 == 4 + + + + + 5 == c + + + 5 == 5 + + + + + 6 == uc + + + 6 == 6 + + + + + (std::numeric_limits<uint32_t>::max)() > ul + + + 4294967295 (0x) > 4 + + + + + +
+ + + !(matcher.match( 1 )) + + + !false + + + + + first.matchCalled + + + true + + + + + !second.matchCalled + + + true + + + +
+
+ + + matcher.match( 1 ) + + + true + + + + + first.matchCalled + + + true + + + + + !second.matchCalled + + + true + + + +
+ +
+ +
+ + + !(matcher.match( 1 )) + + + !false + + + + + first.matchCalled + + + true + + + + + !second.matchCalled + + + true + + + +
+
+ + + matcher.match( 1 ) + + + true + + + + + first.matchCalled + + + true + + + + + !second.matchCalled + + + true + + + +
+ +
+ + + + testStringForMatching(), ContainsSubstring( "not there", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" contains: "not there" (case insensitive) + + + + + testStringForMatching(), ContainsSubstring( "STRING" ) + + + "this string contains 'abc' as a substring" contains: "STRING" + + + + + +
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + elem % 2 == 1 + + + 1 == 1 + + + +
+
+ + + call_count == 1 + + + 1 == 1 + + + + + make_data().size() == test_count + + + 6 == 6 + + + +
+ +
+ + + + throwCustom() + + + throwCustom() + + + custom exception - not std + + + + + + + + throwCustom(), std::exception + + + throwCustom(), std::exception + + + custom exception - not std + + + + + + + custom std exception + + + + + + + 101.000001 != Approx(100).epsilon(0.01) + + + 101.000001 != Approx( 100.0 ) + + + + + std::pow(10, -5) != Approx(std::pow(10, -7)) + + + 0.00001 != Approx( 0.0000001 ) + + + + + + + + enumInfo->lookup(0) == "Value1" + + + Value1 == "Value1" + + + + + enumInfo->lookup(1) == "Value2" + + + Value2 == "Value2" + + + + + enumInfo->lookup(3) == "{** unexpected enum value **}" + + + {** unexpected enum value **} +== +"{** unexpected enum value **}" + + + + + + + + Catch::TestCaseInfo( "", { "fake test name", "[]" }, dummySourceLineInfo ) + + + Catch::TestCaseInfo( "", { "fake test name", "[]" }, dummySourceLineInfo ) + + + + + + + + testStringForMatching(), EndsWith( "Substring" ) + + + "this string contains 'abc' as a substring" ends with: "Substring" + + + + + testStringForMatching(), EndsWith( "this", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" ends with: "this" (case insensitive) + + + + + + + + stringify( EnumClass3::Value1 ) == "Value1" + + + "Value1" == "Value1" + + + + + stringify( EnumClass3::Value2 ) == "Value2" + + + "Value2" == "Value2" + + + + + stringify( EnumClass3::Value3 ) == "Value3" + + + "Value3" == "Value3" + + + + + stringify( EnumClass3::Value4 ) == "{** unexpected enum value **}" + + + "{** unexpected enum value **}" +== +"{** unexpected enum value **}" + + + + + stringify( ec3 ) == "Value2" + + + "Value2" == "Value2" + + + + + + + + stringify( Bikeshed::Colours::Red ) == "Red" + + + "Red" == "Red" + + + + + stringify( Bikeshed::Colours::Blue ) == "Blue" + + + "Blue" == "Blue" + + + + + + + + 101.01 != Approx(100).epsilon(0.01) + + + 101.01 != Approx( 100.0 ) + + + + + + + + data.int_seven == 6 + + + 7 == 6 + + + + + data.int_seven == 8 + + + 7 == 8 + + + + + data.int_seven == 0 + + + 7 == 0 + + + + + data.float_nine_point_one == Approx( 9.11f ) + + + 9.1f == Approx( 9.1099996567 ) + + + + + data.float_nine_point_one == Approx( 9.0f ) + + + 9.1f == Approx( 9.0 ) + + + + + data.float_nine_point_one == Approx( 1 ) + + + 9.1f == Approx( 1.0 ) + + + + + data.float_nine_point_one == Approx( 0 ) + + + 9.1f == Approx( 0.0 ) + + + + + data.double_pi == Approx( 3.1415 ) + + + 3.1415926535 == Approx( 3.1415 ) + + + + + data.str_hello == "goodbye" + + + "hello" == "goodbye" + + + + + data.str_hello == "hell" + + + "hello" == "hell" + + + + + data.str_hello == "hello1" + + + "hello" == "hello1" + + + + + data.str_hello.size() == 6 + + + 5 == 6 + + + + + x == Approx( 1.301 ) + + + 1.3 == Approx( 1.301 ) + + + + + + + + data.int_seven == 7 + + + 7 == 7 + + + + + data.float_nine_point_one == Approx( 9.1f ) + + + 9.1f == Approx( 9.1000003815 ) + + + + + data.double_pi == Approx( 3.1415926535 ) + + + 3.1415926535 == Approx( 3.1415926535 ) + + + + + data.str_hello == "hello" + + + "hello" == "hello" + + + + + "hello" == data.str_hello + + + "hello" == "hello" + + + + + data.str_hello.size() == 5 + + + 5 == 5 + + + + + x == Approx( 1.3 ) + + + 1.3 == Approx( 1.3 ) + + + + + + + + testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) + + + "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" + + + + + testStringForMatching(), Equals( "this string contains 'ABC' as a substring", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" (case insensitive) + + + + + + + + testStringForMatching(), Equals( "this string contains 'ABC' as a substring" ) + + + "this string contains 'abc' as a substring" equals: "this string contains 'ABC' as a substring" + + + + + testStringForMatching(), Equals( "something else", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" equals: "something else" (case insensitive) + + + + + + + + ::Catch::Detail::stringify(WhatException{}) == "This exception has overridden what() method" + + + "This exception has overridden what() method" +== +"This exception has overridden what() method" + + + + + ::Catch::Detail::stringify(OperatorException{}) == "OperatorException" + + + "OperatorException" == "OperatorException" + + + + + ::Catch::Detail::stringify(StringMakerException{}) == "StringMakerException" + + + "StringMakerException" +== +"StringMakerException" + + + + + +
+ + + doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } + + + doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } + + + + + doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } + + + doesNotThrow(), SpecialException, ExceptionMatcher{ 1 } + + + +
+
+ + + throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } + + + throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } + + + Unknown exception + + + + + throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } + + + throwsAsInt( 1 ), SpecialException, ExceptionMatcher{ 1 } + + + Unknown exception + + + +
+
+ + + throwsSpecialException( 3 ), SpecialException, ExceptionMatcher{ 1 } + + + SpecialException::what special exception has value of 1 + + + + + throwsSpecialException( 4 ), SpecialException, ExceptionMatcher{ 1 } + + + SpecialException::what special exception has value of 1 + + + +
+ +
+ + + + throwsSpecialException( 1 ), SpecialException, ExceptionMatcher{ 1 } + + + SpecialException::what special exception has value of 1 + + + + + throwsSpecialException( 2 ), SpecialException, ExceptionMatcher{ 2 } + + + SpecialException::what special exception has value of 2 + + + + + +
+ + + thisThrows(), "expected exception" + + + "expected exception" equals: "expected exception" + + + +
+
+ + + thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) + + + "expected exception" equals: "expected exception" (case insensitive) + + + +
+
+ + + thisThrows(), StartsWith( "expected" ) + + + "expected exception" starts with: "expected" + + + + + thisThrows(), EndsWith( "exception" ) + + + "expected exception" ends with: "exception" + + + + + thisThrows(), ContainsSubstring( "except" ) + + + "expected exception" contains: "except" + + + + + thisThrows(), ContainsSubstring( "exCept", Catch::CaseSensitive::No ) + + + "expected exception" contains: "except" (case insensitive) + + + +
+ +
+ + + + throwsDerivedException(), DerivedException, Message( "DerivedException::what" ) + + + DerivedException::what exception message matches "DerivedException::what" + + + + + throwsDerivedException(), DerivedException, !Message( "derivedexception::what" ) + + + DerivedException::what not exception message matches "derivedexception::what" + + + + + throwsSpecialException( 2 ), SpecialException, !Message( "DerivedException::what" ) + + + SpecialException::what not exception message matches "DerivedException::what" + + + + + throwsSpecialException( 2 ), SpecialException, Message( "SpecialException::what" ) + + + SpecialException::what exception message matches "SpecialException::what" + + + + + + + + thisThrows(), std::string + + + thisThrows(), std::string + + + expected exception + + + + + thisDoesntThrow(), std::domain_error + + + thisDoesntThrow(), std::domain_error + + + + + thisThrows() + + + thisThrows() + + + expected exception + + + + + + + This is a failure + + + + + + + + + + This is a failure + + + This message appears in the output + + + + + + + Factorial(0) == 1 + + + 1 == 1 + + + + + Factorial(1) == 1 + + + 1 == 1 + + + + + Factorial(2) == 2 + + + 2 == 2 + + + + + Factorial(3) == 6 + + + 6 == 6 + + + + + Factorial(10) == 3628800 + + + 3628800 (0x) == 3628800 (0x) + + + + + +
+ + + 10., WithinRel( 11.1, 0.1 ) + + + 10.0 and 11.1 are within 10% of each other + + + + + 10., !WithinRel( 11.2, 0.1 ) + + + 10.0 not and 11.2 are within 10% of each other + + + + + 1., !WithinRel( 0., 0.99 ) + + + 1.0 not and 0 are within 99% of each other + + + + + -0., WithinRel( 0. ) + + + -0.0 and 0 are within 2.22045e-12% of each other + + +
+ + + v1, WithinRel( v2 ) + + + 0.0 and 2.22507e-308 are within 2.22045e-12% of each other + + + +
+ +
+
+ + + 1., WithinAbs( 1., 0 ) + + + 1.0 is within 0.0 of 1.0 + + + + + 0., WithinAbs( 1., 1 ) + + + 0.0 is within 1.0 of 1.0 + + + + + 0., !WithinAbs( 1., 0.99 ) + + + 0.0 not is within 0.99 of 1.0 + + + + + 0., !WithinAbs( 1., 0.99 ) + + + 0.0 not is within 0.99 of 1.0 + + + + + 11., !WithinAbs( 10., 0.5 ) + + + 11.0 not is within 0.5 of 10.0 + + + + + 10., !WithinAbs( 11., 0.5 ) + + + 10.0 not is within 0.5 of 11.0 + + + + + -10., WithinAbs( -10., 0.5 ) + + + -10.0 is within 0.5 of -10.0 + + + + + -10., WithinAbs( -9.6, 0.5 ) + + + -10.0 is within 0.5 of -9.6 + + + +
+
+ + + 1., WithinULP( 1., 0 ) + + + 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) + + + + + nextafter( 1., 2. ), WithinULP( 1., 1 ) + + + 1.0 is within 1 ULPs of 1.0000000000000000e+00 ([9.9999999999999989e-01, 1.0000000000000002e+00]) + + + + + 0., WithinULP( nextafter( 0., 1. ), 1 ) + + + 0.0 is within 1 ULPs of 4.9406564584124654e-324 ([0.0000000000000000e+00, 9.8813129168249309e-324]) + + + + + 1., WithinULP( nextafter( 1., 0. ), 1 ) + + + 1.0 is within 1 ULPs of 9.9999999999999989e-01 ([9.9999999999999978e-01, 1.0000000000000000e+00]) + + + + + 1., !WithinULP( nextafter( 1., 2. ), 0 ) + + + 1.0 not is within 0 ULPs of 1.0000000000000002e+00 ([1.0000000000000002e+00, 1.0000000000000002e+00]) + + + + + 1., WithinULP( 1., 0 ) + + + 1.0 is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) + + + + + -0., WithinULP( 0., 0 ) + + + -0.0 is within 0 ULPs of 0.0000000000000000e+00 ([0.0000000000000000e+00, 0.0000000000000000e+00]) + + + +
+
+ + + 1., WithinAbs( 1., 0.5 ) || WithinULP( 2., 1 ) + + + 1.0 ( is within 0.5 of 1.0 or is within 1 ULPs of 2.0000000000000000e+00 ([1.9999999999999998e+00, 2.0000000000000004e+00]) ) + + + + + 1., WithinAbs( 2., 0.5 ) || WithinULP( 1., 0 ) + + + 1.0 ( is within 0.5 of 2.0 or is within 0 ULPs of 1.0000000000000000e+00 ([1.0000000000000000e+00, 1.0000000000000000e+00]) ) + + + + + 0.0001, WithinAbs( 0., 0.001 ) || WithinRel( 0., 0.1 ) + + + 0.0001 ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) + + + +
+
+ + + WithinAbs( 1., 0. ) + + + WithinAbs( 1., 0. ) + + + + + WithinAbs( 1., -1. ), std::domain_error + + + WithinAbs( 1., -1. ), std::domain_error + + + + + WithinULP( 1., 0 ) + + + WithinULP( 1., 0 ) + + + + + WithinRel( 1., 0. ) + + + WithinRel( 1., 0. ) + + + + + WithinRel( 1., -0.2 ), std::domain_error + + + WithinRel( 1., -0.2 ), std::domain_error + + + + + WithinRel( 1., 1. ), std::domain_error + + + WithinRel( 1., 1. ), std::domain_error + + + +
+ +
+ +
+ + + 10.f, WithinRel( 11.1f, 0.1f ) + + + 10.0f and 11.1 are within 10% of each other + + + + + 10.f, !WithinRel( 11.2f, 0.1f ) + + + 10.0f not and 11.2 are within 10% of each other + + + + + 1.f, !WithinRel( 0.f, 0.99f ) + + + 1.0f not and 0 are within 99% of each other + + + + + -0.f, WithinRel( 0.f ) + + + -0.0f and 0 are within 0.00119209% of each other + + +
+ + + v1, WithinRel( v2 ) + + + 0.0f and 1.17549e-38 are within 0.00119209% of each other + + + +
+ +
+
+ + + 1.f, WithinAbs( 1.f, 0 ) + + + 1.0f is within 0.0 of 1.0 + + + + + 0.f, WithinAbs( 1.f, 1 ) + + + 0.0f is within 1.0 of 1.0 + + + + + 0.f, !WithinAbs( 1.f, 0.99f ) + + + 0.0f not is within 0.9900000095 of 1.0 + + + + + 0.f, !WithinAbs( 1.f, 0.99f ) + + + 0.0f not is within 0.9900000095 of 1.0 + + + + + 0.f, WithinAbs( -0.f, 0 ) + + + 0.0f is within 0.0 of -0.0 + + + + + 11.f, !WithinAbs( 10.f, 0.5f ) + + + 11.0f not is within 0.5 of 10.0 + + + + + 10.f, !WithinAbs( 11.f, 0.5f ) + + + 10.0f not is within 0.5 of 11.0 + + + + + -10.f, WithinAbs( -10.f, 0.5f ) + + + -10.0f is within 0.5 of -10.0 + + + + + -10.f, WithinAbs( -9.6f, 0.5f ) + + + -10.0f is within 0.5 of -9.6000003815 + + + +
+
+ + + 1.f, WithinULP( 1.f, 0 ) + + + 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) + + + + + -1.f, WithinULP( -1.f, 0 ) + + + -1.0f is within 0 ULPs of -1.00000000e+00f ([-1.00000000e+00, -1.00000000e+00]) + + + + + nextafter( 1.f, 2.f ), WithinULP( 1.f, 1 ) + + + 1.0f is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) + + + + + 0.f, WithinULP( nextafter( 0.f, 1.f ), 1 ) + + + 0.0f is within 1 ULPs of 1.40129846e-45f ([0.00000000e+00, 2.80259693e-45]) + + + + + 1.f, WithinULP( nextafter( 1.f, 0.f ), 1 ) + + + 1.0f is within 1 ULPs of 9.99999940e-01f ([9.99999881e-01, 1.00000000e+00]) + + + + + 1.f, !WithinULP( nextafter( 1.f, 2.f ), 0 ) + + + 1.0f not is within 0 ULPs of 1.00000012e+00f ([1.00000012e+00, 1.00000012e+00]) + + + + + 1.f, WithinULP( 1.f, 0 ) + + + 1.0f is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) + + + + + -0.f, WithinULP( 0.f, 0 ) + + + -0.0f is within 0 ULPs of 0.00000000e+00f ([0.00000000e+00, 0.00000000e+00]) + + + +
+
+ + + 1.f, WithinAbs( 1.f, 0.5 ) || WithinULP( 1.f, 1 ) + + + 1.0f ( is within 0.5 of 1.0 or is within 1 ULPs of 1.00000000e+00f ([9.99999940e-01, 1.00000012e+00]) ) + + + + + 1.f, WithinAbs( 2.f, 0.5 ) || WithinULP( 1.f, 0 ) + + + 1.0f ( is within 0.5 of 2.0 or is within 0 ULPs of 1.00000000e+00f ([1.00000000e+00, 1.00000000e+00]) ) + + + + + 0.0001f, WithinAbs( 0.f, 0.001f ) || WithinRel( 0.f, 0.1f ) + + + 0.0001f ( is within 0.001 of 0.0 or and 0 are within 10% of each other ) + + + +
+
+ + + WithinAbs( 1.f, 0.f ) + + + WithinAbs( 1.f, 0.f ) + + + + + WithinAbs( 1.f, -1.f ), std::domain_error + + + WithinAbs( 1.f, -1.f ), std::domain_error + + + + + WithinULP( 1.f, 0 ) + + + WithinULP( 1.f, 0 ) + + + + + WithinULP( 1.f, static_cast<uint64_t>( -1 ) ), std::domain_error + + + WithinULP( 1.f, static_cast<uint64_t>( -1 ) ), std::domain_error + + + + + WithinRel( 1.f, 0.f ) + + + WithinRel( 1.f, 0.f ) + + + + + WithinRel( 1.f, -0.2f ), std::domain_error + + + WithinRel( 1.f, -0.2f ), std::domain_error + + + + + WithinRel( 1.f, 1.f ), std::domain_error + + + WithinRel( 1.f, 1.f ), std::domain_error + + + +
+ +
+ +
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + filter([] (int) {return false; }, value(1)), Catch::GeneratorException + + + filter([] (int) {return false; }, value(1)), Catch::GeneratorException + + + +
+ +
+
+ + + i < 4 + + + 1 < 4 + + + +
+
+ + + i < 4 + + + 2 < 4 + + + +
+
+ + + i < 4 + + + 3 < 4 + + + +
+
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + i % 2 == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + i.size() == 1 + + + 1 == 1 + + + +
+ +
+
+ + + j > 0 + + + 1 > 0 + + + +
+
+ + + j > 0 + + + 2 > 0 + + + +
+
+ + + j > 0 + + + 3 > 0 + + + +
+
+ + + j > 0 + + + 1 > 0 + + + +
+
+ + + j > 0 + + + 2 > 0 + + + +
+
+ + + j > 0 + + + 3 > 0 + + + +
+
+
+ + + chunk2.size() == 2 + + + 2 == 2 + + + + + chunk2.front() == chunk2.back() + + + 1 == 1 + + + +
+ +
+
+
+ + + chunk2.size() == 2 + + + 2 == 2 + + + + + chunk2.front() == chunk2.back() + + + 2 == 2 + + + +
+ +
+
+
+ + + chunk2.size() == 2 + + + 2 == 2 + + + + + chunk2.front() == chunk2.back() + + + 3 == 3 + + + +
+ +
+
+
+ + + chunk2.size() == 2 + + + 2 == 2 + + + + + chunk2.front() == chunk2.back() + + + 1 == 1 + + + + + chunk2.front() < 3 + + + 1 < 3 + + + +
+ +
+
+
+ + + chunk2.size() == 2 + + + 2 == 2 + + + + + chunk2.front() == chunk2.back() + + + 2 == 2 + + + + + chunk2.front() < 3 + + + 2 < 3 + + + +
+ +
+
+
+ + + chunk2.size() == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + chunk2.size() == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + chunk2.size() == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + chunk(2, value(1)), Catch::GeneratorException + + + chunk(2, value(1)), Catch::GeneratorException + + + +
+ +
+ +
+ +
+ + + j < i + + + -3 < 1 + + + +
+
+ + + j < i + + + -2 < 1 + + + +
+
+ + + j < i + + + -1 < 1 + + + +
+
+ + + 4u * i > str.size() + + + 4 > 1 + + + +
+
+ + + 4u * i > str.size() + + + 4 > 2 + + + +
+
+ + + 4u * i > str.size() + + + 4 > 3 + + + +
+
+ + + j < i + + + -3 < 2 + + + +
+
+ + + j < i + + + -2 < 2 + + + +
+
+ + + j < i + + + -1 < 2 + + + +
+
+ + + 4u * i > str.size() + + + 8 > 1 + + + +
+
+ + + 4u * i > str.size() + + + 8 > 2 + + + +
+
+ + + 4u * i > str.size() + + + 8 > 3 + + + +
+
+ + + j < i + + + -3 < 3 + + + +
+
+ + + j < i + + + -2 < 3 + + + +
+
+ + + j < i + + + -1 < 3 + + + +
+
+ + + 4u * i > str.size() + + + 12 > 1 + + + +
+
+ + + 4u * i > str.size() + + + 12 > 2 + + + +
+
+ + + 4u * i > str.size() + + + 12 > 3 + + + +
+ +
+ +
+ + + gen.get() == 123 + + + 123 == 123 + + + + + !(gen.next()) + + + !false + + + +
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 3 + + + 3 == 3 + + + + + gen.next() + + + true + + + + + gen.get() == 5 + + + 5 == 5 + + + + + !(gen.next()) + + + !false + + + +
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 5 + + + 5 == 5 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == 4 + + + 4 == 4 + + + + + gen.next() + + + true + + + + + gen.get() == 0 + + + 0 == 0 + + + + + !(gen.next()) + + + !false + + + +
+
+ + + gen.get().size() == 2 + + + 2 == 2 + + + + + gen.get() == "aa" + + + "aa" == "aa" + + + + + gen.next() + + + true + + + + + gen.get() == "bb" + + + "bb" == "bb" + + + + + gen.next() + + + true + + + + + gen.get() == "cc" + + + "cc" == "cc" + + + + + !(gen.next()) + + + !false + + + +
+
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 3 + + + 3 == 3 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 3 + + + 3 == 3 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+
+ + + filter([](int) { return false; }, value(1)), Catch::GeneratorException + + + filter([](int) { return false; }, value(1)), Catch::GeneratorException + + + + + filter([](int) { return false; }, values({ 1, 2, 3 })), Catch::GeneratorException + + + filter([](int) { return false; }, values({ 1, 2, 3 })), Catch::GeneratorException + + + +
+ +
+
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+ + + gen.get() == 2.0 + + + 2.0 == 2.0 + + + + + gen.next() + + + true + + + + + gen.get() == 4.0 + + + 4.0 == 4.0 + + + + + gen.next() + + + true + + + + + gen.get() == 6.0 + + + 6.0 == 6.0 + + + + + !(gen.next()) + + + !false + + + +
+
+ + + gen.get() == 2.0 + + + 2.0 == 2.0 + + + + + gen.next() + + + true + + + + + gen.get() == 4.0 + + + 4.0 == 4.0 + + + + + gen.next() + + + true + + + + + gen.get() == 6.0 + + + 6.0 == 6.0 + + + + + !(gen.next()) + + + !false + + + +
+
+
+ + + gen.get() == 3 + + + 3 == 3 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+
+ + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == 3 + + + 3 == 3 + + + + + gen.next() + + + true + + + + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == 3 + + + 3 == 3 + + + + + !(gen.next()) + + + !false + + + +
+ +
+
+
+
+ + + gen.get() == -2 + + + -2 == -2 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == 0 + + + 0 == 0 + + + + + gen.next() + + + true + + + + + gen.get() == 1 + + + 1 == 1 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+
+
+
+ + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == 1 + + + 1 == 1 + + + + + gen.next() + + + true + + + + + gen.get() == 0 + + + 0 == 0 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+
+
+
+
+ + + gen.get() == -7 + + + -7 == -7 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + + gen.get() == -7 + + + -7 == -7 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + + gen.get() == -7 + + + -7 == -7 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == 5 + + + 5 == 5 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + Current expected value is -1 + + + + gen.get() == Approx(expected) + + + -1.0 == Approx( -1.0 ) + + + + Current expected value is -1 + + + + gen.next() + + + true + + + + Current expected value is -0.9 + + + + gen.get() == Approx(expected) + + + -0.9 == Approx( -0.9 ) + + + + Current expected value is -0.9 + + + + gen.next() + + + true + + + + Current expected value is -0.8 + + + + gen.get() == Approx(expected) + + + -0.8 == Approx( -0.8 ) + + + + Current expected value is -0.8 + + + + gen.next() + + + true + + + + Current expected value is -0.7 + + + + gen.get() == Approx(expected) + + + -0.7 == Approx( -0.7 ) + + + + Current expected value is -0.7 + + + + gen.next() + + + true + + + + Current expected value is -0.6 + + + + gen.get() == Approx(expected) + + + -0.6 == Approx( -0.6 ) + + + + Current expected value is -0.6 + + + + gen.next() + + + true + + + + Current expected value is -0.5 + + + + gen.get() == Approx(expected) + + + -0.5 == Approx( -0.5 ) + + + + Current expected value is -0.5 + + + + gen.next() + + + true + + + + Current expected value is -0.4 + + + + gen.get() == Approx(expected) + + + -0.4 == Approx( -0.4 ) + + + + Current expected value is -0.4 + + + + gen.next() + + + true + + + + Current expected value is -0.3 + + + + gen.get() == Approx(expected) + + + -0.3 == Approx( -0.3 ) + + + + Current expected value is -0.3 + + + + gen.next() + + + true + + + + Current expected value is -0.2 + + + + gen.get() == Approx(expected) + + + -0.2 == Approx( -0.2 ) + + + + Current expected value is -0.2 + + + + gen.next() + + + true + + + + Current expected value is -0.1 + + + + gen.get() == Approx(expected) + + + -0.1 == Approx( -0.1 ) + + + + Current expected value is -0.1 + + + + gen.next() + + + true + + + + Current expected value is -1.38778e-16 + + + + gen.get() == Approx(expected) + + + -0.0 == Approx( -0.0 ) + + + + Current expected value is -1.38778e-16 + + + + gen.next() + + + true + + + + Current expected value is 0.1 + + + + gen.get() == Approx(expected) + + + 0.1 == Approx( 0.1 ) + + + + Current expected value is 0.1 + + + + gen.next() + + + true + + + + Current expected value is 0.2 + + + + gen.get() == Approx(expected) + + + 0.2 == Approx( 0.2 ) + + + + Current expected value is 0.2 + + + + gen.next() + + + true + + + + Current expected value is 0.3 + + + + gen.get() == Approx(expected) + + + 0.3 == Approx( 0.3 ) + + + + Current expected value is 0.3 + + + + gen.next() + + + true + + + + Current expected value is 0.4 + + + + gen.get() == Approx(expected) + + + 0.4 == Approx( 0.4 ) + + + + Current expected value is 0.4 + + + + gen.next() + + + true + + + + Current expected value is 0.5 + + + + gen.get() == Approx(expected) + + + 0.5 == Approx( 0.5 ) + + + + Current expected value is 0.5 + + + + gen.next() + + + true + + + + Current expected value is 0.6 + + + + gen.get() == Approx(expected) + + + 0.6 == Approx( 0.6 ) + + + + Current expected value is 0.6 + + + + gen.next() + + + true + + + + Current expected value is 0.7 + + + + gen.get() == Approx(expected) + + + 0.7 == Approx( 0.7 ) + + + + Current expected value is 0.7 + + + + gen.next() + + + true + + + + Current expected value is 0.8 + + + + gen.get() == Approx(expected) + + + 0.8 == Approx( 0.8 ) + + + + Current expected value is 0.8 + + + + gen.next() + + + true + + + + Current expected value is 0.9 + + + + gen.get() == Approx(expected) + + + 0.9 == Approx( 0.9 ) + + + + Current expected value is 0.9 + + + + gen.next() + + + true + + + + + gen.get() == Approx( rangeEnd ) + + + 1.0 == Approx( 1.0 ) + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + Current expected value is -1 + + + + gen.get() == Approx(expected) + + + -1.0 == Approx( -1.0 ) + + + + Current expected value is -1 + + + + gen.next() + + + true + + + + Current expected value is -0.7 + + + + gen.get() == Approx(expected) + + + -0.7 == Approx( -0.7 ) + + + + Current expected value is -0.7 + + + + gen.next() + + + true + + + + Current expected value is -0.4 + + + + gen.get() == Approx(expected) + + + -0.4 == Approx( -0.4 ) + + + + Current expected value is -0.4 + + + + gen.next() + + + true + + + + Current expected value is -0.1 + + + + gen.get() == Approx(expected) + + + -0.1 == Approx( -0.1 ) + + + + Current expected value is -0.1 + + + + gen.next() + + + true + + + + Current expected value is 0.2 + + + + gen.get() == Approx(expected) + + + 0.2 == Approx( 0.2 ) + + + + Current expected value is 0.2 + + + + gen.next() + + + true + + + + Current expected value is 0.5 + + + + gen.get() == Approx(expected) + + + 0.5 == Approx( 0.5 ) + + + + Current expected value is 0.5 + + + + gen.next() + + + true + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + Current expected value is -1 + + + + gen.get() == Approx(expected) + + + -1.0 == Approx( -1.0 ) + + + + Current expected value is -1 + + + + gen.next() + + + true + + + + Current expected value is -0.7 + + + + gen.get() == Approx(expected) + + + -0.7 == Approx( -0.7 ) + + + + Current expected value is -0.7 + + + + gen.next() + + + true + + + + Current expected value is -0.4 + + + + gen.get() == Approx(expected) + + + -0.4 == Approx( -0.4 ) + + + + Current expected value is -0.4 + + + + gen.next() + + + true + + + + Current expected value is -0.1 + + + + gen.get() == Approx(expected) + + + -0.1 == Approx( -0.1 ) + + + + Current expected value is -0.1 + + + + gen.next() + + + true + + + + Current expected value is 0.2 + + + + gen.get() == Approx(expected) + + + 0.2 == Approx( 0.2 ) + + + + Current expected value is 0.2 + + + + gen.next() + + + true + + + + Current expected value is 0.5 + + + + gen.get() == Approx(expected) + + + 0.5 == Approx( 0.5 ) + + + + Current expected value is 0.5 + + + + gen.next() + + + true + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + + gen.get() == 5 + + + 5 == 5 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + + gen.get() == 5 + + + 5 == 5 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+
+
+
+
+ + + gen.get() == 5 + + + 5 == 5 + + + + + gen.next() + + + true + + + + + gen.get() == 2 + + + 2 == 2 + + + + + gen.next() + + + true + + + + + gen.get() == -1 + + + -1 == -1 + + + + + gen.next() + + + true + + + + + gen.get() == -4 + + + -4 == -4 + + + + + gen.next() + + + true + + + + + gen.get() == -7 + + + -7 == -7 + + + + + !(gen.next()) + + + !false + + + +
+ +
+ +
+ +
+ +
+ + + + d >= Approx( 1.22 ) + + + 1.23 >= Approx( 1.22 ) + + + + + d >= Approx( 1.23 ) + + + 1.23 >= Approx( 1.23 ) + + + + + !(d >= Approx( 1.24 )) + + + !(1.23 >= Approx( 1.24 )) + + + + + d >= Approx( 1.24 ).epsilon(0.1) + + + 1.23 >= Approx( 1.24 ) + + + + + + + this is a message + + + this is a warning + + + + + + this message should be logged + + + so should this + + + + a == 1 + + + 2 == 1 + + + + + + + this message may be logged later + + + + a == 2 + + + 2 == 2 + + + + this message may be logged later + + + this message should be logged + + + + a == 1 + + + 2 == 1 + + + + this message may be logged later + + + this message should be logged + + + and this, but later + + + + a == 0 + + + 2 == 0 + + + + this message may be logged later + + + this message should be logged + + + and this, but later + + + but not this + + + + a == 2 + + + 2 == 2 + + + + + + + current counter 0 + + + i := 0 + + + + i < 10 + + + 0 < 10 + + + + current counter 1 + + + i := 1 + + + + i < 10 + + + 1 < 10 + + + + current counter 2 + + + i := 2 + + + + i < 10 + + + 2 < 10 + + + + current counter 3 + + + i := 3 + + + + i < 10 + + + 3 < 10 + + + + current counter 4 + + + i := 4 + + + + i < 10 + + + 4 < 10 + + + + current counter 5 + + + i := 5 + + + + i < 10 + + + 5 < 10 + + + + current counter 6 + + + i := 6 + + + + i < 10 + + + 6 < 10 + + + + current counter 7 + + + i := 7 + + + + i < 10 + + + 7 < 10 + + + + current counter 8 + + + i := 8 + + + + i < 10 + + + 8 < 10 + + + + current counter 9 + + + i := 9 + + + + i < 10 + + + 9 < 10 + + + + current counter 10 + + + i := 10 + + + + i < 10 + + + 10 < 10 + + + + + + + + data.int_seven != 7 + + + 7 != 7 + + + + + data.float_nine_point_one != Approx( 9.1f ) + + + 9.1f != Approx( 9.1000003815 ) + + + + + data.double_pi != Approx( 3.1415926535 ) + + + 3.1415926535 != Approx( 3.1415926535 ) + + + + + data.str_hello != "hello" + + + "hello" != "hello" + + + + + data.str_hello.size() != 5 + + + 5 != 5 + + + + + + + + data.int_seven != 6 + + + 7 != 6 + + + + + data.int_seven != 8 + + + 7 != 8 + + + + + data.float_nine_point_one != Approx( 9.11f ) + + + 9.1f != Approx( 9.1099996567 ) + + + + + data.float_nine_point_one != Approx( 9.0f ) + + + 9.1f != Approx( 9.0 ) + + + + + data.float_nine_point_one != Approx( 1 ) + + + 9.1f != Approx( 1.0 ) + + + + + data.float_nine_point_one != Approx( 0 ) + + + 9.1f != Approx( 0.0 ) + + + + + data.double_pi != Approx( 3.1415 ) + + + 3.1415926535 != Approx( 3.1415 ) + + + + + data.str_hello != "goodbye" + + + "hello" != "goodbye" + + + + + data.str_hello != "hell" + + + "hello" != "hell" + + + + + data.str_hello != "hello1" + + + "hello" != "hello1" + + + + + data.str_hello.size() != 6 + + + 5 != 6 + + + + + + + + []() { return true; }() + + + true + + + + + + + + d <= Approx( 1.24 ) + + + 1.23 <= Approx( 1.24 ) + + + + + d <= Approx( 1.23 ) + + + 1.23 <= Approx( 1.23 ) + + + + + !(d <= Approx( 1.22 )) + + + !(1.23 <= Approx( 1.22 )) + + + + + d <= Approx( 1.22 ).epsilon(0.1) + + + 1.23 <= Approx( 1.22 ) + + + + + + + + + + + testStringForMatching(), ContainsSubstring( "string" ) && ContainsSubstring( "abc" ) && ContainsSubstring( "substring" ) && ContainsSubstring( "contains" ) + + + "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) + + + + + + + + testStringForMatching(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) + + + "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) + + + + + testStringForMatching2(), ContainsSubstring( "string" ) || ContainsSubstring( "different" ) || ContainsSubstring( "random" ) + + + "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) + + + + + + + + testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "substring" ) + + + "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) + + + + + + + + testStringForMatching(), ( ContainsSubstring( "string" ) || ContainsSubstring( "different" ) ) && ContainsSubstring( "random" ) + + + "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) + + + + + + + + testStringForMatching(), !ContainsSubstring( "different" ) + + + "this string contains 'abc' as a substring" not contains: "different" + + + + + + + + testStringForMatching(), !ContainsSubstring( "substring" ) + + + "this string contains 'abc' as a substring" not contains: "substring" + + + + + +
+
+ + +
+ +
+
+
+ + +
+ +
+
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+ +
+ +
+ + + + thisThrows(), "expected exception" + + + "expected exception" equals: "expected exception" + + + + + thisThrows(), "should fail" + + + "expected exception" equals: "should fail" + + + + + + + + values > -6 + + + 3 > -6 + + + + + values > -6 + + + 4 > -6 + + + + + values > -6 + + + 5 > -6 + + + + + values > -6 + + + 6 > -6 + + + + + values > -6 + + + -5 > -6 + + + + + values > -6 + + + -4 > -6 + + + + + values > -6 + + + 90 > -6 + + + + + values > -6 + + + 91 > -6 + + + + + values > -6 + + + 92 > -6 + + + + + values > -6 + + + 93 > -6 + + + + + values > -6 + + + 94 > -6 + + + + + values > -6 + + + 95 > -6 + + + + + values > -6 + + + 96 > -6 + + + + + values > -6 + + + 97 > -6 + + + + + values > -6 + + + 98 > -6 + + + + + values > -6 + + + 99 > -6 + + + + + + + This one ran + + + + + + custom exception + + + + + + + True + + + {?} + + + + + !False + + + true + + + + + !(False) + + + !{?} + + + + + + + + + + + data.int_seven > 7 + + + 7 > 7 + + + + + data.int_seven < 7 + + + 7 < 7 + + + + + data.int_seven > 8 + + + 7 > 8 + + + + + data.int_seven < 6 + + + 7 < 6 + + + + + data.int_seven < 0 + + + 7 < 0 + + + + + data.int_seven < -1 + + + 7 < -1 + + + + + data.int_seven >= 8 + + + 7 >= 8 + + + + + data.int_seven <= 6 + + + 7 <= 6 + + + + + data.float_nine_point_one < 9 + + + 9.1f < 9 + + + + + data.float_nine_point_one > 10 + + + 9.1f > 10 + + + + + data.float_nine_point_one > 9.2 + + + 9.1f > 9.2 + + + + + data.str_hello > "hello" + + + "hello" > "hello" + + + + + data.str_hello < "hello" + + + "hello" < "hello" + + + + + data.str_hello > "hellp" + + + "hello" > "hellp" + + + + + data.str_hello > "z" + + + "hello" > "z" + + + + + data.str_hello < "hellm" + + + "hello" < "hellm" + + + + + data.str_hello < "a" + + + "hello" < "a" + + + + + data.str_hello >= "z" + + + "hello" >= "z" + + + + + data.str_hello <= "a" + + + "hello" <= "a" + + + + + + + + data.int_seven < 8 + + + 7 < 8 + + + + + data.int_seven > 6 + + + 7 > 6 + + + + + data.int_seven > 0 + + + 7 > 0 + + + + + data.int_seven > -1 + + + 7 > -1 + + + + + data.int_seven >= 7 + + + 7 >= 7 + + + + + data.int_seven >= 6 + + + 7 >= 6 + + + + + data.int_seven <= 7 + + + 7 <= 7 + + + + + data.int_seven <= 8 + + + 7 <= 8 + + + + + data.float_nine_point_one > 9 + + + 9.1f > 9 + + + + + data.float_nine_point_one < 10 + + + 9.1f < 10 + + + + + data.float_nine_point_one < 9.2 + + + 9.1f < 9.2 + + + + + data.str_hello <= "hello" + + + "hello" <= "hello" + + + + + data.str_hello >= "hello" + + + "hello" >= "hello" + + + + + data.str_hello < "hellp" + + + "hello" < "hellp" + + + + + data.str_hello < "zebra" + + + "hello" < "zebra" + + + + + data.str_hello > "hellm" + + + "hello" > "hellm" + + + + + data.str_hello > "a" + + + "hello" > "a" + + + + + +
+ + + rng() == 0x + + + 4242248763 (0x) +== +4242248763 (0x) + + + + + rng() == 0x + + + 1867888929 (0x) +== +1867888929 (0x) + + + + + rng() == 0x + + + 1276619030 (0x) +== +1276619030 (0x) + + + + + rng() == 0x + + + 1911218783 (0x) +== +1911218783 (0x) + + + + + rng() == 0x + + + 1827115164 (0x) +== +1827115164 (0x) + + + +
+
+ + + rng() == 0x + + + 1472234645 (0x) +== +1472234645 (0x) + + + + + rng() == 0x + + + 868832940 (0x) +== +868832940 (0x) + + + + + rng() == 0x + + + 570883446 (0x) +== +570883446 (0x) + + + + + rng() == 0x + + + 889299803 (0x) +== +889299803 (0x) + + + + + rng() == 0x + + + 4261393167 (0x) +== +4261393167 (0x) + + + + + rng() == 0x + + + 1472234645 (0x) +== +1472234645 (0x) + + + + + rng() == 0x + + + 868832940 (0x) +== +868832940 (0x) + + + + + rng() == 0x + + + 570883446 (0x) +== +570883446 (0x) + + + + + rng() == 0x + + + 889299803 (0x) +== +889299803 (0x) + + + + + rng() == 0x + + + 4261393167 (0x) +== +4261393167 (0x) + + + +
+ +
+ +
+ + Message from section one + + +
+
+ + Message from section two + + +
+ +
+ + + + ( EvilMatcher(), EvilMatcher() ), EvilCommaOperatorUsed + + + ( EvilMatcher(), EvilMatcher() ), EvilCommaOperatorUsed + + + + + &EvilMatcher(), EvilAddressOfOperatorUsed + + + &EvilMatcher(), EvilAddressOfOperatorUsed + + + + + EvilMatcher() || ( EvilMatcher() && !EvilMatcher() ) + + + EvilMatcher() || ( EvilMatcher() && !EvilMatcher() ) + + + + + ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher() + + + ( EvilMatcher() && EvilMatcher() ) || !EvilMatcher() + + + + + +
+ + + spec.hasFilters() == false + + + false == false + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == false + + + false == false + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == false + + + false == false + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + + + parseTestSpec( "*a" ).matches( *tcA ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + + + parseTestSpec( "a*" ).matches( *tcA ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == true + + + true == true + + + + + parseTestSpec( "*a*" ).matches( *tcA ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == true + + + true == true + + + + + spec.matches( *tcB ) == true + + + true == true + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == true + + + true == true + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == false + + + false == false + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == false + + + false == false + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == false + + + false == false + + + +
+
+ + + spec.hasFilters() == true + + + true == true + + + + + spec.matches( *tcA ) == false + + + false == false + + + + + spec.matches( *tcB ) == false + + + false == false + + + + + spec.matches( *tcC ) == false + + + false == false + + + + + spec.matches( *tcD ) == true + + + true == true + + + +
+
+ + + spec.matches( *fakeTestCase( " aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( " aardvark" ) ) + + + true + + + + + spec.matches( *fakeTestCase( " aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( "aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( "aardvark" ) ) + + + true + + + +
+
+ + + spec.matches( *fakeTestCase( " aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( " aardvark" ) ) + + + true + + + + + spec.matches( *fakeTestCase( " aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( "aardvark " ) ) + + + true + + + + + spec.matches( *fakeTestCase( "aardvark" ) ) + + + true + + + +
+
+ + + spec.matches(*fakeTestCase("hidden and foo", "[.][foo]")) + + + true + + + + + !(spec.matches(*fakeTestCase("only foo", "[foo]"))) + + + !false + + + +
+
+ + + !(spec.matches(*fakeTestCase("hidden and foo", "[.][foo]"))) + + + !false + + + + + !(spec.matches(*fakeTestCase("only foo", "[foo]"))) + + + !false + + + + + !(spec.matches(*fakeTestCase("only hidden", "[.]"))) + + + !false + + + + + spec.matches(*fakeTestCase("neither foo nor hidden", "[bar]")) + + + true + + + +
+ +
+ + + + spec.hasFilters() + + + true + + + + + spec.getInvalidSpecs().empty() + + + true + + + + + spec.matches( testCase ) + + + true + + + + + +
+ + + cli.parse({ "test", "--shard-count=8" }) + + + {?} + + + + + config.shardCount == 8 + + + 8 == 8 + + + +
+
+ + + !(result) + + + !{?} + + + + + result.errorMessage(), ContainsSubstring("Shard count must be a positive number") + + + "Shard count must be a positive number" contains: "Shard count must be a positive number" + + + +
+
+ + + !(result) + + + !{?} + + + + + result.errorMessage(), ContainsSubstring("Shard count must be a positive number") + + + "Shard count must be a positive number" contains: "Shard count must be a positive number" + + + +
+
+ + + cli.parse({ "test", "--shard-index=2" }) + + + {?} + + + + + config.shardIndex == 2 + + + 2 == 2 + + + +
+
+ + + !(result) + + + !{?} + + + + + result.errorMessage(), ContainsSubstring("Shard index must be a non-negative number") + + + "Shard index must be a non-negative number" contains: "Shard index must be a non-negative number" + + + +
+
+ + + cli.parse({ "test", "--shard-index=0" }) + + + {?} + + + + + config.shardIndex == 0 + + + 0 == 0 + + + +
+ +
+ + + tagString := "[tag with spaces]" + + + + spec.hasFilters() + + + true + + + + tagString := "[tag with spaces]" + + + + spec.getInvalidSpecs().empty() + + + true + + + + tagString := "[tag with spaces]" + + + + spec.matches( testCase ) + + + true + + + + tagString := "[I said "good day" sir!]" + + + + spec.hasFilters() + + + true + + + + tagString := "[I said "good day" sir!]" + + + + spec.getInvalidSpecs().empty() + + + true + + + + tagString := "[I said "good day" sir!]" + + + + spec.matches( testCase ) + + + true + + + + + +
+ + + cli.parse( { "test", "-w", "NoAssertions" } ) + + + {?} + + + + + config.warnings == WarnAbout::NoAssertions + + + 1 == 1 + + + +
+
+ + + !(cli.parse( { "test", "-w", "NoTests" } )) + + + !{?} + + + +
+
+ + + cli.parse( { "test", "--warn", "NoAssertions", "--warn", "UnmatchedTestSpec" } ) + + + {?} + + + + + config.warnings == ( WarnAbout::NoAssertions | WarnAbout::UnmatchedTestSpec ) + + + 3 == 3 + + + +
+ +
+ + + + p == 0 + + + 0 == 0 + + + + + p == pNULL + + + 0 == 0 + + + + + p != 0 + + + 0x != 0 + + + + + cp != 0 + + + 0x != 0 + + + + + cpc != 0 + + + 0x != 0 + + + + + returnsNull() == 0 + + + {null string} == 0 + + + + + returnsConstNull() == 0 + + + {null string} == 0 + + + + + 0 != p + + + 0 != 0x + + + + + +
+ + + str1.size() == 3 + 5 + + + 8 == 8 + + + + + str2.size() == 3 + 10 + + + 13 == 13 + + + +
+
+ + + str1.size() == 2 + 5 + + + 7 == 7 + + + + + str2.size() == 2 + 15 + + + 17 == 17 + + + +
+ +
+ + + + "foo", Predicate<const char*>( []( const char* const& ) { return true; } ) + + + "foo" matches undescribed predicate + + + + + +
+ + + result + + + {?} + + + + + config.processName == "" + + + "" == "" + + + +
+
+ + + result + + + {?} + + + + + config.processName == "test" + + + "test" == "test" + + + + + config.shouldDebugBreak == false + + + false == false + + + + + config.abortAfter == -1 + + + -1 == -1 + + + + + config.noThrow == false + + + false == false + + + + + config.reporterSpecifications == std::vector<Catch::ConfigData::ReporterAndFile>{ {"console", {}} } + + + { { console, <default-output> } } +== +{ { console, <default-output> } } + + + + + !(cfg.hasTestFilters()) + + + !false + + + +
+
+
+ + + result + + + {?} + + + + + cfg.hasTestFilters() + + + true + + + + + cfg.testSpec().matches(*fakeTestCase("notIncluded")) == false + + + false == false + + + + + cfg.testSpec().matches(*fakeTestCase("test1")) + + + true + + + +
+ +
+
+
+ + + result + + + {?} + + + + + cfg.hasTestFilters() + + + true + + + + + cfg.testSpec().matches(*fakeTestCase("test1")) == false + + + false == false + + + + + cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) + + + true + + + +
+ +
+
+
+ + + result + + + {?} + + + + + cfg.hasTestFilters() + + + true + + + + + cfg.testSpec().matches(*fakeTestCase("test1")) == false + + + false == false + + + + + cfg.testSpec().matches(*fakeTestCase("alwaysIncluded")) + + + true + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} } + + + { { console, <default-output> } } +== +{ { console, <default-output> } } + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} } + + + { { xml, <default-output> } } +== +{ { xml, <default-output> } } + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} } + + + { { junit, <default-output> } } +== +{ { junit, <default-output> } } + + + +
+ +
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("Unrecognized reporter") + + + "Unrecognized reporter, 'unsupported'. Check available with --list-reporters" contains: "Unrecognized reporter" + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} } + + + { { console, out.txt } } +== +{ { console, out.txt } } + + + +
+ +
+
+
+ + result.errorMessage() := "" + + + + result + + + {?} + + + + result.errorMessage() := "" + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} } + + + { { console, C:\Temp\out.txt } } +== +{ { console, C:\Temp\out.txt } } + + + +
+ +
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("empty filename") + + + "Reporter 'console' has empty filename specified as its output. Supply a filename or remove the colons to use the default output." contains: "empty filename" + + + +
+ +
+
+
+
+ + + cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" }) + + + {?} + + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} } + + + { { xml, output.xml }, { junit, output-junit.xml } } +== +{ { xml, output.xml }, { junit, output-junit.xml } } + + + +
+ +
+ +
+
+
+
+ + + cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" }) + + + {?} + + + + + config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} } + + + { { xml, output.xml }, { console, <default-output> } } +== +{ { xml, output.xml }, { console, <default-output> } } + + + +
+ +
+ +
+
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.") + + + "Only one reporter may have unspecified output file." contains: "Only one reporter may have unspecified output file." + + + +
+ +
+ +
+
+
+ + + cli.parse({"test", "-b"}) + + + {?} + + + + + config.shouldDebugBreak == true + + + true == true + + + +
+ +
+
+
+ + + cli.parse({"test", "--break"}) + + + {?} + + + + + config.shouldDebugBreak + + + true + + + +
+ +
+
+
+ + + cli.parse({"test", "-a"}) + + + {?} + + + + + config.abortAfter == 1 + + + 1 == 1 + + + +
+ +
+
+
+ + + cli.parse({"test", "-x", "2"}) + + + {?} + + + + + config.abortAfter == 2 + + + 2 == 2 + + + +
+ +
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("convert") && ContainsSubstring("oops") + + + "Unable to convert 'oops' to destination type" ( contains: "convert" and contains: "oops" ) + + + +
+ +
+
+
+
+ + + cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) + + + {?} + + + + + config.waitForKeypress == std::get<1>(input) + + + 0 == 0 + + + +
+ +
+ +
+
+
+
+ + + cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) + + + {?} + + + + + config.waitForKeypress == std::get<1>(input) + + + 1 == 1 + + + +
+ +
+ +
+
+
+
+ + + cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) + + + {?} + + + + + config.waitForKeypress == std::get<1>(input) + + + 2 == 2 + + + +
+ +
+ +
+
+
+
+ + + cli.parse({"test", "--wait-for-keypress", std::get<0>(input)}) + + + {?} + + + + + config.waitForKeypress == std::get<1>(input) + + + 3 == 3 + + + +
+ +
+ +
+
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring("never") && ContainsSubstring("both") + + + "keypress argument must be one of: never, start, exit or both. 'sometimes' not recognised" ( contains: "never" and contains: "both" ) + + + +
+ +
+ +
+
+
+ + + cli.parse({"test", "-e"}) + + + {?} + + + + + config.noThrow + + + true + + + +
+ +
+
+
+ + + cli.parse({"test", "--nothrow"}) + + + {?} + + + + + config.noThrow + + + true + + + +
+ +
+
+
+ + + cli.parse({"test", "-o", "filename.ext"}) + + + {?} + + + + + config.defaultOutputFilename == "filename.ext" + + + "filename.ext" == "filename.ext" + + + +
+ +
+
+
+ + + cli.parse({"test", "--out", "filename.ext"}) + + + {?} + + + + + config.defaultOutputFilename == "filename.ext" + + + "filename.ext" == "filename.ext" + + + +
+ +
+
+
+ + + cli.parse({"test", "-abe"}) + + + {?} + + + + + config.abortAfter == 1 + + + 1 == 1 + + + + + config.shouldDebugBreak + + + true + + + + + config.noThrow == true + + + true == true + + + +
+ +
+
+
+ + + cli.parse({"test"}) + + + {?} + + + + + config.useColour == UseColour::Auto + + + 0 == 0 + + + +
+ +
+
+
+ + + cli.parse({"test", "--use-colour", "auto"}) + + + {?} + + + + + config.useColour == UseColour::Auto + + + 0 == 0 + + + +
+ +
+
+
+ + + cli.parse({"test", "--use-colour", "yes"}) + + + {?} + + + + + config.useColour == UseColour::Yes + + + 1 == 1 + + + +
+ +
+
+
+ + + cli.parse({"test", "--use-colour", "no"}) + + + {?} + + + + + config.useColour == UseColour::No + + + 2 == 2 + + + +
+ +
+
+
+ + + !result + + + true + + + + + result.errorMessage(), ContainsSubstring( "colour mode must be one of" ) + + + "colour mode must be one of: auto, yes or no. 'wrong' not recognised" contains: "colour mode must be one of" + + + +
+ +
+
+
+ + + cli.parse({ "test", "--benchmark-samples=200" }) + + + {?} + + + + + config.benchmarkSamples == 200 + + + 200 == 200 + + + +
+ +
+
+
+ + + cli.parse({ "test", "--benchmark-resamples=20000" }) + + + {?} + + + + + config.benchmarkResamples == 20000 + + + 20000 (0x) == 20000 (0x) + + + +
+ +
+
+
+ + + cli.parse({ "test", "--benchmark-confidence-interval=0.99" }) + + + {?} + + + + + config.benchmarkConfidenceInterval == Catch::Approx(0.99) + + + 0.99 == Approx( 0.99 ) + + + +
+ +
+
+
+ + + cli.parse({ "test", "--benchmark-no-analysis" }) + + + {?} + + + + + config.benchmarkNoAnalysis + + + true + + + +
+ +
+
+
+ + + cli.parse({ "test", "--benchmark-warmup-time=10" }) + + + {?} + + + + + config.benchmarkWarmupTime == 10 + + + 10 == 10 + + + +
+ +
+ +
+ + + + std::tuple_size<TestType>::value >= 1 + + + 3 >= 1 + + + + + + + + std::tuple_size<TestType>::value >= 1 + + + 2 >= 1 + + + + + + + + std::tuple_size<TestType>::value >= 1 + + + 1 >= 1 + + + + + + + + Catch::generateRandomSeed(method) + + + Catch::generateRandomSeed(method) + + + + + Catch::generateRandomSeed(method) + + + Catch::generateRandomSeed(method) + + + + + Catch::generateRandomSeed(method) + + + Catch::generateRandomSeed(method) + + + + + + + + Catch::generateRandomSeed(static_cast<Catch::GenerateFrom>(77)) + + + Catch::generateRandomSeed(static_cast<Catch::GenerateFrom>(77)) + + + + + + + + Catch::Detail::stringify(UsesSentinel{}) == "{ }" + + + "{ }" == "{ }" + + + + + + + + truthy(false) + + + Hey, its truthy! + + + + + + + + testStringForMatching(), Matches( "this STRING contains 'abc' as a substring" ) + + + "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively + + + + + testStringForMatching(), Matches( "contains 'abc' as a substring" ) + + + "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively + + + + + testStringForMatching(), Matches( "this string contains 'abc' as a" ) + + + "this string contains 'abc' as a substring" matches "this string contains 'abc' as a" case sensitively + + + + + + + + actual, !UnorderedEquals( expected ) + + + { 'a', 'b' } not UnorderedEquals: { 'c', 'b' } + + + + + + + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: Automake + + + + listingString, ContainsSubstring("fakeTag"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: Automake + + + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: Automake + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: compact + + + + listingString, ContainsSubstring("fakeTag"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: compact + + + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: compact + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: console + + + + listingString, ContainsSubstring("fakeTag"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: console + + + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: console + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: JUnit + + + + listingString, ContainsSubstring("fakeTag"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: JUnit + + + + listingString, ContainsSubstring("fake reporter"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: JUnit + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "<?xml version="1.0" encoding="UTF-8"?> +All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: SonarQube + + + + listingString, ContainsSubstring("fakeTag"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: SonarQube + + + + listingString, ContainsSubstring("fake reporter"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: SonarQube + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "<?xml version="1.0" encoding="UTF-8"?> +All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TAP + + + + listingString, ContainsSubstring("fakeTag"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TAP + + + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TAP + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TeamCity + + + + listingString, ContainsSubstring("fakeTag"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TeamCity + + + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: TeamCity + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: XML + + + + listingString, ContainsSubstring("fakeTag"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +<TagsFromMatchingTests> + <Tag> + <Count>1</Count> + <Aliases> + <Alias>fakeTag</Alias> + </Aliases> + </Tag> +</TagsFromMatchingTests>" contains: "fakeTag" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: XML + + + + listingString, ContainsSubstring("fake reporter"s) + + + "<?xml version="1.0" encoding="UTF-8"?> +<AvailableReporters> + <Reporter> + <Name>fake reporter</Name> + <Description>fake description</Description> + </Reporter> +</AvailableReporters>" contains: "fake reporter" + + + +
+ + + !(factories.empty()) + + + !false + + +
+ + Tested reporter: XML + + + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "<?xml version="1.0" encoding="UTF-8"?> +<MatchingTests> + <TestCase> + <Name>fake test name</Name> + <ClassName/> + <Tags>[fakeTestTag]</Tags> + <SourceInfo> + <File>fake-file.cpp</File> + <Line>123456789</Line> + </SourceInfo> + </TestCase> +</MatchingTests>" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ +
+ + + + + + + + + + +
+ + + before == 0 + + + 0 == 0 + + +
+
+ + + after > before + + + 1 > 0 + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + itDoesThis() + + + true + + +
+ + + itDoesThat() + + + true + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ + + v.size() == 0 + + + 0 == 0 + + +
+
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + +
+
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ +
+ +
+ +
+ +
+
+ + + v.size() == 0 + + + 0 == 0 + + +
+
+ + + v.capacity() >= 10 + + + 10 >= 10 + + + + + v.size() == 0 + + + 0 == 0 + + + +
+ +
+ +
+ +
+ + + +A string sent directly to stdout + + +A string sent directly to stderr +A string sent to stderr via clog + + + + + + + d == Approx( 1.23 ) + + + 1.23 == Approx( 1.23 ) + + + + + d != Approx( 1.22 ) + + + 1.23 != Approx( 1.22 ) + + + + + d != Approx( 1.24 ) + + + 1.23 != Approx( 1.24 ) + + + + + d == 1.23_a + + + 1.23 == Approx( 1.23 ) + + + + + d != 1.22_a + + + 1.23 != Approx( 1.22 ) + + + + + Approx( d ) == 1.23 + + + Approx( 1.23 ) == 1.23 + + + + + Approx( d ) != 1.22 + + + Approx( 1.23 ) != 1.22 + + + + + Approx( d ) != 1.24 + + + Approx( 1.23 ) != 1.24 + + + + + +
+ +
+
+ +
+ + +Message from section one +Message from section two + + +
+ + + + testStringForMatching(), StartsWith( "This String" ) + + + "this string contains 'abc' as a substring" starts with: "This String" + + + + + testStringForMatching(), StartsWith( "string", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" starts with: "string" (case insensitive) + + + + + +
+ + + Catch::Detail::stringify(singular) == "{ 1 }" + + + "{ 1 }" == "{ 1 }" + + + +
+
+ + + Catch::Detail::stringify(arr) == "{ 3, 2, 1 }" + + + "{ 3, 2, 1 }" == "{ 3, 2, 1 }" + + + +
+
+ + + Catch::Detail::stringify(arr) == R"({ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } })" + + + "{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" +== +"{ { "1:1", "1:2", "1:3" }, { "2:1", "2:2" } }" + + + +
+ +
+ + + + testStringForMatching(), ContainsSubstring( "string" ) + + + "this string contains 'abc' as a substring" contains: "string" + + + + + testStringForMatching(), ContainsSubstring( "string", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" contains: "string" (case insensitive) + + + + + testStringForMatching(), ContainsSubstring( "abc" ) + + + "this string contains 'abc' as a substring" contains: "abc" + + + + + testStringForMatching(), ContainsSubstring( "aBC", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" contains: "abc" (case insensitive) + + + + + testStringForMatching(), StartsWith( "this" ) + + + "this string contains 'abc' as a substring" starts with: "this" + + + + + testStringForMatching(), StartsWith( "THIS", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" starts with: "this" (case insensitive) + + + + + testStringForMatching(), EndsWith( "substring" ) + + + "this string contains 'abc' as a substring" ends with: "substring" + + + + + testStringForMatching(), EndsWith( " SuBsTrInG", Catch::CaseSensitive::No ) + + + "this string contains 'abc' as a substring" ends with: " substring" (case insensitive) + + + + + +
+ + + empty.empty() + + + true + + + + + empty.size() == 0 + + + 0 == 0 + + + + + std::strcmp( empty.data(), "" ) == 0 + + + 0 == 0 + + + +
+
+ + + s.empty() == false + + + false == false + + + + + s.size() == 5 + + + 5 == 5 + + + + + std::strcmp( rawChars, "hello" ) == 0 + + + 0 == 0 + + + + + s.data() == rawChars + + + "hello" == "hello" + + + +
+
+ + + original == "original" + + + original == "original" + + + + + original.data() + + + original.data() + + + +
+
+ + + original.begin() == copy.begin() + + + "original string" == "original string" + + + +
+
+ + + original.begin() == copy.begin() + + + "original string" == "original string" + + + +
+
+
+ + + ss.empty() == false + + + false == false + + + + + ss.size() == 5 + + + 5 == 5 + + + + + std::strncmp( ss.data(), "hello", 5 ) == 0 + + + 0 == 0 + + + + + ss == "hello" + + + hello == "hello" + + + +
+ +
+
+
+ + + ss.size() == 6 + + + 6 == 6 + + + + + std::strcmp( ss.data(), "world!" ) == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + s.data() == s2.data() + + + "hello world!" == "hello world!" + + + +
+ +
+
+
+ + + s.data() == ss.data() + + + "hello world!" == "hello world!" + + + +
+ +
+
+
+ + + s.substr(s.size() + 1, 123).empty() + + + true + + + +
+ +
+
+
+ + + std::strcmp(ss.data(), "world!") == 0 + + + 0 == 0 + + + +
+ +
+
+
+ + + s.substr(1'000'000, 1).empty() + + + true + + + +
+ +
+
+ + + reinterpret_cast<char*>(buffer1) != reinterpret_cast<char*>(buffer2) + + + "Hello" != "Hello" + + + + + left == right + + + Hello == Hello + + + + + left != left.substr(0, 3) + + + Hello != Hel + + + +
+
+
+ + + sr == "a standard string" + + + a standard string == "a standard string" + + + + + sr.size() == stdStr.size() + + + 17 == 17 + + + +
+ +
+
+
+ + + sr == "a standard string" + + + a standard string == "a standard string" + + + + + sr.size() == stdStr.size() + + + 17 == 17 + + + +
+ +
+
+
+ + + sr == "a standard string" + + + a standard string == "a standard string" + + + + + sr.size() == stdStr.size() + + + 17 == 17 + + + +
+ +
+
+
+ + + stdStr == "a stringref" + + + "a stringref" == "a stringref" + + + + + stdStr.size() == sr.size() + + + 11 == 11 + + + +
+ +
+
+
+ + + stdStr == "a stringref" + + + "a stringref" == "a stringref" + + + + + stdStr.size() == sr.size() + + + 11 == 11 + + + +
+ +
+
+ + + lhs == "some string += the stringref contents" + + + "some string += the stringref contents" +== +"some string += the stringref contents" + + + +
+
+ + + together == "abrakadabra" + + + "abrakadabra" == "abrakadabra" + + + +
+ +
+ +
+ +
+
+ +
+ +
+ + + + ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + + + + ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + + + + ::Catch::Detail::stringify( with_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + ::Catch::Detail::stringify( no_null_terminator ) == R"("abc")"s + + + ""abc"" == ""abc"" + + + + + + + + minute == seconds + + + 1 m == 60 s + + + + + hour != seconds + + + 1 h != 60 s + + + + + micro != milli + + + 1 us != 1 ms + + + + + nano != micro + + + 1 ns != 1 us + + + + + + + + half_minute != femto_second + + + 1 [30/1]s != 1 fs + + + + + pico_second != atto_second + + + 1 ps != 1 as + + + + + + + + now != later + + + {iso8601-timestamp} +!= +{iso8601-timestamp} + + + + + + + + s1 == s2 + + + "if ($b == 10) { + $a = 20; +}" +== +"if ($b == 10) { + $a = 20; +} +" + + + + + +
+ + + what, ContainsSubstring( "[@zzz]" ) + + + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "[@zzz]" + + + + + what, ContainsSubstring( "file" ) + + + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "file" + + + + + what, ContainsSubstring( "2" ) + + + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "2" + + + + + what, ContainsSubstring( "10" ) + + + "error: tag alias, '[@zzz]' already registered. + First seen at: file:2 + Redefined at: file:10" contains: "10" + + + +
+
+ + + registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + + + registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + + + registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + + + + + registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + + + registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + + + +
+ +
+ + + + testCase.tags.size() == 2 + + + 2 == 2 + + + + + testCase.tags, VectorContains( Tag( "tag with spaces" ) ) && VectorContains( Tag( "I said \"good day\" sir!"_catch_sr ) ) + + + { {?}, {?} } ( Contains: {?} and Contains: {?} ) + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1 == 1 + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1 == 1 + + + + + + + + Template_Fixture<TestType>::m_a == 1 + + + 1.0 == 1 + + + + + + + + sizeof(TestType) > 0 + + + 1 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 4 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 1 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 4 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 4 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 1 > 0 + + + + + + + + sizeof(TestType) > 0 + + + 4 > 0 + + + + + + + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + + +
+ +
+ + + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + + +
+ +
+ + + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + + +
+ +
+ + + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + + +
+ +
+ + + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= V + + + 6 >= 6 + + +
+ + + v.size() == 2 * V + + + 12 == 12 + + + + + v.capacity() >= 2 * V + + + 12 >= 12 + + + +
+ + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= V + + + 6 >= 6 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= V + + + 6 >= 6 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= V + + + 6 >= 6 + + +
+ + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= 2 * V + + + 12 >= 12 + + + +
+ + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= V + + + 6 >= 6 + + +
+ + + v.size() == V + + + 6 == 6 + + + + + v.capacity() >= V + + + 6 >= 6 + + + +
+ +
+ + + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= V + + + 4 >= 4 + + +
+ + + v.size() == 2 * V + + + 8 == 8 + + + + + v.capacity() >= 2 * V + + + 8 >= 8 + + + +
+ + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= V + + + 4 >= 4 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= V + + + 4 >= 4 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= V + + + 4 >= 4 + + +
+ + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= 2 * V + + + 8 >= 8 + + + +
+ + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= V + + + 4 >= 4 + + +
+ + + v.size() == V + + + 4 == 4 + + + + + v.capacity() >= V + + + 4 >= 4 + + + +
+ +
+ + + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= V + + + 5 >= 5 + + +
+ + + v.size() == 2 * V + + + 10 == 10 + + + + + v.capacity() >= 2 * V + + + 10 >= 10 + + + +
+ + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= V + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= V + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= V + + + 5 >= 5 + + +
+ + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= 2 * V + + + 10 >= 10 + + + +
+ + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= V + + + 5 >= 5 + + +
+ + + v.size() == V + + + 5 == 5 + + + + + v.capacity() >= V + + + 5 >= 5 + + + +
+ +
+ + + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= V + + + 15 >= 15 + + +
+ + + v.size() == 2 * V + + + 30 == 30 + + + + + v.capacity() >= 2 * V + + + 30 >= 30 + + + +
+ + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= V + + + 15 >= 15 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= V + + + 15 >= 15 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= V + + + 15 >= 15 + + +
+ + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= 2 * V + + + 30 >= 30 + + + +
+ + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= V + + + 15 >= 15 + + +
+ + + v.size() == V + + + 15 == 15 + + + + + v.capacity() >= V + + + 15 >= 15 + + + +
+ +
+ + + + testCase.tags.size() == 1 + + + 1 == 1 + + + + + testCase.tags[0] == Tag( "tag1" ) + + + {?} == {?} + + + + + + + + + + + 0x == bit30and31 + + + 3221225472 (0x) == 3221225472 + + + + + + + + + + + true + + + true + + + + + false + + + false + + + + + true + + + true + + + + + false + + + false + + + + + + + + true + + + true + + + + + + + + + false + + + false + + + + + + + + + 1 == 2 + + + 1 == 2 + + + + + +
+ + + listingString, ContainsSubstring("[fakeTag]"s) + + + "All available tags: + 1 [fakeTag] +1 tag + +" contains: "[fakeTag]" + + + +
+
+ + + listingString, ContainsSubstring("fake reporter"s) + + + "Available reporters: + fake reporter: fake description + +" contains: "fake reporter" + + + +
+
+ + + listingString, ContainsSubstring( "fake test name"s ) && ContainsSubstring( "fakeTestTag"s ) + + + "All available test cases: + fake test name + [fakeTestTag] +1 test case + +" ( contains: "fake test name" and contains: "fakeTestTag" ) + + + +
+ +
+ + + + + + For some reason someone is throwing a string literal! + + + + + + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s1.isSuccessfullyCompleted() + + + true + + + + + testCase.isComplete() == false + + + false == false + + + + + ctx.completedCycle() + + + true + + + + + testCase.isSuccessfullyCompleted() + + + true + + + +
+ + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s1.isComplete() + + + true + + + + + s1.isSuccessfullyCompleted() == false + + + false == false + + + + + testCase.isComplete() == false + + + false == false + + + + + ctx.completedCycle() + + + true + + + + + testCase.isSuccessfullyCompleted() == false + + + false == false + + +
+ + + testCase2.isOpen() + + + true + + + + + s1b.isOpen() == false + + + false == false + + + + + ctx.completedCycle() + + + true + + + + + testCase.isComplete() + + + true + + + + + testCase.isSuccessfullyCompleted() + + + true + + + +
+ +
+ + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s1.isComplete() + + + true + + + + + s1.isSuccessfullyCompleted() == false + + + false == false + + + + + testCase.isComplete() == false + + + false == false + + + + + ctx.completedCycle() + + + true + + + + + testCase.isSuccessfullyCompleted() == false + + + false == false + + +
+ + + testCase2.isOpen() + + + true + + + + + s1b.isOpen() == false + + + false == false + + + + + s2.isOpen() + + + true + + + + + ctx.completedCycle() + + + true + + + + + testCase.isComplete() + + + true + + + + + testCase.isSuccessfullyCompleted() + + + true + + + +
+ +
+ + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s2.isOpen() == false + + + false == false + + + + + testCase.isComplete() == false + + + false == false + + +
+ + + testCase2.isOpen() + + + true + + + + + s1b.isOpen() == false + + + false == false + + + + + s2b.isOpen() + + + true + + + + + ctx.completedCycle() == false + + + false == false + + +
+ + + ctx.completedCycle() + + + true + + + + + s2b.isSuccessfullyCompleted() + + + true + + + + + testCase2.isComplete() == false + + + false == false + + + + + testCase2.isSuccessfullyCompleted() + + + true + + + +
+ +
+ +
+ + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s2.isOpen() == false + + + false == false + + + + + testCase.isComplete() == false + + + false == false + + +
+ + + testCase2.isOpen() + + + true + + + + + s1b.isOpen() == false + + + false == false + + + + + s2b.isOpen() + + + true + + + + + ctx.completedCycle() == false + + + false == false + + +
+ + + ctx.completedCycle() + + + true + + + + + s2b.isComplete() + + + true + + + + + s2b.isSuccessfullyCompleted() == false + + + false == false + + + + + testCase2.isSuccessfullyCompleted() == false + + + false == false + + + + + testCase3.isOpen() + + + true + + + + + s1c.isOpen() == false + + + false == false + + + + + s2c.isOpen() == false + + + false == false + + + + + testCase3.isSuccessfullyCompleted() + + + true + + + +
+ +
+ +
+ + + testCase.isOpen() + + + true + + + + + s1.isOpen() + + + true + + +
+ + + s2.isOpen() + + + true + + + + + s2.isComplete() + + + true + + + + + s1.isComplete() == false + + + false == false + + + + + s1.isComplete() + + + true + + + + + testCase.isComplete() == false + + + false == false + + + + + testCase.isComplete() + + + true + + + +
+ +
+ + + + trim(std::string(no_whitespace)) == no_whitespace + + + "There is no extra whitespace here" +== +"There is no extra whitespace here" + + + + + trim(std::string(leading_whitespace)) == no_whitespace + + + "There is no extra whitespace here" +== +"There is no extra whitespace here" + + + + + trim(std::string(trailing_whitespace)) == no_whitespace + + + "There is no extra whitespace here" +== +"There is no extra whitespace here" + + + + + trim(std::string(whitespace_at_both_ends)) == no_whitespace + + + "There is no extra whitespace here" +== +"There is no extra whitespace here" + + + + + trim(StringRef(no_whitespace)) == StringRef(no_whitespace) + + + There is no extra whitespace here +== +There is no extra whitespace here + + + + + trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) + + + There is no extra whitespace here +== +There is no extra whitespace here + + + + + trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) + + + There is no extra whitespace here +== +There is no extra whitespace here + + + + + trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) + + + There is no extra whitespace here +== +There is no extra whitespace here + + + + + + + 3.14 + + + + +
+ + + bptr->i == 3 + + + 3 == 3 + + + +
+
+ + + bptr->i == 3 + + + 3 == 3 + + + +
+ +
+ +
+ + + data, AllMatch(SizeIs(5)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } all match has size == 5 + + + + + data, !AllMatch(Contains(0) && Contains(1)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not all match ( contains element 0 and contains element 1 ) + + + +
+
+ + + needs_adl, AllMatch( Predicate<int>( []( int elem ) { return elem < 6; } ) ) + + + { 1, 2, 3, 4, 5 } all match matches undescribed predicate + + + +
+
+
+ + + mocked, allMatch + + + { 1, 2, 3, 4, 5 } all match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + mocked.derefed[1] + + + true + + + + + mocked.derefed[2] + + + true + + + + + mocked.derefed[3] + + + true + + + + + mocked.derefed[4] + + + true + + + +
+ +
+
+
+ + + mocked, !allMatch + + + { 1, 2, 3, 4, 5 } not all match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + mocked.derefed[1] + + + true + + + + + mocked.derefed[2] + + + true + + + + + !(mocked.derefed[3]) + + + !false + + + + + !(mocked.derefed[4]) + + + !false + + + +
+ +
+ +
+ +
+ + + data, AnyMatch(SizeIs(5)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } any match has size == 5 + + + + + data, !AnyMatch(Contains(0) && Contains(10)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not any match ( contains element 0 and contains element 10 ) + + + +
+
+ + + needs_adl, AnyMatch( Predicate<int>( []( int elem ) { return elem < 3; } ) ) + + + { 1, 2, 3, 4, 5 } any match matches undescribed predicate + + + +
+
+
+ + + mocked, !anyMatch + + + { 1, 2, 3, 4, 5 } not any match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + mocked.derefed[1] + + + true + + + + + mocked.derefed[2] + + + true + + + + + mocked.derefed[3] + + + true + + + + + mocked.derefed[4] + + + true + + + +
+ +
+
+
+ + + mocked, anyMatch + + + { 1, 2, 3, 4, 5 } any match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + !(mocked.derefed[1]) + + + !false + + + + + !(mocked.derefed[2]) + + + !false + + + + + !(mocked.derefed[3]) + + + !false + + + + + !(mocked.derefed[4]) + + + !false + + + +
+ +
+ +
+ +
+ + + data, NoneMatch(SizeIs(6)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } none match has size == 6 + + + + + data, !NoneMatch(Contains(0) && Contains(1)) + + + { { 0, 1, 2, 3, 5 }, { 4, -3, -2, 5, 0 }, { 0, 0, 0, 5, 0 }, { 0, -5, 0, 5, 0 }, { 1, 0, 0, -1, 5 } } not none match ( contains element 0 and contains element 1 ) + + + +
+
+ + + needs_adl, NoneMatch( Predicate<int>( []( int elem ) { return elem > 6; } ) ) + + + { 1, 2, 3, 4, 5 } none match matches undescribed predicate + + + +
+
+
+ + + mocked, noneMatch + + + { 1, 2, 3, 4, 5 } none match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + mocked.derefed[1] + + + true + + + + + mocked.derefed[2] + + + true + + + + + mocked.derefed[3] + + + true + + + + + mocked.derefed[4] + + + true + + + +
+ +
+
+
+ + + mocked, !noneMatch + + + { 1, 2, 3, 4, 5 } not none match matches undescribed predicate + + + + + mocked.derefed[0] + + + true + + + + + !(mocked.derefed[1]) + + + !false + + + + + !(mocked.derefed[2]) + + + !false + + + + + !(mocked.derefed[3]) + + + !false + + + + + !(mocked.derefed[4]) + + + !false + + + +
+ +
+ +
+ +
+ + + empty_vec, SizeIs(0) + + + { } has size == 0 + + + + + empty_vec, !SizeIs(2) + + + { } not has size == 2 + + + + + empty_vec, SizeIs(Lt(2)) + + + { } size matches is less than 2 + + + + + arr, SizeIs(2) + + + { 0, 0 } has size == 2 + + + + + arr, SizeIs( Lt(3)) + + + { 0, 0 } size matches is less than 3 + + + + + arr, !SizeIs(!Lt(3)) + + + { 0, 0 } not size matches not is less than 3 + + + + + map, SizeIs(3) + + + { {?}, {?}, {?} } has size == 3 + + + +
+
+ + + unrelated::ADL_size{}, SizeIs(12) + + + {?} has size == 12 + + + +
+
+ + + has_size{}, SizeIs(13) + + + {?} has size == 13 + + + +
+ +
+ + + + d == approx( 1.23 ) + + + 1.23 == Approx( 1.23 ) + + + + + d == approx( 1.22 ) + + + 1.23 == Approx( 1.22 ) + + + + + d == approx( 1.24 ) + + + 1.23 == Approx( 1.24 ) + + + + + d != approx( 1.25 ) + + + 1.23 != Approx( 1.25 ) + + + + + approx( d ) == 1.23 + + + Approx( 1.23 ) == 1.23 + + + + + approx( d ) == 1.22 + + + Approx( 1.23 ) == 1.22 + + + + + approx( d ) == 1.24 + + + Approx( 1.23 ) == 1.24 + + + + + approx( d ) != 1.25 + + + Approx( 1.23 ) != 1.25 + + + + + +
+ +
+ +
+ +
+ + + empty, Approx( empty ) + + + { } is approx: { } + + + +
+
+
+ + + v1, Approx( v1 ) + + + { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } + + + + + v1, Approx<double>( { 1., 2., 3. } ) + + + { 1.0, 2.0, 3.0 } is approx: { 1.0, 2.0, 3.0 } + + + +
+ +
+
+
+ + + v1, !Approx( temp ) + + + { 1.0, 2.0, 3.0 } not is approx: { 1.0, 2.0, 3.0, 4.0 } + + + +
+ +
+
+
+ + + v1, !Approx( v2 ) + + + { 1.0, 2.0, 3.0 } not is approx: { 1.5, 2.5, 3.5 } + + + + + v1, Approx( v2 ).margin( 0.5 ) + + + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + + + + + v1, Approx( v2 ).epsilon( 0.5 ) + + + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + + + + + v1, Approx( v2 ).epsilon( 0.1 ).scale( 500 ) + + + { 1.0, 2.0, 3.0 } is approx: { 1.5, 2.5, 3.5 } + + + +
+ +
+ +
+ +
+ + + empty, Approx( t1 ) + + + { } is approx: { 1.0, 2.0 } + + + +
+
+ + + v1, Approx( v2 ) + + + { 2.0, 4.0, 6.0 } is approx: { 1.0, 3.0, 5.0 } + + + +
+ +
+ +
+ + + v, VectorContains( 1 ) + + + { 1, 2, 3 } Contains: 1 + + + + + v, VectorContains( 2 ) + + + { 1, 2, 3 } Contains: 2 + + + + + v5, ( VectorContains<int, CustomAllocator<int>>( 2 ) ) + + + { 1, 2, 3 } Contains: 2 + + + +
+
+ + + v, Contains( v2 ) + + + { 1, 2, 3 } Contains: { 1, 2 } + + + + + v, Contains<int>( { 1, 2 } ) + + + { 1, 2, 3 } Contains: { 1, 2 } + + + + + v5, ( Contains<int, std::allocator<int>, CustomAllocator<int>>( v2 ) ) + + + { 1, 2, 3 } Contains: { 1, 2 } + + + + + v, Contains( v2 ) + + + { 1, 2, 3 } Contains: { 1, 2, 3 } + + + + + v, Contains( empty ) + + + { 1, 2, 3 } Contains: { } + + + + + empty, Contains( empty ) + + + { } Contains: { } + + + + + v5, ( Contains<int, std::allocator<int>, CustomAllocator<int>>( v2 ) ) + + + { 1, 2, 3 } Contains: { 1, 2, 3 } + + + + + v5, Contains( v6 ) + + + { 1, 2, 3 } Contains: { 1, 2 } + + + +
+
+ + + v, VectorContains( 1 ) && VectorContains( 2 ) + + + { 1, 2, 3 } ( Contains: 1 and Contains: 2 ) + + + +
+
+ + + v, Equals( v ) + + + { 1, 2, 3 } Equals: { 1, 2, 3 } + + + + + empty, Equals( empty ) + + + { } Equals: { } + + + + + v, Equals<int>( { 1, 2, 3 } ) + + + { 1, 2, 3 } Equals: { 1, 2, 3 } + + + + + v, Equals( v2 ) + + + { 1, 2, 3 } Equals: { 1, 2, 3 } + + + + + v5, ( Equals<int, std::allocator<int>, CustomAllocator<int>>( v2 ) ) + + + { 1, 2, 3 } Equals: { 1, 2, 3 } + + + + + v5, Equals( v6 ) + + + { 1, 2, 3 } Equals: { 1, 2, 3 } + + + +
+
+ + + v, UnorderedEquals( v ) + + + { 1, 2, 3 } UnorderedEquals: { 1, 2, 3 } + + + + + v, UnorderedEquals<int>( { 3, 2, 1 } ) + + + { 1, 2, 3 } UnorderedEquals: { 3, 2, 1 } + + + + + empty, UnorderedEquals( empty ) + + + { } UnorderedEquals: { } + + + + + permuted, UnorderedEquals( v ) + + + { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } + + + + + permuted, UnorderedEquals( v ) + + + { 2, 3, 1 } UnorderedEquals: { 1, 2, 3 } + + + + + v5, ( UnorderedEquals<int, std::allocator<int>, CustomAllocator<int>>( permuted ) ) + + + { 1, 2, 3 } UnorderedEquals: { 2, 3, 1 } + + + + + v5_permuted, UnorderedEquals( v5 ) + + + { 1, 3, 2 } UnorderedEquals: { 1, 2, 3 } + + + +
+ +
+ +
+ + + v, VectorContains( -1 ) + + + { 1, 2, 3 } Contains: -1 + + + + + empty, VectorContains( 1 ) + + + { } Contains: 1 + + + +
+
+ + + empty, Contains( v ) + + + { } Contains: { 1, 2, 3 } + + + + + v, Contains( v2 ) + + + { 1, 2, 3 } Contains: { 1, 2, 4 } + + + +
+
+ + + v, Equals( v2 ) + + + { 1, 2, 3 } Equals: { 1, 2 } + + + + + v2, Equals( v ) + + + { 1, 2 } Equals: { 1, 2, 3 } + + + + + empty, Equals( v ) + + + { } Equals: { 1, 2, 3 } + + + + + v, Equals( empty ) + + + { 1, 2, 3 } Equals: { } + + + +
+
+ + + v, UnorderedEquals( empty ) + + + { 1, 2, 3 } UnorderedEquals: { } + + + + + empty, UnorderedEquals( v ) + + + { } UnorderedEquals: { 1, 2, 3 } + + + + + permuted, UnorderedEquals( v ) + + + { 1, 3 } UnorderedEquals: { 1, 2, 3 } + + + + + permuted, UnorderedEquals( v ) + + + { 3, 1 } UnorderedEquals: { 1, 2, 3 } + + + +
+ +
+ + + + thisThrows(), std::domain_error + + + thisThrows(), std::domain_error + + + + + thisDoesntThrow() + + + thisDoesntThrow() + + + + + thisThrows() + + + thisThrows() + + + + + + + unexpected exception + + + + + + + thisThrows() == 0 + + + thisThrows() == 0 + + + expected exception + + + + + + + + thisThrows() == 0 + + + thisThrows() == 0 + + + expected exception + + + + + + + + thisThrows() == 0 + + + thisThrows() == 0 + + + expected exception + + + + + +
+ + unexpected exception + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + + encode( "normal string" ) == "normal string" + + + "normal string" == "normal string" + + + +
+
+ + + encode( "" ) == "" + + + "" == "" + + + +
+
+ + + encode( "smith & jones" ) == "smith &amp; jones" + + + "smith &amp; jones" == "smith &amp; jones" + + + +
+
+ + + encode( "smith < jones" ) == "smith &lt; jones" + + + "smith &lt; jones" == "smith &lt; jones" + + + +
+
+ + + encode( "smith > jones" ) == "smith > jones" + + + "smith > jones" == "smith > jones" + + + + + encode( "smith ]]> jones" ) == "smith ]]&gt; jones" + + + "smith ]]&gt; jones" +== +"smith ]]&gt; jones" + + + +
+
+ + + encode( stringWithQuotes ) == stringWithQuotes + + + "don't "quote" me on that" +== +"don't "quote" me on that" + + + + + encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" + + + "don't &quot;quote&quot; me on that" +== +"don't &quot;quote&quot; me on that" + + + +
+
+ + + encode( "[\x01]" ) == "[\\x01]" + + + "[\x01]" == "[\x01]" + + + +
+
+ + + encode( "[\x7F]" ) == "[\\x7F]" + + + "[\x7F]" == "[\x7F]" + + + +
+ +
+ + + + stream.str(), ContainsSubstring(R"(attr1="true")") && ContainsSubstring(R"(attr2="false")") + + + "<?xml version="1.0" encoding="UTF-8"?> +<Element1 attr1="true" attr2="false"/> +" ( contains: "attr1="true"" and contains: "attr2="false"" ) + + + + + + + + analysis.mean.point.count() == 23 + + + 23.0 == 23 + + + + + analysis.mean.lower_bound.count() == 23 + + + 23.0 == 23 + + + + + analysis.mean.upper_bound.count() == 23 + + + 23.0 == 23 + + + + + analysis.standard_deviation.point.count() == 0 + + + 0.0 == 0 + + + + + analysis.standard_deviation.lower_bound.count() == 0 + + + 0.0 == 0 + + + + + analysis.standard_deviation.upper_bound.count() == 0 + + + 0.0 == 0 + + + + + analysis.outliers.total() == 0 + + + 0 == 0 + + + + + analysis.outliers.low_mild == 0 + + + 0 == 0 + + + + + analysis.outliers.low_severe == 0 + + + 0 == 0 + + + + + analysis.outliers.high_mild == 0 + + + 0 == 0 + + + + + analysis.outliers.high_severe == 0 + + + 0 == 0 + + + + + analysis.outliers.samples_seen == 0 + + + 0 == 0 + + + + + analysis.outlier_variance == 0 + + + 0.0 == 0 + + + + + + + + Catch::Detail::stringify( empty ) == "{ }" + + + "{ }" == "{ }" + + + + + Catch::Detail::stringify( oneValue ) == "{ 42 }" + + + "{ 42 }" == "{ 42 }" + + + + + Catch::Detail::stringify( twoValues ) == "{ 42, 250 }" + + + "{ 42, 250 }" == "{ 42, 250 }" + + + + + +
+ + + model.started == 1 + + + 1 == 1 + + + + + model.finished == 0 + + + 0 == 0 + + + + + model.started == 1 + + + 1 == 1 + + + + + model.finished == 1 + + + 1 == 1 + + + + + called == 1 + + + 1 == 1 + + + +
+
+ + + model.started == 0 + + + 0 == 0 + + + + + model.finished == 0 + + + 0 == 0 + + + + + model.started == 0 + + + 0 == 0 + + + + + model.finished == 0 + + + 0 == 0 + + + + + called == 1 + + + 1 == 1 + + + +
+ +
+ + + + obj.prop != 0 + + + 0x != 0 + + + + + + + + flag + + + true + + + + + testCheckedElse( true ) + + + true + + + + + + + + flag + + + false + + + + + testCheckedElse( false ) + + + false + + + + + + + + flag + + + true + + + + + testCheckedIf( true ) + + + true + + + + + + + + flag + + + false + + + + + testCheckedIf( false ) + + + false + + + + + +
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 0 == 0 + + + + + o.low_mild == lom + + + 0 == 0 + + + + + o.high_mild == him + + + 0 == 0 + + + + + o.high_severe == his + + + 0 == 0 + + + + + o.total() == los + lom + him + his + + + 0 == 0 + + + +
+
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 1 == 1 + + + + + o.low_mild == lom + + + 0 == 0 + + + + + o.high_mild == him + + + 0 == 0 + + + + + o.high_severe == his + + + 0 == 0 + + + + + o.total() == los + lom + him + his + + + 1 == 1 + + + +
+
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 0 == 0 + + + + + o.low_mild == lom + + + 1 == 1 + + + + + o.high_mild == him + + + 0 == 0 + + + + + o.high_severe == his + + + 0 == 0 + + + + + o.total() == los + lom + him + his + + + 1 == 1 + + + +
+
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 0 == 0 + + + + + o.low_mild == lom + + + 0 == 0 + + + + + o.high_mild == him + + + 1 == 1 + + + + + o.high_severe == his + + + 0 == 0 + + + + + o.total() == los + lom + him + his + + + 1 == 1 + + + +
+
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 0 == 0 + + + + + o.low_mild == lom + + + 0 == 0 + + + + + o.high_mild == him + + + 0 == 0 + + + + + o.high_severe == his + + + 1 == 1 + + + + + o.total() == los + lom + him + his + + + 1 == 1 + + + +
+
+ + + o.samples_seen == static_cast<int>(x.size()) + + + 6 == 6 + + + + + o.low_severe == los + + + 1 == 1 + + + + + o.low_mild == lom + + + 0 == 0 + + + + + o.high_mild == him + + + 1 == 1 + + + + + o.high_severe == his + + + 0 == 0 + + + + + o.total() == los + lom + him + his + + + 2 == 2 + + + +
+ +
+ + + + unsigned_char_var == 1 + + + 1 == 1 + + + + + unsigned_short_var == 1 + + + 1 == 1 + + + + + unsigned_int_var == 1 + + + 1 == 1 + + + + + unsigned_long_var == 1 + + + 1 == 1 + + + + + + + + long_var == unsigned_char_var + + + 1 == 1 + + + + + long_var == unsigned_short_var + + + 1 == 1 + + + + + long_var == unsigned_int_var + + + 1 == 1 + + + + + long_var == unsigned_long_var + + + 1 == 1 + + + + + + + + convertToBits( 0.f ) == 0 + + + 0 == 0 + + + + + convertToBits( -0.f ) == ( 1ULL << 31 ) + + + 2147483648 (0x) +== +2147483648 (0x) + + + + + convertToBits( 0. ) == 0 + + + 0 == 0 + + + + + convertToBits( -0. ) == ( 1ULL << 63 ) + + + 9223372036854775808 (0x) +== +9223372036854775808 (0x) + + + + + convertToBits( std::numeric_limits<float>::denorm_min() ) == 1 + + + 1 == 1 + + + + + convertToBits( std::numeric_limits<double>::denorm_min() ) == 1 + + + 1 == 1 + + + + + + + + Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo) + + + Catch::TestCaseInfo("", { "test with an empty tag", "[]" }, dummySourceLineInfo) + + + + + + + + erfc_inv(1.103560) == Approx(-0.09203687623843015) + + + -0.0920368762 == Approx( -0.0920368762 ) + + + + + erfc_inv(1.067400) == Approx(-0.05980291115763361) + + + -0.0598029112 == Approx( -0.0598029112 ) + + + + + erfc_inv(0.050000) == Approx(1.38590382434967796) + + + 1.3859038243 == Approx( 1.3859038243 ) + + + + + + + + res.mean.count() == rate + + + 2000.0 == 2000 (0x) + + + + + res.outliers.total() == 0 + + + 0 == 0 + + + + + +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ + + + + + + + + + + + Previous info should not be seen + + + + + + previous unscoped info SHOULD not be seen + + + + + + + + + + + + + l == std::numeric_limits<long long>::max() + + + 9223372036854775807 (0x) +== +9223372036854775807 (0x) + + + + + +
+ + + b > a + + + 0 > 1 + + + +
+
+ + + b > a + + + 1 > 1 + + + +
+
+ + + b > a + + + 2 > 1 + + + +
+
+ + + b > a + + + 3 > 1 + + + +
+
+ + + b > a + + + 4 > 1 + + + +
+
+ + + b > a + + + 5 > 1 + + + +
+
+ + + b > a + + + 6 > 1 + + + +
+
+ + + b > a + + + 7 > 1 + + + +
+
+ + + b > a + + + 8 > 1 + + + +
+
+ + + b > a + + + 9 > 1 + + + +
+ +
+ + + Testing if fib[0] (1) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + Testing if fib[1] (1) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + Testing if fib[2] (2) is even + + + + ( fib[i] % 2 ) == 0 + + + 0 == 0 + + + + Testing if fib[3] (3) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + Testing if fib[4] (5) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + Testing if fib[5] (8) is even + + + + ( fib[i] % 2 ) == 0 + + + 0 == 0 + + + + Testing if fib[6] (13) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + Testing if fib[7] (21) is even + + + + ( fib[i] % 2 ) == 0 + + + 1 == 0 + + + + + +
+ + + !(lval.has_moved) + + + !false + + + +
+
+ + + rval.has_moved + + + true + + + +
+
+ + + *ptr == std::tuple<int, double, int>{1, 2., 3} + + + {?} == {?} + + + +
+ +
+ + + + m == 19. + + + 19.0 == 19.0 + + + + + + + + x == 17 + + + 17 == 17 + + + + + x == 23 + + + 23 == 23 + + + + + r.elapsed.count() == 42 + + + 42 == 42 + + + + + r.result == 23 + + + 23 == 23 + + + + + r.iterations == 1 + + + 1 == 1 + + + + + s.elapsed.count() == 69 + + + 69 == 69 + + + + + s.result == 17 + + + 17 == 17 + + + + + s.iterations == 1 + + + 1 == 1 + + + + + + + info + + + unscoped info + + + and warn may mix + + + info + + + unscoped info + + + they are not cleared after warnings + + + + +
+
+ + + a == b + + + 1 == 2 + + + +
+ +
+
+
+ + + a != b + + + 1 != 2 + + + +
+ +
+
+
+ + + a < b + + + 1 < 2 + + + +
+ +
+ +
+ +
+ + + a != b + + + 1 != 2 + + + + + b != a + + + 2 != 1 + + +
+ + + a != b + + + 1 != 2 + + + +
+ +
+ +
+ + + + s == "7" + + + "7" == "7" + + + + + + + + ti == typeid(int) + + + {?} == {?} + + + + + + + + normal_cdf(0.000000) == Approx(0.50000000000000000) + + + 0.5 == Approx( 0.5 ) + + + + + normal_cdf(1.000000) == Approx(0.84134474606854293) + + + 0.8413447461 == Approx( 0.8413447461 ) + + + + + normal_cdf(-1.000000) == Approx(0.15865525393145705) + + + 0.1586552539 == Approx( 0.1586552539 ) + + + + + normal_cdf(2.809729) == Approx(0.99752083845315409) + + + 0.9975208385 == Approx( 0.9975208385 ) + + + + + normal_cdf(-1.352570) == Approx(0.08809652095066035) + + + 0.088096521 == Approx( 0.088096521 ) + + + + + + + + normal_quantile(0.551780) == Approx(0.13015979861484198) + + + 0.1301597986 == Approx( 0.1301597986 ) + + + + + normal_quantile(0.533700) == Approx(0.08457408802851875) + + + 0.084574088 == Approx( 0.084574088 ) + + + + + normal_quantile(0.025000) == Approx(-1.95996398454005449) + + + -1.9599639845 == Approx( -1.9599639845 ) + + + + + + + + + + this MAY be seen only for the FIRST assertion IF info is printed for passing assertions + + + + true + + + true + + + + this MAY be seen only for the SECOND assertion IF info is printed for passing assertions + + + + true + + + true + + + + this SHOULD be seen + + + + false + + + false + + + + + + + + makeString( false ) != static_cast<char*>(0) + + + "valid string" != {null string} + + + + + makeString( true ) == static_cast<char*>(0) + + + {null string} == {null string} + + + + + + + + ptr.get() == 0 + + + 0 == 0 + + + + + + + + ::Catch::Detail::stringify( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" + + + "{ { 42, "Arthur" }, { "Ford", 24 } }" +== +"{ { 42, "Arthur" }, { "Ford", 24 } }" + + + + + +
+ + + parseEnums( "" ), Equals( std::vector<Catch::StringRef>{} ) + + + { } Equals: { } + + + +
+
+ + + parseEnums( "ClassName::EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) + + + { Value1 } Equals: { Value1 } + + + + + parseEnums( "Value1" ), Equals( std::vector<Catch::StringRef>{"Value1"} ) + + + { Value1 } Equals: { Value1 } + + + + + parseEnums( "EnumName::Value1" ), Equals(std::vector<Catch::StringRef>{"Value1"} ) + + + { Value1 } Equals: { Value1 } + + + +
+
+ + + parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2"} ) + + + { Value1, Value2 } Equals: { Value1, Value2 } + + + + + parseEnums( "ClassName::EnumName::Value1, ClassName::EnumName::Value2, ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) + + + { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } + + + + + parseEnums( "ClassName::EnumName::Value1,ClassName::EnumName::Value2 , ClassName::EnumName::Value3" ), Equals( std::vector<Catch::StringRef>{"Value1", "Value2", "Value3"} ) + + + { Value1, Value2, Value3 } Equals: { Value1, Value2, Value3 } + + + +
+ +
+ + + + p == 0 + + + 0 == 0 + + + + + + + this MAY be seen IF info is printed for passing assertions + + + + true + + + true + + + + + + + this SHOULD be seen + + + this SHOULD also be seen + + + + false + + + false + + + + + + + this SHOULD be seen only ONCE + + + + false + + + false + + + + + true + + + true + + + + this MAY also be seen only ONCE IF info is printed for passing assertions + + + + true + + + true + + + + + true + + + true + + + + + +
+ + + a != b + + + 1 != 2 + + + + + b != a + + + 2 != 1 + + + +
+
+ + + a != b + + + 1 != 2 + + + +
+ +
+ +
+ + + Catch::replaceInPlace(letters, "b", "z") + + + true + + + + + letters == "azcdefcg" + + + "azcdefcg" == "azcdefcg" + + + +
+
+ + + Catch::replaceInPlace(letters, "c", "z") + + + true + + + + + letters == "abzdefzg" + + + "abzdefzg" == "abzdefzg" + + + +
+
+ + + Catch::replaceInPlace(letters, "a", "z") + + + true + + + + + letters == "zbcdefcg" + + + "zbcdefcg" == "zbcdefcg" + + + +
+
+ + + Catch::replaceInPlace(letters, "g", "z") + + + true + + + + + letters == "abcdefcz" + + + "abcdefcz" == "abcdefcz" + + + +
+
+ + + Catch::replaceInPlace(letters, letters, "replaced") + + + true + + + + + letters == "replaced" + + + "replaced" == "replaced" + + + +
+
+ + + !(Catch::replaceInPlace(letters, "x", "z")) + + + !false + + + + + letters == letters + + + "abcdefcg" == "abcdefcg" + + + +
+
+ + + Catch::replaceInPlace(s, "'", "|'") + + + true + + + + + s == "didn|'t" + + + "didn|'t" == "didn|'t" + + + +
+ +
+ + + + res.size() == count + + + 10 == 10 + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + res[i] == rate + + + 1000.0 == 1000 (0x) + + + + + + + + meter.runs() >= old_runs + + + 1 >= 1 + + + + + meter.runs() >= old_runs + + + 2 >= 1 + + + + + meter.runs() >= old_runs + + + 4 >= 2 + + + + + meter.runs() >= old_runs + + + 8 >= 4 + + + + + meter.runs() >= old_runs + + + 16 >= 8 + + + + + meter.runs() >= old_runs + + + 32 >= 16 + + + + + meter.runs() >= old_runs + + + 64 >= 32 + + + + + meter.runs() >= old_runs + + + 128 >= 64 + + + + + Timing.elapsed >= time + + + 128 ns >= 100 ns + + + + + Timing.result == Timing.iterations + 17 + + + 145 == 145 + + + + + Timing.iterations >= time.count() + + + 128 >= 100 + + + + + + + + x >= old_x + + + 1 >= 1 + + + + + x >= old_x + + + 2 >= 1 + + + + + x >= old_x + + + 4 >= 2 + + + + + x >= old_x + + + 8 >= 4 + + + + + x >= old_x + + + 16 >= 8 + + + + + x >= old_x + + + 32 >= 16 + + + + + x >= old_x + + + 64 >= 32 + + + + + x >= old_x + + + 128 >= 64 + + + + + Timing.elapsed >= time + + + 128 ns >= 100 ns + + + + + Timing.result == Timing.iterations + 17 + + + 145 == 145 + + + + + Timing.iterations >= time.count() + + + 128 >= 100 + + + + + + + + + + 3 + + + + false + + + false + + + + + + + hi + + + i := 7 + + + + false + + + false + + + + + + + + testcase.tags, VectorContains( Tag( "magic-tag" ) ) && VectorContains( Tag( "."_catch_sr ) ) + + + { {?}, {?} } ( Contains: {?} and Contains: {?} ) + + + + + + + + splitStringRef("", ','), Equals(std::vector<StringRef>()) + + + { } Equals: { } + + + + + splitStringRef("abc", ','), Equals(std::vector<StringRef>{"abc"}) + + + { abc } Equals: { abc } + + + + + splitStringRef("abc,def", ','), Equals(std::vector<StringRef>{"abc", "def"}) + + + { abc, def } Equals: { abc, def } + + + + + + + Count 1 to 3... + + + 1 + + + 2 + + + 3 + + + + false + + + false + + + + Count 4 to 6... + + + 4 + + + 5 + + + 6 + + + + false + + + false + + + + + + + + !(startsWith("", 'c')) + + + !false + + + + + startsWith(std::string("abc"), 'a') + + + true + + + + + startsWith("def"_catch_sr, 'd') + + + true + + + + + +
+ + + Catch::Detail::stringify( emptyMap ) == "{ }" + + + "{ }" == "{ }" + + + +
+
+ + + Catch::Detail::stringify( map ) == "{ { \"one\", 1 } }" + + + "{ { "one", 1 } }" == "{ { "one", 1 } }" + + + +
+
+ + + Catch::Detail::stringify( map ) == "{ { \"abc\", 1 }, { \"def\", 2 }, { \"ghi\", 3 } }" + + + "{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" +== +"{ { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }" + + + +
+ +
+ + + + ::Catch::Detail::stringify(value) == "{ 34, \"xyzzy\" }" + + + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + + + + + + + + ::Catch::Detail::stringify( value ) == "{ 34, \"xyzzy\" }" + + + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + + + + + +
+ + + Catch::Detail::stringify( emptySet ) == "{ }" + + + "{ }" == "{ }" + + + +
+
+ + + Catch::Detail::stringify( set ) == "{ \"one\" }" + + + "{ "one" }" == "{ "one" }" + + + +
+
+ + + Catch::Detail::stringify( set ) == "{ \"abc\", \"def\", \"ghi\" }" + + + "{ "abc", "def", "ghi" }" +== +"{ "abc", "def", "ghi" }" + + + +
+ +
+ + + + ::Catch::Detail::stringify( pr ) == "{ { \"green\", 55 } }" + + + "{ { "green", 55 } }" +== +"{ { "green", 55 } }" + + + + + + + + ::Catch::Detail::stringify(streamable_range{}) == "op<<(streamable_range)" + + + "op<<(streamable_range)" +== +"op<<(streamable_range)" + + + + + ::Catch::Detail::stringify(stringmaker_range{}) == "stringmaker(streamable_range)" + + + "stringmaker(streamable_range)" +== +"stringmaker(streamable_range)" + + + + + ::Catch::Detail::stringify(just_range{}) == "{ 1, 2, 3, 4 }" + + + "{ 1, 2, 3, 4 }" == "{ 1, 2, 3, 4 }" + + + + + ::Catch::Detail::stringify(disabled_range{}) == "{?}" + + + "{?}" == "{?}" + + + + + + + + ::Catch::Detail::stringify( item ) == "StringMaker<has_maker>" + + + "StringMaker<has_maker>" +== +"StringMaker<has_maker>" + + + + + + + + ::Catch::Detail::stringify( item ) == "StringMaker<has_maker_and_operator>" + + + "StringMaker<has_maker_and_operator>" +== +"StringMaker<has_maker_and_operator>" + + + + + + + + ::Catch::Detail::stringify(item) == "{?}" + + + "{?}" == "{?}" + + + + + + + + ::Catch::Detail::stringify( item ) == "operator<<( has_operator )" + + + "operator<<( has_operator )" +== +"operator<<( has_operator )" + + + + + + + + ::Catch::Detail::stringify( item ) == "operator<<( has_template_operator )" + + + "operator<<( has_template_operator )" +== +"operator<<( has_template_operator )" + + + + + + + + ::Catch::Detail::stringify( v ) == "{ StringMaker<has_maker> }" + + + "{ StringMaker<has_maker> }" +== +"{ StringMaker<has_maker> }" + + + + + + + + ::Catch::Detail::stringify( v ) == "{ StringMaker<has_maker_and_operator> }" + + + "{ StringMaker<has_maker_and_operator> }" +== +"{ StringMaker<has_maker_and_operator> }" + + + + + + + + ::Catch::Detail::stringify( v ) == "{ operator<<( has_operator ) }" + + + "{ operator<<( has_operator ) }" +== +"{ operator<<( has_operator ) }" + + + + + + + + data.str.size() == data.len + + + 3 == 3 + + + + + data.str.size() == data.len + + + 3 == 3 + + + + + data.str.size() == data.len + + + 5 == 5 + + + + + data.str.size() == data.len + + + 4 == 4 + + + + + + + + strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) + + + 5 == 5 + + + + + strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) + + + 6 == 6 + + + + + strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) + + + 5 == 5 + + + + + strlen(std::get<0>(data)) == static_cast<size_t>(std::get<1>(data)) + + + 6 == 6 + + + + + + + + testcase.tags.size() == 1 + + + 1 == 1 + + + + + testcase.tags[0].original == "magic.tag"_catch_sr + + + magic.tag == magic.tag + + + + + + + Why would you throw a std::string? + + + + + + + result == "\"wide load\"" + + + ""wide load"" == ""wide load"" + + + + + + + + result == "\"wide load\"" + + + ""wide load"" == ""wide load"" + + + + + + + + result == "\"wide load\"" + + + ""wide load"" == ""wide load"" + + + + + + + + result == "\"wide load\"" + + + ""wide load"" == ""wide load"" + + + + + + + + ::Catch::Detail::stringify(e0) == "E2/V0" + + + "E2/V0" == "E2/V0" + + + + + ::Catch::Detail::stringify(e1) == "E2/V1" + + + "E2/V1" == "E2/V1" + + + + + ::Catch::Detail::stringify(e3) == "Unknown enum value 10" + + + "Unknown enum value 10" +== +"Unknown enum value 10" + + + + + + + + ::Catch::Detail::stringify(e0) == "0" + + + "0" == "0" + + + + + ::Catch::Detail::stringify(e1) == "1" + + + "1" == "1" + + + + + + + + ::Catch::Detail::stringify(e0) == "E2{0}" + + + "E2{0}" == "E2{0}" + + + + + ::Catch::Detail::stringify(e1) == "E2{1}" + + + "E2{1}" == "E2{1}" + + + + + + + + ::Catch::Detail::stringify(e0) == "0" + + + "0" == "0" + + + + + ::Catch::Detail::stringify(e1) == "1" + + + "1" == "1" + + + + + + + + "{ }" == ::Catch::Detail::stringify(type{}) + + + "{ }" == "{ }" + + + + + "{ }" == ::Catch::Detail::stringify(value) + + + "{ }" == "{ }" + + + + + + + + "1.2f" == ::Catch::Detail::stringify(float(1.2)) + + + "1.2f" == "1.2f" + + + + + "{ 1.2f, 0 }" == ::Catch::Detail::stringify(type{1.2f,0}) + + + "{ 1.2f, 0 }" == "{ 1.2f, 0 }" + + + + + + + + "{ 0 }" == ::Catch::Detail::stringify(type{0}) + + + "{ 0 }" == "{ 0 }" + + + + + + + + "{ 0, 42, \"Catch me\" }" == ::Catch::Detail::stringify(value) + + + "{ 0, 42, "Catch me" }" +== +"{ 0, 42, "Catch me" }" + + + + + + + + "{ \"hello\", \"world\" }" == ::Catch::Detail::stringify(type{"hello","world"}) + + + "{ "hello", "world" }" +== +"{ "hello", "world" }" + + + + + + + + "{ { 42 }, { }, 1.2f }" == ::Catch::Detail::stringify(value) + + + "{ { 42 }, { }, 1.2f }" +== +"{ { 42 }, { }, 1.2f }" + + + + + + + + e.point == 23 + + + 23.0 == 23 + + + + + e.upper_bound == 23 + + + 23.0 == 23 + + + + + e.lower_bound == 23 + + + 23.0 == 23 + + + + + e.confidence_interval == 0.95 + + + 0.95 == 0.95 + + + + + +
+ + + !(ptr) + + + !{?} + + + + + ptr.get() == 0 + + + 0 == 0 + + + +
+
+ + + ptr + + + {?} + + + + + *ptr == 0 + + + 0 == 0 + + + + + ptr.get() == naked_ptr + + + 0x == 0x + + +
+ + + !(ptr) + + + !{?} + + + + + ptr.get() == 0 + + + 0 == 0 + + + +
+ +
+
+ + + ptr + + + {?} + + + + + *ptr == 0 + + + 0 == 0 + + + + + ptr.get() == naked_ptr + + + 0x == 0x + + +
+ + + ptr + + + {?} + + + + + ptr.get() != 0 + + + 0x != 0 + + + + + *ptr == 2 + + + 2 == 2 + + + +
+ +
+
+ + + !(ptr) + + + !{?} + + + + + ptr.get() == 0 + + + 0 == 0 + + + +
+
+ + + !(ptr1) + + + !{?} + + + + + ptr2 + + + {?} + + + + + *ptr2 == 1 + + + 1 == 1 + + + +
+
+ + + !(ptr2) + + + !{?} + + + + + ptr1 + + + {?} + + + + + *ptr1 == 2 + + + 2 == 2 + + + +
+
+ + + *ptr1 == 2 + + + 2 == 2 + + + + + *ptr2 == 1 + + + 1 == 1 + + + +
+ +
+ + + + ::Catch::Detail::stringify(v) == "{ }" + + + "{ }" == "{ }" + + + + + ::Catch::Detail::stringify(v) == "{ { \"hello\" }, { \"world\" } }" + + + "{ { "hello" }, { "world" } }" +== +"{ { "hello" }, { "world" } }" + + + + + + + + ::Catch::Detail::stringify(bools) == "{ }" + + + "{ }" == "{ }" + + + + + ::Catch::Detail::stringify(bools) == "{ true }" + + + "{ true }" == "{ true }" + + + + + ::Catch::Detail::stringify(bools) == "{ true, false }" + + + "{ true, false }" == "{ true, false }" + + + + + + + + ::Catch::Detail::stringify(vv) == "{ }" + + + "{ }" == "{ }" + + + + + ::Catch::Detail::stringify(vv) == "{ 42 }" + + + "{ 42 }" == "{ 42 }" + + + + + ::Catch::Detail::stringify(vv) == "{ 42, 250 }" + + + "{ 42, 250 }" == "{ 42, 250 }" + + + + + + + + ::Catch::Detail::stringify(vv) == "{ }" + + + "{ }" == "{ }" + + + + + ::Catch::Detail::stringify(vv) == "{ 42 }" + + + "{ 42 }" == "{ 42 }" + + + + + ::Catch::Detail::stringify(vv) == "{ 42, 250 }" + + + "{ 42, 250 }" == "{ 42, 250 }" + + + + + + + + ::Catch::Detail::stringify(vv) == "{ }" + + + "{ }" == "{ }" + + + + + ::Catch::Detail::stringify(vv) == "{ \"hello\" }" + + + "{ "hello" }" == "{ "hello" }" + + + + + ::Catch::Detail::stringify(vv) == "{ \"hello\", \"world\" }" + + + "{ "hello", "world" }" +== +"{ "hello", "world" }" + + + + + + + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 10 + + + 10 == 10 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 0 + + + 0 == 0 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.capacity() == 0 + + + 0 == 0 + + + +
+ +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 10 + + + 10 >= 10 + + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + +
+ + + v.size() == 5 + + + 5 == 5 + + + + + v.capacity() >= 5 + + + 5 >= 5 + + + +
+ +
+ + + + (iterations * rate) > Catch::Benchmark::Detail::warmup_time.count() + + + 160000000 (0x) > 100 + + + + + (end - start) > Catch::Benchmark::Detail::warmup_time + + + 310016000 ns > 100 ms + + + + + + + + q1 == 14.5 + + + 14.5 == 14.5 + + + + + med == 18. + + + 18.0 == 18.0 + + + + + q3 == 23. + + + 23.0 == 23.0 + + + + + +
+ +
+
+ +
+ +
+ + +
diff --git a/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp b/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp index 16a77bc193..2210a3a447 100644 --- a/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp +++ b/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp @@ -3,12 +3,12 @@ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ +#include #include #include #include #include #include -#include #include #include @@ -345,7 +345,7 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" CHECK(config.shouldDebugBreak == false); CHECK(config.abortAfter == -1); CHECK(config.noThrow == false); - CHECK(config.reporterName == "console"); + CHECK(config.reporterSpecifications == std::vector{ {"console", {}} }); Catch::Config cfg(config); CHECK_FALSE(cfg.hasTestFilters()); @@ -384,23 +384,28 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" } SECTION("reporter") { + using vec_ReporterAndFile = std::vector; + using namespace std::string_literals; SECTION("-r/console") { - CHECK(cli.parse({"test", "-r", "console"})); + auto result = cli.parse({"test", "-r", "console"}); + CAPTURE(result.errorMessage()); + CHECK(result); - REQUIRE(config.reporterName == "console"); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"console", {}} }); } SECTION("-r/xml") { - CHECK(cli.parse({"test", "-r", "xml"})); + auto result = cli.parse({"test", "-r", "xml"}); + CAPTURE(result.errorMessage()); + CHECK(result); - REQUIRE(config.reporterName == "xml"); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"xml", {}} }); } SECTION("--reporter/junit") { - CHECK(cli.parse({"test", "--reporter", "junit"})); + auto result = cli.parse({"test", "--reporter", "junit"}); + CAPTURE(result.errorMessage()); + CHECK(result); - REQUIRE(config.reporterName == "junit"); - } - SECTION("Only one reporter is accepted") { - REQUIRE_FALSE(cli.parse({ "test", "-r", "xml", "-r", "junit" })); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"junit", {}} }); } SECTION("must match one of the available ones") { auto result = cli.parse({"test", "--reporter", "unsupported"}); @@ -408,6 +413,39 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" REQUIRE_THAT(result.errorMessage(), ContainsSubstring("Unrecognized reporter")); } + SECTION("With output file") { + auto result = cli.parse({ "test", "-r", "console::out.txt" }); + CAPTURE(result.errorMessage()); + CHECK(result); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"console", "out.txt"s} }); + } + SECTION("With Windows-like absolute path as output file") { + auto result = cli.parse({ "test", "-r", "console::C:\\Temp\\out.txt" }); + CAPTURE(result.errorMessage()); + CHECK(result); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"console", "C:\\Temp\\out.txt"s} }); + } + SECTION("Output file cannot be empty") { + auto result = cli.parse({"test", "--reporter", "console::"}); + CHECK(!result); + + REQUIRE_THAT(result.errorMessage(), ContainsSubstring("empty filename")); + } + SECTION("Multiple reporters") { + SECTION("All with output files") { + CHECK(cli.parse({ "test", "-r", "xml::output.xml", "-r", "junit::output-junit.xml" })); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"junit", "output-junit.xml"s} }); + } + SECTION("Mixed output files and default output") { + CHECK(cli.parse({ "test", "-r", "xml::output.xml", "-r", "console" })); + REQUIRE(config.reporterSpecifications == vec_ReporterAndFile{ {"xml", "output.xml"s}, {"console", {}} }); + } + SECTION("cannot have multiple reporters with default output") { + auto result = cli.parse({ "test", "-r", "console", "-r", "xml::output.xml", "-r", "junit" }); + CHECK(!result); + REQUIRE_THAT(result.errorMessage(), ContainsSubstring("Only one reporter may have unspecified output file.")); + } + } } SECTION("debugger") { @@ -483,12 +521,12 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" SECTION("-o filename") { CHECK(cli.parse({"test", "-o", "filename.ext"})); - REQUIRE(config.outputFilename == "filename.ext"); + REQUIRE(config.defaultOutputFilename == "filename.ext"); } SECTION("--out") { CHECK(cli.parse({"test", "--out", "filename.ext"})); - REQUIRE(config.outputFilename == "filename.ext"); + REQUIRE(config.defaultOutputFilename == "filename.ext"); } } diff --git a/tools/scripts/approvalTests.py b/tools/scripts/approvalTests.py index 99b94152f1..1057c4ad9c 100755 --- a/tools/scripts/approvalTests.py +++ b/tools/scripts/approvalTests.py @@ -164,19 +164,36 @@ def filterLine(line, isCompact): return line -def approve(baseName, args): - global overallResult +def get_rawResultsPath(baseName): + return os.path.join(rootPath, '_{0}.tmp'.format(baseName)) + + +def get_baselinesPath(baseName): + return os.path.join(rootPath, '{0}.approved.txt'.format(baseName)) + + +def get_filteredResultsPath(baseName): + return os.path.join(rootPath, '{0}.unapproved.txt'.format(baseName)) + + +def run_test(baseName, args): args[0:0] = [cmdPath] if not os.path.exists(cmdPath): raise Exception("Executable doesn't exist at " + cmdPath) - baselinesPath = os.path.join(rootPath, '{0}.approved.txt'.format(baseName)) - rawResultsPath = os.path.join(rootPath, '_{0}.tmp'.format(baseName)) - filteredResultsPath = os.path.join(rootPath, '{0}.unapproved.txt'.format(baseName)) + print(args) + rawResultsPath = get_rawResultsPath(baseName) f = open(rawResultsPath, 'w') subprocess.call(args, stdout=f, stderr=f) f.close() + +def check_outputs(baseName): + global overallResult + rawResultsPath = get_rawResultsPath(baseName) + baselinesPath = get_baselinesPath(baseName) + filteredResultsPath = get_filteredResultsPath(baseName) + rawFile = io.open(rawResultsPath, 'r', encoding='utf-8', errors='surrogateescape') filteredFile = io.open(filteredResultsPath, 'w', encoding='utf-8', errors='surrogateescape') for line in rawFile: @@ -204,6 +221,11 @@ def approve(baseName, args): overallResult = 1 +def approve(baseName, args): + run_test(baseName, args) + check_outputs(baseName) + + print("Running approvals against executable:") print(" " + cmdPath) @@ -222,6 +244,19 @@ def approve(baseName, args): reporter_args = ['-r', reporter] approve(filename, common_args + reporter_args) +## All reporters at the same time + +common_args = ["~[!nonportable]~[!benchmark]~[approvals] *", "-s", "-w", "NoAssertions", "--order", "lex", "--rng-seed", "1"] +filenames = ['{}.sw.multi'.format(reporter) for reporter in reporters] +reporter_args = [] +for reporter, filename in zip(reporters, filenames): + reporter_args += ['-r', '{}::{}'.format(reporter, get_rawResultsPath(filename))] + +run_test("default.sw.multi", common_args + reporter_args) +check_outputs("default.sw.multi") +for reporter, filename in zip(reporters, filenames): + check_outputs(filename) + if overallResult != 0: print("If these differences are expected, run approve.py to approve new baselines.") From 8baf9c05a3ab8ba2de400678539d0256ec60b4b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Sun, 19 Dec 2021 15:16:56 +0100 Subject: [PATCH 2/9] Add more unit tests * Call order of listeners/reporters in multireporter * Adding listeners/reporters properly updates reporter preferences --- .../reporters/catch_reporter_listening.hpp | 7 +- .../Baselines/automake.sw.approved.txt | 2 + .../Baselines/automake.sw.multi.approved.txt | 2 + .../Baselines/compact.sw.approved.txt | 19 +++ .../Baselines/compact.sw.multi.approved.txt | 19 +++ .../Baselines/console.std.approved.txt | 4 +- .../Baselines/console.sw.approved.txt | 123 +++++++++++++- .../Baselines/console.sw.multi.approved.txt | 123 +++++++++++++- .../SelfTest/Baselines/junit.sw.approved.txt | 6 +- .../Baselines/junit.sw.multi.approved.txt | 6 +- .../Baselines/sonarqube.sw.approved.txt | 4 + .../Baselines/sonarqube.sw.multi.approved.txt | 4 + tests/SelfTest/Baselines/tap.sw.approved.txt | 36 +++- .../Baselines/tap.sw.multi.approved.txt | 36 +++- .../Baselines/teamcity.sw.approved.txt | 4 + .../Baselines/teamcity.sw.multi.approved.txt | 4 + tests/SelfTest/Baselines/xml.sw.approved.txt | 154 +++++++++++++++++- .../Baselines/xml.sw.multi.approved.txt | 154 +++++++++++++++++- .../IntrospectiveTests/Reporters.tests.cpp | 148 +++++++++++++++++ 19 files changed, 836 insertions(+), 19 deletions(-) diff --git a/src/catch2/reporters/catch_reporter_listening.hpp b/src/catch2/reporters/catch_reporter_listening.hpp index f5b3a2ec8e..133ce8e11a 100644 --- a/src/catch2/reporters/catch_reporter_listening.hpp +++ b/src/catch2/reporters/catch_reporter_listening.hpp @@ -30,11 +30,8 @@ namespace Catch { public: ListeningReporter( IConfig const* config ): - IStreamingReporter( config ) { - // We will assume that listeners will always want all assertions - m_preferences.shouldReportAllAssertions = true; - } - + IStreamingReporter( config ) + {} void addListener( IStreamingReporterPtr&& listener ); void addReporter( IStreamingReporterPtr&& reporter ); diff --git a/tests/SelfTest/Baselines/automake.sw.approved.txt b/tests/SelfTest/Baselines/automake.sw.approved.txt index 4465d1e192..34a28749f6 100644 --- a/tests/SelfTest/Baselines/automake.sw.approved.txt +++ b/tests/SelfTest/Baselines/automake.sw.approved.txt @@ -170,6 +170,8 @@ Nor would this :test-result: FAIL Matchers can be negated (Not) with the ! operator - failing :test-result: XFAIL Mayfail test case with nested sections :test-result: FAIL Mismatching exception messages failing the test +:test-result: PASS Multireporter calls reporters and listeners in correct order +:test-result: PASS Multireporter updates ReporterPreferences properly :test-result: PASS Nested generators and captured variables :test-result: FAIL Nice descriptive name :test-result: FAIL Non-std exceptions can be translated diff --git a/tests/SelfTest/Baselines/automake.sw.multi.approved.txt b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt index 328fcf507d..e45cec60dc 100644 --- a/tests/SelfTest/Baselines/automake.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/automake.sw.multi.approved.txt @@ -168,6 +168,8 @@ :test-result: FAIL Matchers can be negated (Not) with the ! operator - failing :test-result: XFAIL Mayfail test case with nested sections :test-result: FAIL Mismatching exception messages failing the test +:test-result: PASS Multireporter calls reporters and listeners in correct order +:test-result: PASS Multireporter updates ReporterPreferences properly :test-result: PASS Nested generators and captured variables :test-result: FAIL Nice descriptive name :test-result: FAIL Non-std exceptions can be translated diff --git a/tests/SelfTest/Baselines/compact.sw.approved.txt b/tests/SelfTest/Baselines/compact.sw.approved.txt index 517b4d93e3..0babaf7d3f 100644 --- a/tests/SelfTest/Baselines/compact.sw.approved.txt +++ b/tests/SelfTest/Baselines/compact.sw.approved.txt @@ -941,6 +941,25 @@ Condition.tests.cpp:: failed: explicitly Condition.tests.cpp:: failed: explicitly Exception.tests.cpp:: passed: thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" Exception.tests.cpp:: failed: thisThrows(), "should fail" for: "expected exception" equals: "should fail" +Reporters.tests.cpp:: passed: records == expected for: { "Hello", "world", "Goodbye", "world" } +== +{ "Hello", "world", "Goodbye", "world" } +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true Generators.tests.cpp:: passed: values > -6 for: 3 > -6 Generators.tests.cpp:: passed: values > -6 for: 4 > -6 Generators.tests.cpp:: passed: values > -6 for: 5 > -6 diff --git a/tests/SelfTest/Baselines/compact.sw.multi.approved.txt b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt index 7196e8318e..1966443b7d 100644 --- a/tests/SelfTest/Baselines/compact.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/compact.sw.multi.approved.txt @@ -939,6 +939,25 @@ Condition.tests.cpp:: failed: explicitly Condition.tests.cpp:: failed: explicitly Exception.tests.cpp:: passed: thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" Exception.tests.cpp:: failed: thisThrows(), "should fail" for: "expected exception" equals: "should fail" +Reporters.tests.cpp:: passed: records == expected for: { "Hello", "world", "Goodbye", "world" } +== +{ "Hello", "world", "Goodbye", "world" } +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +Reporters.tests.cpp:: passed: multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true Generators.tests.cpp:: passed: values > -6 for: 3 > -6 Generators.tests.cpp:: passed: values > -6 for: 4 > -6 Generators.tests.cpp:: passed: values > -6 for: 5 > -6 diff --git a/tests/SelfTest/Baselines/console.std.approved.txt b/tests/SelfTest/Baselines/console.std.approved.txt index dfc8d3bdab..ac979989a7 100644 --- a/tests/SelfTest/Baselines/console.std.approved.txt +++ b/tests/SelfTest/Baselines/console.std.approved.txt @@ -1395,6 +1395,6 @@ due to unexpected exception with message: Why would you throw a std::string? =============================================================================== -test cases: 380 | 304 passed | 69 failed | 7 failed as expected -assertions: 2194 | 2039 passed | 128 failed | 27 failed as expected +test cases: 382 | 306 passed | 69 failed | 7 failed as expected +assertions: 2211 | 2056 passed | 128 failed | 27 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.approved.txt b/tests/SelfTest/Baselines/console.sw.approved.txt index 4b4a2ed028..5d733c7729 100644 --- a/tests/SelfTest/Baselines/console.sw.approved.txt +++ b/tests/SelfTest/Baselines/console.sw.approved.txt @@ -7199,6 +7199,125 @@ Exception.tests.cpp:: FAILED: with expansion: "expected exception" equals: "should fail" +------------------------------------------------------------------------------- +Multireporter calls reporters and listeners in correct order +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( records == expected ) +with expansion: + { "Hello", "world", "Goodbye", "world" } + == + { "Hello", "world", "Goodbye", "world" } + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly + Adding listeners +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly + Adding reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + ------------------------------------------------------------------------------- Nested generators and captured variables ------------------------------------------------------------------------------- @@ -17653,6 +17772,6 @@ Misc.tests.cpp: Misc.tests.cpp:: PASSED: =============================================================================== -test cases: 380 | 290 passed | 83 failed | 7 failed as expected -assertions: 2209 | 2039 passed | 143 failed | 27 failed as expected +test cases: 382 | 292 passed | 83 failed | 7 failed as expected +assertions: 2226 | 2056 passed | 143 failed | 27 failed as expected diff --git a/tests/SelfTest/Baselines/console.sw.multi.approved.txt b/tests/SelfTest/Baselines/console.sw.multi.approved.txt index 8c8d166f45..ad44370c44 100644 --- a/tests/SelfTest/Baselines/console.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/console.sw.multi.approved.txt @@ -7197,6 +7197,125 @@ Exception.tests.cpp:: FAILED: with expansion: "expected exception" equals: "should fail" +------------------------------------------------------------------------------- +Multireporter calls reporters and listeners in correct order +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( records == expected ) +with expansion: + { "Hello", "world", "Goodbye", "world" } + == + { "Hello", "world", "Goodbye", "world" } + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly + Adding listeners +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Multireporter updates ReporterPreferences properly + Adding reporters +------------------------------------------------------------------------------- +Reporters.tests.cpp: +............................................................................... + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ) +with expansion: + false == false + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ) +with expansion: + true == true + +Reporters.tests.cpp:: PASSED: + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ) +with expansion: + true == true + ------------------------------------------------------------------------------- Nested generators and captured variables ------------------------------------------------------------------------------- @@ -17645,6 +17764,6 @@ Misc.tests.cpp: Misc.tests.cpp:: PASSED: =============================================================================== -test cases: 380 | 290 passed | 83 failed | 7 failed as expected -assertions: 2209 | 2039 passed | 143 failed | 27 failed as expected +test cases: 382 | 292 passed | 83 failed | 7 failed as expected +assertions: 2226 | 2056 passed | 143 failed | 27 failed as expected diff --git a/tests/SelfTest/Baselines/junit.sw.approved.txt b/tests/SelfTest/Baselines/junit.sw.approved.txt index cc3038b5f7..e3398a6a89 100644 --- a/tests/SelfTest/Baselines/junit.sw.approved.txt +++ b/tests/SelfTest/Baselines/junit.sw.approved.txt @@ -1,7 +1,7 @@ - + @@ -870,6 +870,10 @@ with expansion: Exception.tests.cpp: + + + + diff --git a/tests/SelfTest/Baselines/junit.sw.multi.approved.txt b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt index 223618576f..b1ae7efd32 100644 --- a/tests/SelfTest/Baselines/junit.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/junit.sw.multi.approved.txt @@ -1,6 +1,6 @@ - + @@ -869,6 +869,10 @@ with expansion: Exception.tests.cpp: + + + + diff --git a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt index 8ab8d0c0df..081ae969f7 100644 --- a/tests/SelfTest/Baselines/sonarqube.sw.approved.txt +++ b/tests/SelfTest/Baselines/sonarqube.sw.approved.txt @@ -181,6 +181,10 @@ + + + + diff --git a/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt b/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt index ebbdce727d..cf9c15ce84 100644 --- a/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/sonarqube.sw.multi.approved.txt @@ -180,6 +180,10 @@ + + + + diff --git a/tests/SelfTest/Baselines/tap.sw.approved.txt b/tests/SelfTest/Baselines/tap.sw.approved.txt index 45fa096a83..e49f387e59 100644 --- a/tests/SelfTest/Baselines/tap.sw.approved.txt +++ b/tests/SelfTest/Baselines/tap.sw.approved.txt @@ -1864,6 +1864,40 @@ not ok {test-number} - explicitly ok {test-number} - thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" # Mismatching exception messages failing the test not ok {test-number} - thisThrows(), "should fail" for: "expected exception" equals: "should fail" +# Multireporter calls reporters and listeners in correct order +ok {test-number} - records == expected for: { "Hello", "world", "Goodbye", "world" } == { "Hello", "world", "Goodbye", "world" } +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true # Nested generators and captured variables ok {test-number} - values > -6 for: 3 > -6 # Nested generators and captured variables @@ -4420,5 +4454,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0 ok {test-number} - # xmlentitycheck ok {test-number} - -1..2209 +1..2226 diff --git a/tests/SelfTest/Baselines/tap.sw.multi.approved.txt b/tests/SelfTest/Baselines/tap.sw.multi.approved.txt index 235687a26e..f8599833b9 100644 --- a/tests/SelfTest/Baselines/tap.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/tap.sw.multi.approved.txt @@ -1862,6 +1862,40 @@ not ok {test-number} - explicitly ok {test-number} - thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" # Mismatching exception messages failing the test not ok {test-number} - thisThrows(), "should fail" for: "expected exception" equals: "should fail" +# Multireporter calls reporters and listeners in correct order +ok {test-number} - records == expected for: { "Hello", "world", "Goodbye", "world" } == { "Hello", "world", "Goodbye", "world" } +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == false for: false == false +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldRedirectStdOut == true for: true == true +# Multireporter updates ReporterPreferences properly +ok {test-number} - multiReporter.getPreferences().shouldReportAllAssertions == true for: true == true # Nested generators and captured variables ok {test-number} - values > -6 for: 3 > -6 # Nested generators and captured variables @@ -4412,5 +4446,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0 ok {test-number} - # xmlentitycheck ok {test-number} - -1..2209 +1..2226 diff --git a/tests/SelfTest/Baselines/teamcity.sw.approved.txt b/tests/SelfTest/Baselines/teamcity.sw.approved.txt index d413fcac3e..d73f02aeec 100644 --- a/tests/SelfTest/Baselines/teamcity.sw.approved.txt +++ b/tests/SelfTest/Baselines/teamcity.sw.approved.txt @@ -423,6 +423,10 @@ Condition.tests.cpp:|nexplicit failure- failure ignore as test mark ##teamcity[testStarted name='Mismatching exception messages failing the test'] Exception.tests.cpp:|nexpression failed|n REQUIRE_THROWS_WITH( thisThrows(), "should fail" )|nwith expansion:|n "expected exception" equals: "should fail"|n'] ##teamcity[testFinished name='Mismatching exception messages failing the test' duration="{duration}"] +##teamcity[testStarted name='Multireporter calls reporters and listeners in correct order'] +##teamcity[testFinished name='Multireporter calls reporters and listeners in correct order' duration="{duration}"] +##teamcity[testStarted name='Multireporter updates ReporterPreferences properly'] +##teamcity[testFinished name='Multireporter updates ReporterPreferences properly' duration="{duration}"] ##teamcity[testStarted name='Nested generators and captured variables'] ##teamcity[testFinished name='Nested generators and captured variables' duration="{duration}"] ##teamcity[testStarted name='Nice descriptive name'] diff --git a/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt b/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt index c57fd14e78..3560775fc8 100644 --- a/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/teamcity.sw.multi.approved.txt @@ -423,6 +423,10 @@ Condition.tests.cpp:|nexplicit failure- failure ignore as test mark ##teamcity[testStarted name='Mismatching exception messages failing the test'] Exception.tests.cpp:|nexpression failed|n REQUIRE_THROWS_WITH( thisThrows(), "should fail" )|nwith expansion:|n "expected exception" equals: "should fail"|n'] ##teamcity[testFinished name='Mismatching exception messages failing the test' duration="{duration}"] +##teamcity[testStarted name='Multireporter calls reporters and listeners in correct order'] +##teamcity[testFinished name='Multireporter calls reporters and listeners in correct order' duration="{duration}"] +##teamcity[testStarted name='Multireporter updates ReporterPreferences properly'] +##teamcity[testFinished name='Multireporter updates ReporterPreferences properly' duration="{duration}"] ##teamcity[testStarted name='Nested generators and captured variables'] ##teamcity[testFinished name='Nested generators and captured variables' duration="{duration}"] ##teamcity[testStarted name='Nice descriptive name'] diff --git a/tests/SelfTest/Baselines/xml.sw.approved.txt b/tests/SelfTest/Baselines/xml.sw.approved.txt index c10acdeab9..b7d5bb1585 100644 --- a/tests/SelfTest/Baselines/xml.sw.approved.txt +++ b/tests/SelfTest/Baselines/xml.sw.approved.txt @@ -8719,6 +8719,156 @@ Nor would this + + + + records == expected + + + { "Hello", "world", "Goodbye", "world" } +== +{ "Hello", "world", "Goodbye", "world" } + + + + + + + + multiReporter.getPreferences().shouldRedirectStdOut == false + + + false == false + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == false + + + false == false + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + +
+ +
@@ -20734,6 +20884,6 @@ loose text artifact
- - + + diff --git a/tests/SelfTest/Baselines/xml.sw.multi.approved.txt b/tests/SelfTest/Baselines/xml.sw.multi.approved.txt index 0491ec505f..9a70d37efe 100644 --- a/tests/SelfTest/Baselines/xml.sw.multi.approved.txt +++ b/tests/SelfTest/Baselines/xml.sw.multi.approved.txt @@ -8719,6 +8719,156 @@ Nor would this + + + + records == expected + + + { "Hello", "world", "Goodbye", "world" } +== +{ "Hello", "world", "Goodbye", "world" } + + + + + + + + multiReporter.getPreferences().shouldRedirectStdOut == false + + + false == false + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == false + + + false == false + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + +
+ + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == false + + + false == false + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + + + multiReporter.getPreferences().shouldRedirectStdOut == true + + + true == true + + + + + multiReporter.getPreferences().shouldReportAllAssertions == true + + + true == true + + + +
+ +
@@ -20733,6 +20883,6 @@ There is no extra whitespace here
- - + + diff --git a/tests/SelfTest/IntrospectiveTests/Reporters.tests.cpp b/tests/SelfTest/IntrospectiveTests/Reporters.tests.cpp index 5c95657d49..16fd17dd76 100644 --- a/tests/SelfTest/IntrospectiveTests/Reporters.tests.cpp +++ b/tests/SelfTest/IntrospectiveTests/Reporters.tests.cpp @@ -16,6 +16,9 @@ #include #include #include +#include +#include +#include #include @@ -112,3 +115,148 @@ TEST_CASE( "Reporter's write listings to provided stream", "[reporters]" ) { TEST_CASE("Reproducer for #2309 - a very long description past 80 chars (default console width) with a late colon : blablabla", "[console-reporter]") { SUCCEED(); } + +namespace { + // A listener that writes provided string into destination, + // to record order of testRunStarting invocation. + class MockListener : public Catch::EventListenerBase { + std::string m_witness; + std::vector& m_recorder; + public: + MockListener( std::string witness, + std::vector& recorder, + Catch::ReporterConfig const& config ): + EventListenerBase( config ), + m_witness( witness ), + m_recorder( recorder ) + {} + + void testRunStarting( Catch::TestRunInfo const& ) override { + m_recorder.push_back( m_witness ); + } + }; + // A reporter that writes provided string into destination, + // to record order of testRunStarting invocation. + class MockReporter : public Catch::StreamingReporterBase { + std::string m_witness; + std::vector& m_recorder; + public: + MockReporter( std::string witness, + std::vector& recorder, + Catch::ReporterConfig const& config ): + StreamingReporterBase( config ), + m_witness( witness ), + m_recorder( recorder ) + {} + + void testRunStarting( Catch::TestRunInfo const& ) override { + m_recorder.push_back( m_witness ); + } + }; +} // namespace + +TEST_CASE("Multireporter calls reporters and listeners in correct order", + "[reporters][multi-reporter]") { + + Catch::ConfigData config_data; + Catch::Config config( config_data ); + std::stringstream sstream; + Catch::ReporterConfig rep_config( &config, sstream ); + + // We add reporters before listeners, to check that internally they + // get sorted properly, and listeners are called first anyway. + Catch::ListeningReporter multiReporter( &config ); + std::vector records; + multiReporter.addReporter( Catch::Detail::make_unique( + "Goodbye", records, rep_config ) ); + multiReporter.addListener( Catch::Detail::make_unique( + "Hello", records, rep_config ) ); + multiReporter.addListener( Catch::Detail::make_unique( + "world", records, rep_config ) ); + multiReporter.addReporter( Catch::Detail::make_unique( + "world", records, rep_config ) ); + multiReporter.testRunStarting( { "" } ); + + std::vector expected( { "Hello", "world", "Goodbye", "world" } ); + REQUIRE( records == expected ); +} + +namespace { + // A listener that sets it preferences to test that multireporter, + // properly sets up its own preferences + class PreferenceListener : public Catch::EventListenerBase { + public: + PreferenceListener( bool redirectStdout, + bool reportAllAssertions, + Catch::ReporterConfig const& config ): + EventListenerBase( config ) { + m_preferences.shouldRedirectStdOut = redirectStdout; + m_preferences.shouldReportAllAssertions = reportAllAssertions; + } + }; + // A reporter that sets it preferences to test that multireporter, + // properly sets up its own preferences + class PreferenceReporter : public Catch::StreamingReporterBase { + public: + PreferenceReporter( bool redirectStdout, + bool reportAllAssertions, + Catch::ReporterConfig const& config ): + StreamingReporterBase( config ) { + m_preferences.shouldRedirectStdOut = redirectStdout; + m_preferences.shouldReportAllAssertions = reportAllAssertions; + } + }; +} // namespace + +TEST_CASE("Multireporter updates ReporterPreferences properly", + "[reporters][multi-reporter]") { + + Catch::ConfigData config_data; + Catch::Config config( config_data ); + std::stringstream sstream; + Catch::ReporterConfig rep_config( &config, sstream ); + Catch::ListeningReporter multiReporter( &config ); + + // Post init defaults + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == false ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ); + + SECTION( "Adding listeners" ) { + multiReporter.addListener( + Catch::Detail::make_unique( + true, false, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ); + + multiReporter.addListener( + Catch::Detail::make_unique( + false, true, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true); + + multiReporter.addListener( + Catch::Detail::make_unique( + false, false, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ); + } + SECTION( "Adding reporters" ) { + multiReporter.addReporter( + Catch::Detail::make_unique( + true, false, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == false ); + + multiReporter.addReporter( + Catch::Detail::make_unique( + false, true, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ); + + multiReporter.addReporter( + Catch::Detail::make_unique( + false, false, rep_config ) ); + REQUIRE( multiReporter.getPreferences().shouldRedirectStdOut == true ); + REQUIRE( multiReporter.getPreferences().shouldReportAllAssertions == true ); + } +} From 22547a3c5f6e2f7b67b74a420fd06ef077678c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Wed, 29 Dec 2021 23:53:59 +0100 Subject: [PATCH 3/9] Add test for stdout pass-through behaviour in MultiReporter --- tests/CMakeLists.txt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 02e027476b..5f0996e08c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -418,6 +418,39 @@ set_tests_properties("ErrorHandling::InvalidTestSpecExitsEarly" FAIL_REGULAR_EXPRESSION "No tests ran" ) +if (MSVC) + set(_NullFile "NUL") +else() + set(_NullFile "/dev/null") +endif() + +# This test checks that there is nothing written out from the process, +# but if CMake is running the tests under Valgrind or similar tool, then +# that will write its own output to stdout and the test would fail. +if (NOT MEMORYCHECK_COMMAND) + add_test(NAME "MultiReporter::CapturingReportersDontPropagateStdOut" + COMMAND + $ "Sends stuff to stdout and stderr" + --reporter xml::${_NullFile} + --reporter junit::${_NullFile} + ) + set_tests_properties("MultiReporter::CapturingReportersDontPropagateStdOut" + PROPERTIES + FAIL_REGULAR_EXPRESSION ".+" + ) +endif() + +add_test(NAME "MultiReporter::NonCapturingReportersPropagateStdout" + COMMAND + $ "Sends stuff to stdout and stderr" + --reporter xml::${_NullFile} + --reporter console::${_NullFile} +) +set_tests_properties("MultiReporter::NonCapturingReportersPropagateStdout" + PROPERTIES + PASS_REGULAR_EXPRESSION "A string sent to stderr via clog" +) + if (CATCH_USE_VALGRIND) add_test(NAME ValgrindRunTests COMMAND valgrind --leak-check=full --error-exitcode=1 $) From b4efa4751aa905ceb0b3795f7222b55fbeab8e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Thu, 30 Dec 2021 15:49:15 +0100 Subject: [PATCH 4/9] Add test for handling of Listeners requesting stdout capture --- tests/ExtraTests/CMakeLists.txt | 45 ++++++++++++++++++ ...4-ListenerStdoutCaptureInMultireporter.cpp | 40 ++++++++++++++++ .../X25-ListenerCanAskForCapturedStdout.cpp | 47 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 tests/ExtraTests/X24-ListenerStdoutCaptureInMultireporter.cpp create mode 100644 tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp diff --git a/tests/ExtraTests/CMakeLists.txt b/tests/ExtraTests/CMakeLists.txt index 3244e10fea..b503ca4474 100644 --- a/tests/ExtraTests/CMakeLists.txt +++ b/tests/ExtraTests/CMakeLists.txt @@ -256,6 +256,51 @@ set_tests_properties( ) +if (MSVC) + set(_NullFile "NUL") +else() + set(_NullFile "/dev/null") +endif() + +add_executable(ListenerStdoutCaptureInMultireporter ${TESTS_DIR}/X24-ListenerStdoutCaptureInMultireporter.cpp) +target_link_libraries(ListenerStdoutCaptureInMultireporter PRIVATE Catch2::Catch2WithMain) + +# This test checks that there is nothing written out from the process, +# but if CMake is running the tests under Valgrind or similar tool, then +# that will write its own output to stdout and the test would fail. +if (NOT MEMORYCHECK_COMMAND) + add_test( + NAME MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough + COMMAND ListenerStdoutCaptureInMultireporter + --reporter xml::${_NullFile} + --reporter junit::${_NullFile} + ) + + set_tests_properties( + MultiReporter::NoncapturingListenerDoesntCauseStdoutPassThrough + PROPERTIES + PASS_REGULAR_EXPRESSION "X24 - NonCapturingListener initialized" + FAIL_REGULAR_EXPRESSION "X24 - FooBarBaz" + ) +endif() + + +add_executable(ListenerCanAskForCapturedStdout ${TESTS_DIR}/X25-ListenerCanAskForCapturedStdout.cpp) +target_link_libraries(ListenerCanAskForCapturedStdout PRIVATE Catch2::Catch2WithMain) +add_test( + NAME MultiReporter::CapturingListenerCausesStdoutCapture + COMMAND ListenerCanAskForCapturedStdout + --reporter compact::${_NullFile} + --reporter console::${_NullFile} +) +set_tests_properties( + MultiReporter::CapturingListenerCausesStdoutCapture + PROPERTIES + PASS_REGULAR_EXPRESSION "CapturingListener initialized" + FAIL_REGULAR_EXPRESSION "X25 - ERROR" +) + + add_executable(DuplicatedTestCases-SameNameAndTags ${TESTS_DIR}/X31-DuplicatedTestCases.cpp) target_link_libraries(DuplicatedTestCases-SameNameAndTags PRIVATE Catch2::Catch2WithMain) add_test( diff --git a/tests/ExtraTests/X24-ListenerStdoutCaptureInMultireporter.cpp b/tests/ExtraTests/X24-ListenerStdoutCaptureInMultireporter.cpp new file mode 100644 index 0000000000..4c6148fdc8 --- /dev/null +++ b/tests/ExtraTests/X24-ListenerStdoutCaptureInMultireporter.cpp @@ -0,0 +1,40 @@ + +// Copyright Catch2 Authors +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// SPDX-License-Identifier: BSL-1.0 + +/**\file + * Registers custom listener that does not ask for captured stdout/err + * + * Running the binary with this listener, and asking for multiple _capturing_ + * reporters (one would be sufficient, but that would also mean depending on + * implementation details inside Catch2's handling of listeners), we check that + * nothing is written to stdout, because listeners should not be considered in + * whether the stdout should be passed-through or not. + */ + +#include +#include +#include + +#include + +namespace { + class NonCapturingListener : public Catch::EventListenerBase { + public: + NonCapturingListener( Catch::ReporterConfig const& config ): + EventListenerBase( config ) { + m_preferences.shouldRedirectStdOut = false; + std::cerr << "X24 - NonCapturingListener initialized.\n"; + } + }; +} + +CATCH_REGISTER_LISTENER( NonCapturingListener ) + +TEST_CASE( "Writes to stdout" ) { + std::cout << "X24 - FooBarBaz\n"; +} diff --git a/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp b/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp new file mode 100644 index 0000000000..e831abcab3 --- /dev/null +++ b/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp @@ -0,0 +1,47 @@ + +// Copyright Catch2 Authors +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// SPDX-License-Identifier: BSL-1.0 + +/**\file + * Registers custom listener that asks for captured stdout/err + * + * Running the binary with this listener, and asking for multiple _noncapturing_ + * reporters (one would be sufficient, but that would also mean depending on + * implementation details inside Catch2's handling of listeners), we check that + * the listener gets redirected stdout, even though the reporters didn't ask for + * it. + */ + +#include +#include +#include + +#include + +namespace { + class CapturingListener : public Catch::EventListenerBase { + public: + CapturingListener( Catch::ReporterConfig const& config ): + EventListenerBase( config ) { + m_preferences.shouldRedirectStdOut = true; + std::cerr << "CapturingListener initialized\n"; + } + + void + testCaseEnded(Catch::TestCaseStats const& testCaseStats) override { + if ( testCaseStats.stdOut.empty() ) { + std::cerr << "X25 - ERROR: empty stdout\n"; + } + } + }; +} + +CATCH_REGISTER_LISTENER( CapturingListener ) + +TEST_CASE( "Writes to stdout" ) { + std::cout << "X25 - FooBarBaz\n"; +} From 899554bff2ba64afa7a20e1796b85d396cbbfd8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Thu, 30 Dec 2021 20:20:22 +0100 Subject: [PATCH 5/9] Add test for handling of reporter's assertion preferences --- tests/ExtraTests/CMakeLists.txt | 26 ++++++++++ .../X25-ListenerCanAskForCapturedStdout.cpp | 4 +- ...erencesForPassingAssertionsIsRespected.cpp | 51 +++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tests/ExtraTests/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp diff --git a/tests/ExtraTests/CMakeLists.txt b/tests/ExtraTests/CMakeLists.txt index b503ca4474..1ac0844524 100644 --- a/tests/ExtraTests/CMakeLists.txt +++ b/tests/ExtraTests/CMakeLists.txt @@ -300,6 +300,32 @@ set_tests_properties( FAIL_REGULAR_EXPRESSION "X25 - ERROR" ) +add_executable(ReporterPreferencesForPassingAssertionsIsRespected ${TESTS_DIR}/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp) +target_link_libraries(ReporterPreferencesForPassingAssertionsIsRespected PRIVATE Catch2::Catch2WithMain) +add_test( + NAME Reporters::PreferencesForPassingAssertionsIsRespected + COMMAND ReporterPreferencesForPassingAssertionsIsRespected + --reporter test-reporter +) +set_tests_properties( + Reporters::PreferencesForPassingAssertionsIsRespected + PROPERTIES + PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed" + FAIL_REGULAR_EXPRESSION "X26 - assertionEnded" +) +add_test( + NAME MultiReporter::PreferencesForPassingAssertionsIsRespected + COMMAND ReporterPreferencesForPassingAssertionsIsRespected + --reporter test-reporter + --reporter console::${_NullFile} +) +set_tests_properties( + MultiReporter::PreferencesForPassingAssertionsIsRespected + PROPERTIES + PASS_REGULAR_EXPRESSION "X26 - TestReporter constructed" + FAIL_REGULAR_EXPRESSION "X26 - assertionEnded" +) + add_executable(DuplicatedTestCases-SameNameAndTags ${TESTS_DIR}/X31-DuplicatedTestCases.cpp) target_link_libraries(DuplicatedTestCases-SameNameAndTags PRIVATE Catch2::Catch2WithMain) diff --git a/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp b/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp index e831abcab3..b36a307aa1 100644 --- a/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp +++ b/tests/ExtraTests/X25-ListenerCanAskForCapturedStdout.cpp @@ -32,11 +32,11 @@ namespace { } void - testCaseEnded(Catch::TestCaseStats const& testCaseStats) override { + testCaseEnded( Catch::TestCaseStats const& testCaseStats ) override { if ( testCaseStats.stdOut.empty() ) { std::cerr << "X25 - ERROR: empty stdout\n"; } - } + } }; } diff --git a/tests/ExtraTests/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp b/tests/ExtraTests/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp new file mode 100644 index 0000000000..af3a320227 --- /dev/null +++ b/tests/ExtraTests/X26-ReporterPreferencesForPassingAssertionsIsRespected.cpp @@ -0,0 +1,51 @@ + +// Copyright Catch2 Authors +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// SPDX-License-Identifier: BSL-1.0 + +/**\file + * Test that reporter is not passed passing assertions when it + * doesn't ask for it. + */ + +#include +#include +#include + +#include + +namespace { + + class TestReporter : public Catch::StreamingReporterBase { + public: + TestReporter(Catch::ReporterConfig const& _config): + StreamingReporterBase(_config) { + m_preferences.shouldReportAllAssertions = false; + std::cout << "X26 - TestReporter constructed\n"; + } + + static std::string getDescription() { + return "X26 - test reporter that opts out of passing assertions"; + } + + void + assertionEnded( Catch::AssertionStats const& ) override { + std::cerr << "X26 - assertionEnded\n"; + } + + ~TestReporter() override; + }; + + TestReporter::~TestReporter() = default; + +} + +CATCH_REGISTER_REPORTER("test-reporter", TestReporter) + +TEST_CASE( "Test with only passing assertions" ) { + REQUIRE( 1 == 1 ); + REQUIRE( 2 == 2 ); +} From fae0be25b3e1bdd07a18465749488650616d78f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Thu, 30 Dec 2021 23:50:40 +0100 Subject: [PATCH 6/9] Improve error handling in parsing reporter specs --- src/catch2/internal/catch_commandline.cpp | 30 ++++++++++++++----- .../IntrospectiveTests/CmdLine.tests.cpp | 17 +++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/catch2/internal/catch_commandline.cpp b/src/catch2/internal/catch_commandline.cpp index 4ce085ca64..ca0e1c206a 100644 --- a/src/catch2/internal/catch_commandline.cpp +++ b/src/catch2/internal/catch_commandline.cpp @@ -135,6 +135,10 @@ namespace Catch { return ParserResult::ok( ParseResultType::Matched ); }; auto const setReporter = [&]( std::string const& reporterSpec ) { + if ( reporterSpec.empty() ) { + return ParserResult::runtimeError( "Received empty reporter spec." ); + } + IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); // clear the default reporter @@ -143,21 +147,33 @@ namespace Catch { config._nonDefaultReporterSpecifications = true; } + // Exactly one of the reporters may be specified without an output // file, in which case it defaults to the output specified by "-o" // (or standard output). static constexpr auto separator = "::"; static constexpr size_t separatorSize = 2; - auto separatorPos = reporterSpec.find( separator ); - const bool containsFileName = separatorPos != reporterSpec.npos; + auto fileNameSeparatorPos = reporterSpec.find( separator ); + const bool containsFileName = fileNameSeparatorPos != reporterSpec.npos; + if ( containsFileName ) { + auto nextSeparatorPos = reporterSpec.find( + separator, fileNameSeparatorPos + separatorSize ); + if ( nextSeparatorPos != reporterSpec.npos ) { + return ParserResult::runtimeError( + "Too many separators in reporter spec '" + reporterSpec + '\'' ); + } + } + std::string reporterName; Optional outputFileName; - if (!containsFileName) { - reporterName = reporterSpec; - } else { - reporterName = reporterSpec.substr( 0, separatorPos ); + reporterName = reporterSpec.substr( 0, fileNameSeparatorPos ); + if ( reporterName.empty() ) { + return ParserResult::runtimeError( "Reporter name cannot be empty." ); + } + + if ( containsFileName ) { outputFileName = reporterSpec.substr( - separatorPos + separatorSize, reporterSpec.size() ); + fileNameSeparatorPos + separatorSize, reporterSpec.size() ); } auto result = factories.find( reporterName ); diff --git a/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp b/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp index 2210a3a447..53fc08b8a6 100644 --- a/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp +++ b/tests/SelfTest/IntrospectiveTests/CmdLine.tests.cpp @@ -682,3 +682,20 @@ TEST_CASE("Test with special, characters \"in name", "[cli][regression]") { // This test case succeeds if we can invoke it from the CLI SUCCEED(); } + +TEST_CASE("Various suspicious reporter specs are rejected", + "[cli][reporter-spec][approvals]") { + Catch::ConfigData config; + auto cli = Catch::makeCommandLineParser( config ); + + auto spec = GENERATE( as{}, + "", + "::console", + "console::", + "console::some-file::", + "::console::some-file::" ); + CAPTURE( spec ); + + auto result = cli.parse( { "test", "--reporter", spec } ); + REQUIRE_FALSE( result ); +} From 4752545a69e46126f86b1bd54bc154fc54f37e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Fri, 31 Dec 2021 00:00:58 +0100 Subject: [PATCH 7/9] Add version placeholders to the reporter docs --- docs/command-line.md | 2 ++ docs/reporters.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/command-line.md b/docs/command-line.md index 0bc7744bd2..895c6fb992 100644 --- a/docs/command-line.md +++ b/docs/command-line.md @@ -125,6 +125,8 @@ Test names containing special characters, such as `,` or `[` can specify them on
-r, --reporter <reporter[::output-file]>
+> Support for providing output-file through the `-r`, `--reporter` flag was [introduced](https://github.com/catchorg/Catch2/pull/2183) in Catch2 X.Y.Z + A reporter is an object that formats and structures the output of running tests, and potentially summarises the results. By default a console reporter is used that writes, IDE friendly, textual output. Catch comes bundled with some alternative reporters, but more can be added in client code.
The bundled reporters are: diff --git a/docs/reporters.md b/docs/reporters.md index 81baa308c7..9552154b7e 100644 --- a/docs/reporters.md +++ b/docs/reporters.md @@ -38,6 +38,8 @@ By default all these reports are written to stdout, but can be redirected to a f ## Using multiple reporters +> Support for having multiple parallel reporters was [introduced](https://github.com/catchorg/Catch2/pull/2183) in Catch2 X.Y.Z + Multiple reporters may be used at the same time, e.g. to save a machine-readable output to a file but still print the human-readable output to the console: ``` -r console -r xml::result.xml -r junit::result-junit.xml From 93882f7fab9ef027bd49df781a1f542e1adb516e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Fri, 31 Dec 2021 14:51:15 +0100 Subject: [PATCH 8/9] Support '-' as output path for stdout --- docs/command-line.md | 7 +++++++ src/catch2/internal/catch_stream.cpp | 3 ++- tests/CMakeLists.txt | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/command-line.md b/docs/command-line.md index 895c6fb992..c156889193 100644 --- a/docs/command-line.md +++ b/docs/command-line.md @@ -140,6 +140,8 @@ The JUnit reporter is an xml format that follows the structure of the JUnit XML This option may be passed multiple times to use multiple (different) reporters at the same time. See [Reporters](reporters.md#multiple-reporters) for details. +As with the `--out` flag, `-` means writing to stdout. + _Note: There is currently no way to escape `::` in the reporter spec, and thus reporter/file names with `::` in them will not work properly. As `::` in paths is relatively obscure (unlike `:`), we do not consider @@ -192,6 +194,11 @@ If one or more test-specs have been supplied too then only the matching tests wi Use this option to send all output to a file. By default output is sent to stdout (note that uses of stdout and stderr *from within test cases* are redirected and included in the report - so even stderr will effectively end up on stdout). +Using `-` as the filename sends the output to stdout. + +> Support for `-` as the filename was introduced in Catch2 X.Y.Z + + ## Naming a test run
-n, --name <name for test run>
diff --git a/src/catch2/internal/catch_stream.cpp b/src/catch2/internal/catch_stream.cpp index 745c6a2d7b..eca83ddaee 100644 --- a/src/catch2/internal/catch_stream.cpp +++ b/src/catch2/internal/catch_stream.cpp @@ -124,8 +124,9 @@ namespace Detail { /////////////////////////////////////////////////////////////////////////// auto makeStream( std::string const& filename ) -> Detail::unique_ptr { - if( filename.empty() ) + if ( filename.empty() || filename == "-" ) { return Detail::make_unique(); + } else if( filename[0] == '%' ) { if( filename == "%debug" ) return Detail::make_unique(); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5f0996e08c..2e8d0a6bdc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -451,6 +451,26 @@ set_tests_properties("MultiReporter::NonCapturingReportersPropagateStdout" PASS_REGULAR_EXPRESSION "A string sent to stderr via clog" ) +add_test(NAME "Outputs::DashAsOutLocationSendsOutputToStdout" + COMMAND + $ "Factorials are computed" + --out=- +) +set_tests_properties("Outputs::DashAsOutLocationSendsOutputToStdout" + PROPERTIES + PASS_REGULAR_EXPRESSION "All tests passed \\(5 assertions in 1 test case\\)" +) + +add_test(NAME "Reporters::DashAsLocationInReporterSpecSendsOutputToStdout" + COMMAND + $ "Factorials are computed" + --reporter console::- +) +set_tests_properties("Reporters::DashAsLocationInReporterSpecSendsOutputToStdout" + PROPERTIES + PASS_REGULAR_EXPRESSION "All tests passed \\(5 assertions in 1 test case\\)" +) + if (CATCH_USE_VALGRIND) add_test(NAME ValgrindRunTests COMMAND valgrind --leak-check=full --error-exitcode=1 $) From b5547f2ef6be18f70d2e9638d8f1eb0d8d42d2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Fri, 31 Dec 2021 16:24:55 +0100 Subject: [PATCH 9/9] Passthrough stdout/err in multireporter's partial test end This should provide the same overall stdout/err, but the new output should feel "faster" for test cases that are entered and exited multiple times (e.g. due to generators). --- .../reporters/catch_reporter_listening.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/catch2/reporters/catch_reporter_listening.cpp b/src/catch2/reporters/catch_reporter_listening.cpp index a08e5d59df..e89090fbef 100644 --- a/src/catch2/reporters/catch_reporter_listening.cpp +++ b/src/catch2/reporters/catch_reporter_listening.cpp @@ -136,21 +136,22 @@ namespace Catch { void ListeningReporter::testCasePartialEnded( TestCaseStats const& testStats, uint64_t partNumber ) { - // TODO: Fix handling of stderr/stdout? + if ( m_preferences.shouldRedirectStdOut && + m_haveNoncapturingReporters ) { + if ( !testStats.stdOut.empty() ) { + Catch::cout() << testStats.stdOut << std::flush; + } + if ( !testStats.stdErr.empty() ) { + Catch::cerr() << testStats.stdErr << std::flush; + } + } + for ( auto& reporterish : m_reporterLikes ) { reporterish->testCasePartialEnded( testStats, partNumber ); } } void ListeningReporter::testCaseEnded( TestCaseStats const& testCaseStats ) { - if ( m_preferences.shouldRedirectStdOut && m_haveNoncapturingReporters ) { - if ( !testCaseStats.stdOut.empty() ) { - Catch::cout() << testCaseStats.stdOut << std::flush; - } - if ( !testCaseStats.stdErr.empty() ) { - Catch::cerr() << testCaseStats.stdErr << std::flush; - } - } for ( auto& reporterish : m_reporterLikes ) { reporterish->testCaseEnded( testCaseStats ); }