mirror of
https://github.com/catchorg/Catch2.git
synced 2026-08-11 08:01:24 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
05e10dfccc | ||
|
|
597ce12b65 | ||
|
|
05786fa7ec | ||
|
|
d79bfa05c7 | ||
|
|
6ebdd8fac2 | ||
|
|
7f931d6df4 | ||
|
|
a0ef2115f8 | ||
|
|
863c662c0e |
@@ -78,6 +78,7 @@ function(add_warnings_to_targets targets)
|
||||
"-Wreturn-std-move"
|
||||
"-Wshadow"
|
||||
"-Wstrict-aliasing"
|
||||
"-Wsubobject-linkage"
|
||||
"-Wsuggest-destructor-override"
|
||||
"-Wsuggest-override"
|
||||
"-Wundef"
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ if (CMAKE_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
endif()
|
||||
|
||||
project(Catch2
|
||||
VERSION 3.5.1 # CML version placeholder, don't delete
|
||||
VERSION 3.5.2 # CML version placeholder, don't delete
|
||||
LANGUAGES CXX
|
||||
# HOMEPAGE_URL is not supported until CMake version 3.12, which
|
||||
# we do not target yet.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
# Release notes
|
||||
**Contents**<br>
|
||||
[3.5.2](#352)<br>
|
||||
[3.5.1](#351)<br>
|
||||
[3.5.0](#350)<br>
|
||||
[3.4.0](#340)<br>
|
||||
@@ -59,6 +60,13 @@
|
||||
[Even Older versions](#even-older-versions)<br>
|
||||
|
||||
|
||||
## 3.5.1
|
||||
|
||||
### Fixes
|
||||
* Fixed `-Wsubobject-linkage` in the Console reporter (#2794)
|
||||
* Fixed adding new CLI Options to lvalue parser using `|` (#2787)
|
||||
|
||||
|
||||
## 3.5.1
|
||||
|
||||
### Improvements
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
// Copyright Catch2 Authors
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE.txt or copy at
|
||||
// https://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// 232-Cfg-CustomMain.cpp
|
||||
// Show how to use custom main and add a custom option to the CLI parser
|
||||
|
||||
#include <catch2/catch_session.hpp>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
Catch::Session session; // There must be exactly one instance
|
||||
|
||||
int height = 0; // Some user variable you want to be able to set
|
||||
|
||||
// Build a new parser on top of Catch2's
|
||||
using namespace Catch::Clara;
|
||||
auto cli
|
||||
= session.cli() // Get Catch2's command line parser
|
||||
| Opt( height, "height" ) // bind variable to a new option, with a hint string
|
||||
["--height"] // the option names it will respond to
|
||||
("how high?"); // description string for the help output
|
||||
|
||||
// Now pass the new composite back to Catch2 so it uses that
|
||||
session.cli( cli );
|
||||
|
||||
// Let Catch2 (using Clara) parse the command line
|
||||
int returnCode = session.applyCommandLine( argc, argv );
|
||||
if( returnCode != 0 ) // Indicates a command line error
|
||||
return returnCode;
|
||||
|
||||
// if set on the command line then 'height' is now set at this point
|
||||
std::cout << "height: " << height << std::endl;
|
||||
|
||||
return session.run();
|
||||
}
|
||||
@@ -30,6 +30,7 @@ set( SOURCES_IDIOMATIC_EXAMPLES
|
||||
110-Fix-ClassFixture.cpp
|
||||
120-Bdd-ScenarioGivenWhenThen.cpp
|
||||
210-Evt-EventListeners.cpp
|
||||
232-Cfg-CustomMain.cpp
|
||||
300-Gen-OwnGenerator.cpp
|
||||
301-Gen-MapTypeConversion.cpp
|
||||
302-Gen-Table.cpp
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.5.1
|
||||
// Generated: 2023-12-31 15:10:55.864983
|
||||
// Catch v3.5.2
|
||||
// Generated: 2024-01-15 14:06:36.675713
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@@ -187,21 +187,16 @@ namespace Catch {
|
||||
double const* last,
|
||||
Estimator& estimator ) {
|
||||
auto n = static_cast<size_t>( last - first );
|
||||
std::uniform_int_distribution<decltype( n )> dist( 0,
|
||||
n - 1 );
|
||||
std::uniform_int_distribution<size_t> dist( 0, n - 1 );
|
||||
|
||||
sample out;
|
||||
out.reserve( resamples );
|
||||
// We allocate the vector outside the loop to avoid realloc
|
||||
// per resample
|
||||
std::vector<double> resampled;
|
||||
resampled.reserve( n );
|
||||
for ( size_t i = 0; i < resamples; ++i ) {
|
||||
resampled.clear();
|
||||
for ( size_t s = 0; s < n; ++s ) {
|
||||
resampled.push_back(
|
||||
first[static_cast<std::ptrdiff_t>(
|
||||
dist( rng ) )] );
|
||||
resampled.push_back( first[dist( rng )] );
|
||||
}
|
||||
const auto estimate =
|
||||
estimator( resampled.data(), resampled.data() + resampled.size() );
|
||||
@@ -2273,7 +2268,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 5, 1, "", 0 );
|
||||
static Version version( 3, 5, 2, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
@@ -4380,7 +4375,6 @@ namespace Detail {
|
||||
CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << '\'' );
|
||||
m_ofs << std::unitbuf;
|
||||
}
|
||||
~FileStream() override = default;
|
||||
public: // IStream
|
||||
std::ostream& stream() override {
|
||||
return m_ofs;
|
||||
@@ -4395,7 +4389,6 @@ namespace Detail {
|
||||
// Store the streambuf from cout up-front because
|
||||
// cout may get redirected when running tests
|
||||
CoutStream() : m_os( Catch::cout().rdbuf() ) {}
|
||||
~CoutStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
@@ -4409,7 +4402,6 @@ namespace Detail {
|
||||
// Store the streambuf from cerr up-front because
|
||||
// cout may get redirected when running tests
|
||||
CerrStream(): m_os( Catch::cerr().rdbuf() ) {}
|
||||
~CerrStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
@@ -4427,8 +4419,6 @@ namespace Detail {
|
||||
m_os( m_streamBuf.get() )
|
||||
{}
|
||||
|
||||
~DebugOutStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
};
|
||||
@@ -5441,7 +5431,6 @@ namespace Catch {
|
||||
TrackerContext& ctx,
|
||||
ITracker* parent ):
|
||||
TrackerBase( CATCH_MOVE( nameAndLocation ), ctx, parent ) {}
|
||||
~GeneratorTracker() override = default;
|
||||
|
||||
static GeneratorTracker*
|
||||
acquire( TrackerContext& ctx,
|
||||
@@ -8799,13 +8788,6 @@ findMax( std::size_t& i, std::size_t& j, std::size_t& k, std::size_t& l ) {
|
||||
return l;
|
||||
}
|
||||
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
std::size_t width;
|
||||
Justification justification;
|
||||
};
|
||||
struct ColumnBreak {};
|
||||
struct RowBreak {};
|
||||
struct OutputFlush {};
|
||||
@@ -8883,6 +8865,14 @@ public:
|
||||
};
|
||||
} // end anon namespace
|
||||
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
std::size_t width;
|
||||
Justification justification;
|
||||
};
|
||||
|
||||
class TablePrinter {
|
||||
std::ostream& m_os;
|
||||
std::vector<ColumnInfo> m_columnInfos;
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
|
||||
// Catch v3.5.1
|
||||
// Generated: 2023-12-31 15:10:53.044176
|
||||
// Catch v3.5.2
|
||||
// Generated: 2024-01-15 14:06:34.036475
|
||||
// ----------------------------------------------------------
|
||||
// This file is an amalgamation of multiple different files.
|
||||
// You probably shouldn't edit it directly.
|
||||
@@ -3766,7 +3766,7 @@ namespace Catch {
|
||||
bool benchmarkNoAnalysis = false;
|
||||
unsigned int benchmarkSamples = 100;
|
||||
double benchmarkConfidenceInterval = 0.95;
|
||||
unsigned int benchmarkResamples = 100000;
|
||||
unsigned int benchmarkResamples = 100'000;
|
||||
std::chrono::milliseconds::rep benchmarkWarmupTime = 100;
|
||||
|
||||
Verbosity verbosity = Verbosity::Normal;
|
||||
@@ -4825,7 +4825,9 @@ namespace Catch {
|
||||
|
||||
template <typename T>
|
||||
friend Parser operator|( Parser const& p, T&& rhs ) {
|
||||
return Parser( p ) |= CATCH_FORWARD(rhs);
|
||||
Parser temp( p );
|
||||
temp |= rhs;
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
@@ -7146,7 +7148,7 @@ namespace Catch {
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 5
|
||||
#define CATCH_VERSION_PATCH 1
|
||||
#define CATCH_VERSION_PATCH 2
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
@@ -7304,12 +7306,6 @@ namespace Detail {
|
||||
}
|
||||
|
||||
public:
|
||||
~IGenerator() override = default;
|
||||
IGenerator() = default;
|
||||
IGenerator(IGenerator const&) = default;
|
||||
IGenerator& operator=(IGenerator const&) = default;
|
||||
|
||||
|
||||
// Returns the current element of the generator
|
||||
//
|
||||
// \Precondition The generator is either freshly constructed,
|
||||
@@ -10707,8 +10703,6 @@ namespace Catch {
|
||||
|
||||
class TestRegistry : public ITestCaseRegistry {
|
||||
public:
|
||||
~TestRegistry() override = default;
|
||||
|
||||
void registerTest( Detail::unique_ptr<TestCaseInfo> testInfo, Detail::unique_ptr<ITestInvoker> testInvoker );
|
||||
|
||||
std::vector<TestCaseInfo*> const& getAllInfos() const override;
|
||||
@@ -13376,8 +13370,6 @@ namespace Catch {
|
||||
public:
|
||||
JunitReporter(ReporterConfig&& _config);
|
||||
|
||||
~JunitReporter() override = default;
|
||||
|
||||
static std::string getDescription();
|
||||
|
||||
void testRunStarting(TestRunInfo const& runInfo) override;
|
||||
@@ -13618,8 +13610,6 @@ namespace Catch {
|
||||
m_shouldStoreSuccesfulAssertions = false;
|
||||
}
|
||||
|
||||
~SonarQubeReporter() override = default;
|
||||
|
||||
static std::string getDescription() {
|
||||
using namespace std::string_literals;
|
||||
return "Reports test results in the Generic Test Data SonarQube XML format"s;
|
||||
@@ -13666,7 +13656,6 @@ namespace Catch {
|
||||
StreamingReporterBase( CATCH_MOVE(config) ) {
|
||||
m_preferences.shouldReportAllAssertions = true;
|
||||
}
|
||||
~TAPReporter() override = default;
|
||||
|
||||
static std::string getDescription() {
|
||||
using namespace std::string_literals;
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
project(
|
||||
'catch2',
|
||||
'cpp',
|
||||
version: '3.5.1', # CML version placeholder, don't delete
|
||||
version: '3.5.2', # CML version placeholder, don't delete
|
||||
license: 'BSL-1.0',
|
||||
meson_version: '>=0.54.1',
|
||||
)
|
||||
|
||||
@@ -38,21 +38,16 @@ namespace Catch {
|
||||
double const* last,
|
||||
Estimator& estimator ) {
|
||||
auto n = static_cast<size_t>( last - first );
|
||||
std::uniform_int_distribution<decltype( n )> dist( 0,
|
||||
n - 1 );
|
||||
std::uniform_int_distribution<size_t> dist( 0, n - 1 );
|
||||
|
||||
sample out;
|
||||
out.reserve( resamples );
|
||||
// We allocate the vector outside the loop to avoid realloc
|
||||
// per resample
|
||||
std::vector<double> resampled;
|
||||
resampled.reserve( n );
|
||||
for ( size_t i = 0; i < resamples; ++i ) {
|
||||
resampled.clear();
|
||||
for ( size_t s = 0; s < n; ++s ) {
|
||||
resampled.push_back(
|
||||
first[static_cast<std::ptrdiff_t>(
|
||||
dist( rng ) )] );
|
||||
resampled.push_back( first[dist( rng )] );
|
||||
}
|
||||
const auto estimate =
|
||||
estimator( resampled.data(), resampled.data() + resampled.size() );
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Catch {
|
||||
bool benchmarkNoAnalysis = false;
|
||||
unsigned int benchmarkSamples = 100;
|
||||
double benchmarkConfidenceInterval = 0.95;
|
||||
unsigned int benchmarkResamples = 100000;
|
||||
unsigned int benchmarkResamples = 100'000;
|
||||
std::chrono::milliseconds::rep benchmarkWarmupTime = 100;
|
||||
|
||||
Verbosity verbosity = Verbosity::Normal;
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
Version const& libraryVersion() {
|
||||
static Version version( 3, 5, 1, "", 0 );
|
||||
static Version version( 3, 5, 2, "", 0 );
|
||||
return version;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
|
||||
#define CATCH_VERSION_MAJOR 3
|
||||
#define CATCH_VERSION_MINOR 5
|
||||
#define CATCH_VERSION_PATCH 1
|
||||
#define CATCH_VERSION_PATCH 2
|
||||
|
||||
#endif // CATCH_VERSION_MACROS_HPP_INCLUDED
|
||||
|
||||
@@ -37,12 +37,6 @@ namespace Detail {
|
||||
}
|
||||
|
||||
public:
|
||||
~IGenerator() override = default;
|
||||
IGenerator() = default;
|
||||
IGenerator(IGenerator const&) = default;
|
||||
IGenerator& operator=(IGenerator const&) = default;
|
||||
|
||||
|
||||
// Returns the current element of the generator
|
||||
//
|
||||
// \Precondition The generator is either freshly constructed,
|
||||
|
||||
@@ -673,7 +673,9 @@ namespace Catch {
|
||||
|
||||
template <typename T>
|
||||
friend Parser operator|( Parser const& p, T&& rhs ) {
|
||||
return Parser( p ) |= CATCH_FORWARD(rhs);
|
||||
Parser temp( p );
|
||||
temp |= rhs;
|
||||
return temp;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
||||
@@ -80,7 +80,6 @@ namespace Detail {
|
||||
CATCH_ENFORCE( !m_ofs.fail(), "Unable to open file: '" << filename << '\'' );
|
||||
m_ofs << std::unitbuf;
|
||||
}
|
||||
~FileStream() override = default;
|
||||
public: // IStream
|
||||
std::ostream& stream() override {
|
||||
return m_ofs;
|
||||
@@ -95,7 +94,6 @@ namespace Detail {
|
||||
// Store the streambuf from cout up-front because
|
||||
// cout may get redirected when running tests
|
||||
CoutStream() : m_os( Catch::cout().rdbuf() ) {}
|
||||
~CoutStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
@@ -109,7 +107,6 @@ namespace Detail {
|
||||
// Store the streambuf from cerr up-front because
|
||||
// cout may get redirected when running tests
|
||||
CerrStream(): m_os( Catch::cerr().rdbuf() ) {}
|
||||
~CerrStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
@@ -127,8 +124,6 @@ namespace Detail {
|
||||
m_os( m_streamBuf.get() )
|
||||
{}
|
||||
|
||||
~DebugOutStream() override = default;
|
||||
|
||||
public: // IStream
|
||||
std::ostream& stream() override { return m_os; }
|
||||
};
|
||||
|
||||
@@ -38,7 +38,6 @@ namespace Catch {
|
||||
TrackerContext& ctx,
|
||||
ITracker* parent ):
|
||||
TrackerBase( CATCH_MOVE( nameAndLocation ), ctx, parent ) {}
|
||||
~GeneratorTracker() override = default;
|
||||
|
||||
static GeneratorTracker*
|
||||
acquire( TrackerContext& ctx,
|
||||
|
||||
@@ -30,8 +30,6 @@ namespace Catch {
|
||||
|
||||
class TestRegistry : public ITestCaseRegistry {
|
||||
public:
|
||||
~TestRegistry() override = default;
|
||||
|
||||
void registerTest( Detail::unique_ptr<TestCaseInfo> testInfo, Detail::unique_ptr<ITestInvoker> testInvoker );
|
||||
|
||||
std::vector<TestCaseInfo*> const& getAllInfos() const override;
|
||||
|
||||
@@ -209,13 +209,6 @@ findMax( std::size_t& i, std::size_t& j, std::size_t& k, std::size_t& l ) {
|
||||
return l;
|
||||
}
|
||||
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
std::size_t width;
|
||||
Justification justification;
|
||||
};
|
||||
struct ColumnBreak {};
|
||||
struct RowBreak {};
|
||||
struct OutputFlush {};
|
||||
@@ -293,6 +286,14 @@ public:
|
||||
};
|
||||
} // end anon namespace
|
||||
|
||||
enum class Justification { Left, Right };
|
||||
|
||||
struct ColumnInfo {
|
||||
std::string name;
|
||||
std::size_t width;
|
||||
Justification justification;
|
||||
};
|
||||
|
||||
class TablePrinter {
|
||||
std::ostream& m_os;
|
||||
std::vector<ColumnInfo> m_columnInfos;
|
||||
|
||||
@@ -19,8 +19,6 @@ namespace Catch {
|
||||
public:
|
||||
JunitReporter(ReporterConfig&& _config);
|
||||
|
||||
~JunitReporter() override = default;
|
||||
|
||||
static std::string getDescription();
|
||||
|
||||
void testRunStarting(TestRunInfo const& runInfo) override;
|
||||
|
||||
@@ -25,8 +25,6 @@ namespace Catch {
|
||||
m_shouldStoreSuccesfulAssertions = false;
|
||||
}
|
||||
|
||||
~SonarQubeReporter() override = default;
|
||||
|
||||
static std::string getDescription() {
|
||||
using namespace std::string_literals;
|
||||
return "Reports test results in the Generic Test Data SonarQube XML format"s;
|
||||
|
||||
@@ -19,7 +19,6 @@ namespace Catch {
|
||||
StreamingReporterBase( CATCH_MOVE(config) ) {
|
||||
m_preferences.shouldReportAllAssertions = true;
|
||||
}
|
||||
~TAPReporter() override = default;
|
||||
|
||||
static std::string getDescription() {
|
||||
using namespace std::string_literals;
|
||||
|
||||
@@ -123,6 +123,12 @@ TEST_CASE( "count_equidistant_floats",
|
||||
CHECK( count_floats_with_scaled_ulp( 1., 1.5 ) == 1ull << 51 );
|
||||
CHECK( count_floats_with_scaled_ulp( 1.25, 1.5 ) == 1ull << 50 );
|
||||
CHECK( count_floats_with_scaled_ulp( 1.f, 1.5f ) == 1 << 22 );
|
||||
CHECK( count_floats_with_scaled_ulp( -std::numeric_limits<float>::max(),
|
||||
std::numeric_limits<float>::max() ) ==
|
||||
33554430 ); // (1 << 25) - 2 due to not including infinities
|
||||
CHECK( count_floats_with_scaled_ulp( -std::numeric_limits<double>::max(),
|
||||
std::numeric_limits<double>::max() ) ==
|
||||
18014398509481982 ); // (1 << 54) - 2 due to not including infinities
|
||||
|
||||
STATIC_REQUIRE( std::is_same<std::uint64_t,
|
||||
decltype( count_floats_with_scaled_ulp(
|
||||
|
||||
Reference in New Issue
Block a user