mirror of
https://github.com/catchorg/Catch2.git
synced 2025-12-20 09:02:11 +01:00
Compare commits
1 Commits
devel-new-
...
devel-gene
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4a98791d5 |
4
.github/workflows/mac-builds.yml
vendored
4
.github/workflows/mac-builds.yml
vendored
@@ -4,11 +4,13 @@ on: [push, pull_request]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
# From macos-14 forward, the baseline "macos-X" image is Arm based,
|
||||||
|
# and not Intel based.
|
||||||
runs-on: ${{matrix.image}}
|
runs-on: ${{matrix.image}}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
image: [macos-15, macos-15-intel]
|
image: [macos-13, macos-14, macos-15]
|
||||||
build_type: [Debug, Release]
|
build_type: [Debug, Release]
|
||||||
std: [14, 17]
|
std: [14, 17]
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ in-memory logs if they are not needed (the test case passed).
|
|||||||
Unlike reporters, each registered event listener is always active. Event
|
Unlike reporters, each registered event listener is always active. Event
|
||||||
listeners are always notified before reporter(s).
|
listeners are always notified before reporter(s).
|
||||||
|
|
||||||
To write your own event listener, you should derive from `Catch::EventListenerBase`,
|
To write your own event listener, you should derive from `Catch::TestEventListenerBase`,
|
||||||
as it provides empty stubs for all reporter events, allowing you to
|
as it provides empty stubs for all reporter events, allowing you to
|
||||||
only override events you care for. Afterwards you have to register it
|
only override events you care for. Afterwards you have to register it
|
||||||
with Catch2 using `CATCH_REGISTER_LISTENER` macro, so that Catch2 knows
|
with Catch2 using `CATCH_REGISTER_LISTENER` macro, so that Catch2 knows
|
||||||
|
|||||||
@@ -252,9 +252,23 @@ struct IGenerator : GeneratorUntypedBase {
|
|||||||
// Returns user-friendly string showing the current generator element
|
// Returns user-friendly string showing the current generator element
|
||||||
// Does not have to be overridden, IGenerator provides default implementation
|
// Does not have to be overridden, IGenerator provides default implementation
|
||||||
virtual std::string stringifyImpl() const;
|
virtual std::string stringifyImpl() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customization point for `skipToNthElement`
|
||||||
|
*
|
||||||
|
* Does not have to be overridden, there is a default implementation.
|
||||||
|
* Can be overridden for better performance.
|
||||||
|
*
|
||||||
|
* If there are not enough elements, shall throw an error.
|
||||||
|
*
|
||||||
|
* Going backwards is not supported.
|
||||||
|
*/
|
||||||
|
virtual void skipToNthElementImpl( std::size_t n );
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> `skipToNthElementImpl` was added in Catch2 vX.Y.Z
|
||||||
|
|
||||||
However, to be able to use your custom generator inside `GENERATE`, it
|
However, to be able to use your custom generator inside `GENERATE`, it
|
||||||
will need to be wrapped inside a `GeneratorWrapper<T>`.
|
will need to be wrapped inside a `GeneratorWrapper<T>`.
|
||||||
`GeneratorWrapper<T>` is a value wrapper around a
|
`GeneratorWrapper<T>` is a value wrapper around a
|
||||||
@@ -275,7 +289,7 @@ There are two ways to handle this, depending on whether you want this
|
|||||||
to be an error or not.
|
to be an error or not.
|
||||||
|
|
||||||
* If empty generator **is** an error, throw an exception in constructor.
|
* If empty generator **is** an error, throw an exception in constructor.
|
||||||
* If empty generator **is not** an error, use the [`SKIP` macro](skipping-passing-failing.md#skipping-test-cases-at-runtime) in constructor.
|
* If empty generator **is not** an error, use the [`SKIP`](skipping-passing-failing.md#skipping-test-cases-at-runtime) in constructor.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ TEST_CASE("complex test case") {
|
|||||||
```
|
```
|
||||||
|
|
||||||
This test case will report 5 passing assertions; one for each of the three
|
This test case will report 5 passing assertions; one for each of the three
|
||||||
values in section `a1`, and then two in section `a2`, from values 2 and 6.
|
values in section `a1`, and then two in section `a2`, from values 2 and 4.
|
||||||
|
|
||||||
Note that as soon as one section is skipped, the entire test case will
|
Note that as soon as one section is skipped, the entire test case will
|
||||||
be reported as _skipped_ (unless there is a failing assertion, in which
|
be reported as _skipped_ (unless there is a failing assertion, in which
|
||||||
|
|||||||
@@ -39,6 +39,22 @@ public:
|
|||||||
current_number = m_dist(m_rand);
|
current_number = m_dist(m_rand);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Note: this improves the performance only a bit, but it is here
|
||||||
|
// to show how you can override the skip functionality.
|
||||||
|
void skipToNthElementImpl( std::size_t n ) override {
|
||||||
|
auto current_index = currentElementIndex();
|
||||||
|
assert(current_index <= n);
|
||||||
|
// We cannot jump forward the underlying generator directly,
|
||||||
|
// because we do not know how many bits each distributed number
|
||||||
|
// would consume to be generated.
|
||||||
|
for (; current_index < n; ++current_index) {
|
||||||
|
(void)m_dist(m_rand);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We do not have to touch the current element index; it is handled
|
||||||
|
// by the base class.
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Avoids -Wweak-vtables
|
// Avoids -Wweak-vtables
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ set(IMPL_HEADERS
|
|||||||
${SOURCES_DIR}/internal/catch_test_registry.hpp
|
${SOURCES_DIR}/internal/catch_test_registry.hpp
|
||||||
${SOURCES_DIR}/internal/catch_test_spec_parser.hpp
|
${SOURCES_DIR}/internal/catch_test_spec_parser.hpp
|
||||||
${SOURCES_DIR}/internal/catch_textflow.hpp
|
${SOURCES_DIR}/internal/catch_textflow.hpp
|
||||||
${SOURCES_DIR}/internal/catch_thread_local.hpp
|
|
||||||
${SOURCES_DIR}/internal/catch_thread_support.hpp
|
${SOURCES_DIR}/internal/catch_thread_support.hpp
|
||||||
${SOURCES_DIR}/internal/catch_to_string.hpp
|
${SOURCES_DIR}/internal/catch_to_string.hpp
|
||||||
${SOURCES_DIR}/internal/catch_uncaught_exceptions.hpp
|
${SOURCES_DIR}/internal/catch_uncaught_exceptions.hpp
|
||||||
|
|||||||
@@ -122,7 +122,6 @@
|
|||||||
#include <catch2/internal/catch_test_registry.hpp>
|
#include <catch2/internal/catch_test_registry.hpp>
|
||||||
#include <catch2/internal/catch_test_spec_parser.hpp>
|
#include <catch2/internal/catch_test_spec_parser.hpp>
|
||||||
#include <catch2/internal/catch_textflow.hpp>
|
#include <catch2/internal/catch_textflow.hpp>
|
||||||
#include <catch2/internal/catch_thread_local.hpp>
|
|
||||||
#include <catch2/internal/catch_thread_support.hpp>
|
#include <catch2/internal/catch_thread_support.hpp>
|
||||||
#include <catch2/internal/catch_to_string.hpp>
|
#include <catch2/internal/catch_to_string.hpp>
|
||||||
#include <catch2/internal/catch_uncaught_exceptions.hpp>
|
#include <catch2/internal/catch_uncaught_exceptions.hpp>
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
|
|
||||||
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
||||||
|
#include <catch2/generators/catch_generators.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
@@ -21,6 +23,30 @@ namespace Catch {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GeneratorUntypedBase::skipToNthElementImpl( std::size_t n ) {
|
||||||
|
for ( size_t i = m_currentElementIndex; i < n; ++i ) {
|
||||||
|
bool isValid = next();
|
||||||
|
if ( !isValid ) {
|
||||||
|
Detail::throw_generator_exception(
|
||||||
|
"Coud not jump to Nth element: not enough elements" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GeneratorUntypedBase::skipToNthElement( std::size_t n ) {
|
||||||
|
if ( n < m_currentElementIndex ) {
|
||||||
|
Detail::throw_generator_exception(
|
||||||
|
"Tried to jump generator backwards" );
|
||||||
|
}
|
||||||
|
skipToNthElementImpl(n);
|
||||||
|
|
||||||
|
// Fixup tracking after moving the generator forward
|
||||||
|
// * Ensure that the correct element index is set after skipping
|
||||||
|
// * Invalidate cache
|
||||||
|
m_currentElementIndex = n;
|
||||||
|
m_stringReprCache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
StringRef GeneratorUntypedBase::currentElementAsString() const {
|
StringRef GeneratorUntypedBase::currentElementAsString() const {
|
||||||
if ( m_stringReprCache.empty() ) {
|
if ( m_stringReprCache.empty() ) {
|
||||||
m_stringReprCache = stringifyImpl();
|
m_stringReprCache = stringifyImpl();
|
||||||
|
|||||||
@@ -35,6 +35,15 @@ namespace Catch {
|
|||||||
//! Customization point for `currentElementAsString`
|
//! Customization point for `currentElementAsString`
|
||||||
virtual std::string stringifyImpl() const = 0;
|
virtual std::string stringifyImpl() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customization point for skipping to the n-th element
|
||||||
|
*
|
||||||
|
* Defaults to successively calling `countedNext`. If there
|
||||||
|
* are not enough elements to reach the nth one, will throw
|
||||||
|
* an error.
|
||||||
|
*/
|
||||||
|
virtual void skipToNthElementImpl( std::size_t n );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GeneratorUntypedBase() = default;
|
GeneratorUntypedBase() = default;
|
||||||
// Generation of copy ops is deprecated (and Clang will complain)
|
// Generation of copy ops is deprecated (and Clang will complain)
|
||||||
@@ -58,6 +67,13 @@ namespace Catch {
|
|||||||
|
|
||||||
std::size_t currentElementIndex() const { return m_currentElementIndex; }
|
std::size_t currentElementIndex() const { return m_currentElementIndex; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the generator forward **to** the n-th element
|
||||||
|
*
|
||||||
|
* Cannot move backwards.
|
||||||
|
*/
|
||||||
|
void skipToNthElement( std::size_t n );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns generator's current element as user-friendly string.
|
* Returns generator's current element as user-friendly string.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ namespace Catch {
|
|||||||
( "list all listeners" )
|
( "list all listeners" )
|
||||||
| Opt( setTestOrder, "decl|lex|rand" )
|
| Opt( setTestOrder, "decl|lex|rand" )
|
||||||
["--order"]
|
["--order"]
|
||||||
( "test case order (defaults to rand)" )
|
( "test case order (defaults to decl)" )
|
||||||
| Opt( setRngSeed, "'time'|'random-device'|number" )
|
| Opt( setRngSeed, "'time'|'random-device'|number" )
|
||||||
["--rng-seed"]
|
["--rng-seed"]
|
||||||
( "set a specific seed for random numbers" )
|
( "set a specific seed for random numbers" )
|
||||||
|
|||||||
@@ -164,9 +164,7 @@ namespace {
|
|||||||
#if defined( CATCH_PLATFORM_LINUX ) \
|
#if defined( CATCH_PLATFORM_LINUX ) \
|
||||||
|| defined( CATCH_PLATFORM_MAC ) \
|
|| defined( CATCH_PLATFORM_MAC ) \
|
||||||
|| defined( __GLIBC__ ) \
|
|| defined( __GLIBC__ ) \
|
||||||
|| (defined( __FreeBSD__ ) \
|
|| defined( __FreeBSD__ ) \
|
||||||
/* PlayStation platform does not have `isatty()` */ \
|
|
||||||
&& !defined(CATCH_PLATFORM_PLAYSTATION)) \
|
|
||||||
|| defined( CATCH_PLATFORM_QNX )
|
|| defined( CATCH_PLATFORM_QNX )
|
||||||
# define CATCH_INTERNAL_HAS_ISATTY
|
# define CATCH_INTERNAL_HAS_ISATTY
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#ifndef CATCH_JSONWRITER_HPP_INCLUDED
|
#ifndef CATCH_JSONWRITER_HPP_INCLUDED
|
||||||
#define CATCH_JSONWRITER_HPP_INCLUDED
|
#define CATCH_JSONWRITER_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/internal/catch_lifetimebound.hpp>
|
|
||||||
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
||||||
#include <catch2/internal/catch_stringref.hpp>
|
#include <catch2/internal/catch_stringref.hpp>
|
||||||
|
|
||||||
@@ -28,8 +27,8 @@ namespace Catch {
|
|||||||
|
|
||||||
class JsonValueWriter {
|
class JsonValueWriter {
|
||||||
public:
|
public:
|
||||||
JsonValueWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND );
|
JsonValueWriter( std::ostream& os );
|
||||||
JsonValueWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND, std::uint64_t indent_level );
|
JsonValueWriter( std::ostream& os, std::uint64_t indent_level );
|
||||||
|
|
||||||
JsonObjectWriter writeObject() &&;
|
JsonObjectWriter writeObject() &&;
|
||||||
JsonArrayWriter writeArray() &&;
|
JsonArrayWriter writeArray() &&;
|
||||||
@@ -63,8 +62,8 @@ namespace Catch {
|
|||||||
|
|
||||||
class JsonObjectWriter {
|
class JsonObjectWriter {
|
||||||
public:
|
public:
|
||||||
JsonObjectWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND );
|
JsonObjectWriter( std::ostream& os );
|
||||||
JsonObjectWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND, std::uint64_t indent_level );
|
JsonObjectWriter( std::ostream& os, std::uint64_t indent_level );
|
||||||
|
|
||||||
JsonObjectWriter( JsonObjectWriter&& source ) noexcept;
|
JsonObjectWriter( JsonObjectWriter&& source ) noexcept;
|
||||||
JsonObjectWriter& operator=( JsonObjectWriter&& source ) = delete;
|
JsonObjectWriter& operator=( JsonObjectWriter&& source ) = delete;
|
||||||
@@ -82,8 +81,8 @@ namespace Catch {
|
|||||||
|
|
||||||
class JsonArrayWriter {
|
class JsonArrayWriter {
|
||||||
public:
|
public:
|
||||||
JsonArrayWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND );
|
JsonArrayWriter( std::ostream& os );
|
||||||
JsonArrayWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND, std::uint64_t indent_level );
|
JsonArrayWriter( std::ostream& os, std::uint64_t indent_level );
|
||||||
|
|
||||||
JsonArrayWriter( JsonArrayWriter&& source ) noexcept;
|
JsonArrayWriter( JsonArrayWriter&& source ) noexcept;
|
||||||
JsonArrayWriter& operator=( JsonArrayWriter&& source ) = delete;
|
JsonArrayWriter& operator=( JsonArrayWriter&& source ) = delete;
|
||||||
|
|||||||
@@ -7,24 +7,20 @@
|
|||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
|
|
||||||
#include <catch2/internal/catch_message_info.hpp>
|
#include <catch2/internal/catch_message_info.hpp>
|
||||||
#include <catch2/internal/catch_thread_local.hpp>
|
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
namespace {
|
|
||||||
// Messages are owned by their individual threads, so the counter should
|
|
||||||
// be thread-local as well. Alternative consideration: atomic counter,
|
|
||||||
// so threads don't share IDs and things are easier to debug.
|
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL unsigned int messageIDCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageInfo::MessageInfo( StringRef _macroName,
|
MessageInfo::MessageInfo( StringRef _macroName,
|
||||||
SourceLineInfo const& _lineInfo,
|
SourceLineInfo const& _lineInfo,
|
||||||
ResultWas::OfType _type )
|
ResultWas::OfType _type )
|
||||||
: macroName( _macroName ),
|
: macroName( _macroName ),
|
||||||
lineInfo( _lineInfo ),
|
lineInfo( _lineInfo ),
|
||||||
type( _type ),
|
type( _type ),
|
||||||
sequence( ++messageIDCounter )
|
sequence( ++globalCount )
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
// Messages are owned by their individual threads, so the counter should be thread-local as well.
|
||||||
|
// Alternative consideration: atomic, so threads don't share IDs and things are easier to debug.
|
||||||
|
thread_local unsigned int MessageInfo::globalCount = 0;
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ namespace Catch {
|
|||||||
bool operator < (MessageInfo const& other) const {
|
bool operator < (MessageInfo const& other) const {
|
||||||
return sequence < other.sequence;
|
return sequence < other.sequence;
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
static thread_local unsigned int globalCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#include <catch2/internal/catch_output_redirect.hpp>
|
#include <catch2/internal/catch_output_redirect.hpp>
|
||||||
#include <catch2/internal/catch_assertion_handler.hpp>
|
#include <catch2/internal/catch_assertion_handler.hpp>
|
||||||
#include <catch2/internal/catch_test_failure_exception.hpp>
|
#include <catch2/internal/catch_test_failure_exception.hpp>
|
||||||
#include <catch2/internal/catch_thread_local.hpp>
|
|
||||||
#include <catch2/internal/catch_result_type.hpp>
|
#include <catch2/internal/catch_result_type.hpp>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@@ -174,40 +173,27 @@ namespace Catch {
|
|||||||
// should also be thread local. For now we just use naked globals
|
// should also be thread local. For now we just use naked globals
|
||||||
// below, in the future we will want to allocate piece of memory
|
// below, in the future we will want to allocate piece of memory
|
||||||
// from heap, to avoid consuming too much thread-local storage.
|
// from heap, to avoid consuming too much thread-local storage.
|
||||||
//
|
|
||||||
// Note that we also don't want non-trivial the thread-local variables
|
|
||||||
// below be initialized for every thread, only for those that touch
|
|
||||||
// Catch2. To make this work with both GCC/Clang and MSVC, we have to
|
|
||||||
// make them thread-local magic statics. (Class-level statics have the
|
|
||||||
// desired semantics on GCC, but not on MSVC).
|
|
||||||
|
|
||||||
// This is used for the "if" part of CHECKED_IF/CHECKED_ELSE
|
// This is used for the "if" part of CHECKED_IF/CHECKED_ELSE
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL bool g_lastAssertionPassed = false;
|
static thread_local bool g_lastAssertionPassed = false;
|
||||||
|
|
||||||
// This is the source location for last encountered macro. It is
|
// This is the source location for last encountered macro. It is
|
||||||
// used to provide the users with more precise location of error
|
// used to provide the users with more precise location of error
|
||||||
// when an unexpected exception/fatal error happens.
|
// when an unexpected exception/fatal error happens.
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL SourceLineInfo
|
static thread_local SourceLineInfo g_lastKnownLineInfo("DummyLocation", static_cast<size_t>(-1));
|
||||||
g_lastKnownLineInfo( "DummyLocation", static_cast<size_t>( -1 ) );
|
|
||||||
|
|
||||||
// Should we clear message scopes before sending off the messages to
|
// Should we clear message scopes before sending off the messages to
|
||||||
// reporter? Set in `assertionPassedFastPath` to avoid doing the full
|
// reporter? Set in `assertionPassedFastPath` to avoid doing the full
|
||||||
// clear there for performance reasons.
|
// clear there for performance reasons.
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL bool g_clearMessageScopes = false;
|
static thread_local bool g_clearMessageScopes = false;
|
||||||
|
|
||||||
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
|
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION
|
||||||
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
|
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS
|
||||||
// Actual messages to be provided to the reporter
|
// Actual messages to be provided to the reporter
|
||||||
static std::vector<MessageInfo>& g_messages() {
|
static thread_local std::vector<MessageInfo> g_messages;
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL std::vector<MessageInfo> value;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Owners for the UNSCOPED_X information macro
|
// Owners for the UNSCOPED_X information macro
|
||||||
static std::vector<ScopedMessage>& g_messageScopes() {
|
static thread_local std::vector<ScopedMessage> g_messageScopes;
|
||||||
static CATCH_INTERNAL_THREAD_LOCAL std::vector<ScopedMessage> value;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
|
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION
|
||||||
|
|
||||||
} // namespace Detail
|
} // namespace Detail
|
||||||
@@ -224,13 +210,6 @@ namespace Catch {
|
|||||||
{
|
{
|
||||||
getCurrentMutableContext().setResultCapture( this );
|
getCurrentMutableContext().setResultCapture( this );
|
||||||
m_reporter->testRunStarting(m_runInfo);
|
m_reporter->testRunStarting(m_runInfo);
|
||||||
|
|
||||||
// TODO: HACK!
|
|
||||||
// We need to make sure the underlying cache is initialized
|
|
||||||
// while we are guaranteed to be running in a single thread,
|
|
||||||
// because the initialization is not thread-safe.
|
|
||||||
ReusableStringStream rss;
|
|
||||||
(void)rss;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RunContext::~RunContext() {
|
RunContext::~RunContext() {
|
||||||
@@ -354,7 +333,7 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( Detail::g_clearMessageScopes ) {
|
if ( Detail::g_clearMessageScopes ) {
|
||||||
Detail::g_messageScopes().clear();
|
Detail::g_messageScopes.clear();
|
||||||
Detail::g_clearMessageScopes = false;
|
Detail::g_clearMessageScopes = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,11 +342,11 @@ namespace Catch {
|
|||||||
{
|
{
|
||||||
auto _ = scopedDeactivate( *m_outputRedirect );
|
auto _ = scopedDeactivate( *m_outputRedirect );
|
||||||
updateTotalsFromAtomics();
|
updateTotalsFromAtomics();
|
||||||
m_reporter->assertionEnded( AssertionStats( result, Detail::g_messages(), m_totals ) );
|
m_reporter->assertionEnded( AssertionStats( result, Detail::g_messages, m_totals ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( result.getResultType() != ResultWas::Warning ) {
|
if ( result.getResultType() != ResultWas::Warning ) {
|
||||||
Detail::g_messageScopes().clear();
|
Detail::g_messageScopes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset working state. assertion info will be reset after
|
// Reset working state. assertion info will be reset after
|
||||||
@@ -656,10 +635,10 @@ namespace Catch {
|
|||||||
|
|
||||||
m_testCaseTracker->close();
|
m_testCaseTracker->close();
|
||||||
handleUnfinishedSections();
|
handleUnfinishedSections();
|
||||||
Detail::g_messageScopes().clear();
|
Detail::g_messageScopes.clear();
|
||||||
// TBD: At this point, m_messages should be empty. Do we want to
|
// TBD: At this point, m_messages should be empty. Do we want to
|
||||||
// assert that this is true, or keep the defensive clear call?
|
// assert that this is true, or keep the defensive clear call?
|
||||||
Detail::g_messages().clear();
|
Detail::g_messages.clear();
|
||||||
|
|
||||||
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, duration, missingAssertions);
|
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, duration, missingAssertions);
|
||||||
m_reporter->sectionEnded(testCaseSectionStats);
|
m_reporter->sectionEnded(testCaseSectionStats);
|
||||||
@@ -827,7 +806,7 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IResultCapture::pushScopedMessage( MessageInfo&& message ) {
|
void IResultCapture::pushScopedMessage( MessageInfo&& message ) {
|
||||||
Detail::g_messages().push_back( CATCH_MOVE( message ) );
|
Detail::g_messages.push_back( CATCH_MOVE( message ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void IResultCapture::popScopedMessage( unsigned int messageId ) {
|
void IResultCapture::popScopedMessage( unsigned int messageId ) {
|
||||||
@@ -836,9 +815,8 @@ namespace Catch {
|
|||||||
// messages than low single digits, so the optimization is tiny,
|
// messages than low single digits, so the optimization is tiny,
|
||||||
// and we would have to hand-write the loop to avoid terrible
|
// and we would have to hand-write the loop to avoid terrible
|
||||||
// codegen of reverse iterators in debug mode.
|
// codegen of reverse iterators in debug mode.
|
||||||
auto& messages = Detail::g_messages();
|
Detail::g_messages.erase( std::find_if( Detail::g_messages.begin(),
|
||||||
messages.erase( std::find_if( messages.begin(),
|
Detail::g_messages.end(),
|
||||||
messages.end(),
|
|
||||||
[=]( MessageInfo const& msg ) {
|
[=]( MessageInfo const& msg ) {
|
||||||
return msg.sequence ==
|
return msg.sequence ==
|
||||||
messageId;
|
messageId;
|
||||||
@@ -846,15 +824,7 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void IResultCapture::emplaceUnscopedMessage( MessageBuilder&& builder ) {
|
void IResultCapture::emplaceUnscopedMessage( MessageBuilder&& builder ) {
|
||||||
// Invalid unscoped messages are lazy cleared. If we have any,
|
Detail::g_messageScopes.emplace_back( CATCH_MOVE( builder ) );
|
||||||
// we have to get rid of them before adding new ones, or the
|
|
||||||
// delayed clear in assertion handling will erase the valid ones
|
|
||||||
// as well.
|
|
||||||
if ( Detail::g_clearMessageScopes ) {
|
|
||||||
Detail::g_messageScopes().clear();
|
|
||||||
Detail::g_clearMessageScopes = false;
|
|
||||||
}
|
|
||||||
Detail::g_messageScopes().emplace_back( CATCH_MOVE( builder ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void seedRng(IConfig const& config) {
|
void seedRng(IConfig const& config) {
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
// 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
|
|
||||||
#ifndef CATCH_THREAD_LOCAL_HPP_INCLUDED
|
|
||||||
#define CATCH_THREAD_LOCAL_HPP_INCLUDED
|
|
||||||
|
|
||||||
#include <catch2/catch_user_config.hpp>
|
|
||||||
|
|
||||||
#if defined( CATCH_CONFIG_EXPERIMENTAL_THREAD_SAFE_ASSERTIONS )
|
|
||||||
#define CATCH_INTERNAL_THREAD_LOCAL thread_local
|
|
||||||
#else
|
|
||||||
#define CATCH_INTERNAL_THREAD_LOCAL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // CATCH_THREAD_LOCAL_HPP_INCLUDED
|
|
||||||
@@ -23,10 +23,10 @@ namespace Catch {
|
|||||||
using Mutex = std::mutex;
|
using Mutex = std::mutex;
|
||||||
using LockGuard = std::lock_guard<std::mutex>;
|
using LockGuard = std::lock_guard<std::mutex>;
|
||||||
struct AtomicCounts {
|
struct AtomicCounts {
|
||||||
std::atomic<std::uint64_t> passed{ 0 };
|
std::atomic<std::uint64_t> passed = 0;
|
||||||
std::atomic<std::uint64_t> failed{ 0 };
|
std::atomic<std::uint64_t> failed = 0;
|
||||||
std::atomic<std::uint64_t> failedButOk{ 0 };
|
std::atomic<std::uint64_t> failedButOk = 0;
|
||||||
std::atomic<std::uint64_t> skipped{ 0 };
|
std::atomic<std::uint64_t> skipped = 0;
|
||||||
};
|
};
|
||||||
#else // ^^ Use actual mutex, lock and atomics
|
#else // ^^ Use actual mutex, lock and atomics
|
||||||
// vv Dummy implementations for single-thread performance
|
// vv Dummy implementations for single-thread performance
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
#ifndef CATCH_XMLWRITER_HPP_INCLUDED
|
#ifndef CATCH_XMLWRITER_HPP_INCLUDED
|
||||||
#define CATCH_XMLWRITER_HPP_INCLUDED
|
#define CATCH_XMLWRITER_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/internal/catch_lifetimebound.hpp>
|
|
||||||
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
||||||
#include <catch2/internal/catch_stringref.hpp>
|
#include <catch2/internal/catch_stringref.hpp>
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ namespace Catch {
|
|||||||
public:
|
public:
|
||||||
enum ForWhat { ForTextNodes, ForAttributes };
|
enum ForWhat { ForTextNodes, ForAttributes };
|
||||||
|
|
||||||
constexpr XmlEncode( StringRef str CATCH_ATTR_LIFETIMEBOUND, ForWhat forWhat = ForTextNodes ):
|
constexpr XmlEncode( StringRef str, ForWhat forWhat = ForTextNodes ):
|
||||||
m_str( str ), m_forWhat( forWhat ) {}
|
m_str( str ), m_forWhat( forWhat ) {}
|
||||||
|
|
||||||
|
|
||||||
@@ -62,7 +61,7 @@ namespace Catch {
|
|||||||
|
|
||||||
class ScopedElement {
|
class ScopedElement {
|
||||||
public:
|
public:
|
||||||
ScopedElement( XmlWriter* writer CATCH_ATTR_LIFETIMEBOUND, XmlFormatting fmt );
|
ScopedElement( XmlWriter* writer, XmlFormatting fmt );
|
||||||
|
|
||||||
ScopedElement( ScopedElement&& other ) noexcept;
|
ScopedElement( ScopedElement&& other ) noexcept;
|
||||||
ScopedElement& operator=( ScopedElement&& other ) noexcept;
|
ScopedElement& operator=( ScopedElement&& other ) noexcept;
|
||||||
@@ -94,7 +93,7 @@ namespace Catch {
|
|||||||
XmlFormatting m_fmt;
|
XmlFormatting m_fmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
XmlWriter( std::ostream& os CATCH_ATTR_LIFETIMEBOUND );
|
XmlWriter( std::ostream& os );
|
||||||
~XmlWriter();
|
~XmlWriter();
|
||||||
|
|
||||||
XmlWriter( XmlWriter const& ) = delete;
|
XmlWriter( XmlWriter const& ) = delete;
|
||||||
|
|||||||
@@ -148,7 +148,6 @@ internal_headers = [
|
|||||||
'internal/catch_test_registry.hpp',
|
'internal/catch_test_registry.hpp',
|
||||||
'internal/catch_test_spec_parser.hpp',
|
'internal/catch_test_spec_parser.hpp',
|
||||||
'internal/catch_textflow.hpp',
|
'internal/catch_textflow.hpp',
|
||||||
'internal/catch_thread_local.hpp',
|
|
||||||
'internal/catch_thread_support.hpp',
|
'internal/catch_thread_support.hpp',
|
||||||
'internal/catch_to_string.hpp',
|
'internal/catch_to_string.hpp',
|
||||||
'internal/catch_uncaught_exceptions.hpp',
|
'internal/catch_uncaught_exceptions.hpp',
|
||||||
|
|||||||
@@ -177,18 +177,6 @@ set_tests_properties(DeferredStaticChecks
|
|||||||
PASS_REGULAR_EXPRESSION "test cases: 1 \\| 1 failed\nassertions: 3 \\| 3 failed"
|
PASS_REGULAR_EXPRESSION "test cases: 1 \\| 1 failed\nassertions: 3 \\| 3 failed"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(MixingClearedAndUnclearedMessages ${TESTS_DIR}/X06-MixingClearedAndUnclearedMessages.cpp)
|
|
||||||
target_link_libraries(MixingClearedAndUnclearedMessages PRIVATE Catch2WithMain)
|
|
||||||
|
|
||||||
add_test(NAME MixingClearedAndUnclearedMessages
|
|
||||||
COMMAND
|
|
||||||
MixingClearedAndUnclearedMessages
|
|
||||||
-r compact)
|
|
||||||
set_tests_properties(MixingClearedAndUnclearedMessages
|
|
||||||
PROPERTIES
|
|
||||||
PASS_REGULAR_EXPRESSION ": false with 1 message: 'b'"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp)
|
add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp)
|
||||||
target_compile_definitions(FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier)
|
target_compile_definitions(FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier)
|
||||||
target_link_libraries(FallbackStringifier Catch2WithMain)
|
target_link_libraries(FallbackStringifier Catch2WithMain)
|
||||||
@@ -540,7 +528,6 @@ set(EXTRA_TEST_BINARIES
|
|||||||
DuplicatedTestCases-DuplicatedTestCaseMethods
|
DuplicatedTestCases-DuplicatedTestCaseMethods
|
||||||
NoTests
|
NoTests
|
||||||
ListenersGetEventsBeforeReporters
|
ListenersGetEventsBeforeReporters
|
||||||
MixingClearedAndUnclearedMessages
|
|
||||||
# DebugBreakMacros
|
# DebugBreakMacros
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -566,17 +553,3 @@ set_tests_properties(AmalgamatedFileTest
|
|||||||
PROPERTIES
|
PROPERTIES
|
||||||
PASS_REGULAR_EXPRESSION "All tests passed \\(14 assertions in 3 test cases\\)"
|
PASS_REGULAR_EXPRESSION "All tests passed \\(14 assertions in 3 test cases\\)"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(ThreadSafetyTests
|
|
||||||
${TESTS_DIR}/X94-ThreadSafetyTests.cpp
|
|
||||||
)
|
|
||||||
target_link_libraries(ThreadSafetyTests Catch2_buildall_interface)
|
|
||||||
target_compile_definitions(ThreadSafetyTests PUBLIC CATCH_CONFIG_EXPERIMENTAL_THREAD_SAFE_ASSERTIONS)
|
|
||||||
add_test(NAME ThreadSafetyTests
|
|
||||||
COMMAND ThreadSafetyTests -r compact "Failed REQUIRE in the main thread is fine"
|
|
||||||
)
|
|
||||||
set_tests_properties(ThreadSafetyTests
|
|
||||||
PROPERTIES
|
|
||||||
PASS_REGULAR_EXPRESSION "assertions: 801 | 400 passed | 401 failed"
|
|
||||||
RUN_SERIAL ON
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
|
|
||||||
// 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
|
|
||||||
|
|
||||||
/**\file
|
|
||||||
* Checks that when we use up an unscoped message (e.g. `UNSCOPED_INFO`),
|
|
||||||
* with an assertion, and then add another message later, it will be
|
|
||||||
* properly reported with later failing assertion.
|
|
||||||
*
|
|
||||||
* This needs separate binary to avoid the main test binary's validating
|
|
||||||
* listener, which disables the assertion fast path.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
|
|
||||||
TEST_CASE(
|
|
||||||
"Delayed unscoped message clearing does not catch newly inserted messages",
|
|
||||||
"[messages][unscoped][!shouldfail]" ) {
|
|
||||||
UNSCOPED_INFO( "a" );
|
|
||||||
REQUIRE( true );
|
|
||||||
UNSCOPED_INFO( "b" );
|
|
||||||
REQUIRE( false );
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
|
|
||||||
// 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
|
|
||||||
|
|
||||||
/**\file
|
|
||||||
* Test that assertions and messages are thread-safe.
|
|
||||||
*
|
|
||||||
* This is done by spamming assertions and messages on multiple subthreads.
|
|
||||||
* In manual, this reliably causes segfaults if the test is linked against
|
|
||||||
* a non-thread-safe version of Catch2.
|
|
||||||
*
|
|
||||||
* The CTest test definition should also verify that the final assertion
|
|
||||||
* count is correct.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <catch2/catch_test_macros.hpp>
|
|
||||||
|
|
||||||
#include <thread>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
TEST_CASE( "Failed REQUIRE in the main thread is fine", "[!shouldfail]" ) {
|
|
||||||
std::vector<std::thread> threads;
|
|
||||||
for ( size_t t = 0; t < 4; ++t) {
|
|
||||||
threads.emplace_back( [t]() {
|
|
||||||
CAPTURE(t);
|
|
||||||
for (size_t i = 0; i < 100; ++i) {
|
|
||||||
CAPTURE(i);
|
|
||||||
CHECK( false );
|
|
||||||
CHECK( true );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto& t : threads) {
|
|
||||||
t.join();
|
|
||||||
}
|
|
||||||
|
|
||||||
REQUIRE( false );
|
|
||||||
}
|
|
||||||
@@ -138,7 +138,6 @@ Nor would this
|
|||||||
:test-result: FAIL Custom exceptions can be translated when testing for throwing as something else
|
: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: FAIL Custom std-exceptions can be custom translated
|
||||||
:test-result: PASS Default scale is invisible to comparison
|
:test-result: PASS Default scale is invisible to comparison
|
||||||
:test-result: XFAIL Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
:test-result: PASS Directly creating an EnumInfo
|
:test-result: PASS Directly creating an EnumInfo
|
||||||
:test-result: SKIP Empty generators can SKIP in constructor
|
:test-result: SKIP Empty generators can SKIP in constructor
|
||||||
:test-result: PASS Empty stream name opens cout stream
|
:test-result: PASS Empty stream name opens cout stream
|
||||||
@@ -169,6 +168,7 @@ Nor would this
|
|||||||
:test-result: PASS GENERATE can combine literals and generators
|
:test-result: PASS GENERATE can combine literals and generators
|
||||||
:test-result: PASS Generators -- adapters
|
:test-result: PASS Generators -- adapters
|
||||||
:test-result: PASS Generators -- simple
|
:test-result: PASS Generators -- simple
|
||||||
|
:test-result: PASS Generators can be skipped forward
|
||||||
:test-result: PASS Generators internals
|
:test-result: PASS Generators internals
|
||||||
:test-result: PASS Greater-than inequalities with different epsilons
|
:test-result: PASS Greater-than inequalities with different epsilons
|
||||||
:test-result: PASS Hashers with different seed produce different hash with same test case
|
:test-result: PASS Hashers with different seed produce different hash with same test case
|
||||||
|
|||||||
@@ -136,7 +136,6 @@
|
|||||||
:test-result: FAIL Custom exceptions can be translated when testing for throwing as something else
|
: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: FAIL Custom std-exceptions can be custom translated
|
||||||
:test-result: PASS Default scale is invisible to comparison
|
:test-result: PASS Default scale is invisible to comparison
|
||||||
:test-result: XFAIL Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
:test-result: PASS Directly creating an EnumInfo
|
:test-result: PASS Directly creating an EnumInfo
|
||||||
:test-result: SKIP Empty generators can SKIP in constructor
|
:test-result: SKIP Empty generators can SKIP in constructor
|
||||||
:test-result: PASS Empty stream name opens cout stream
|
:test-result: PASS Empty stream name opens cout stream
|
||||||
@@ -167,6 +166,7 @@
|
|||||||
:test-result: PASS GENERATE can combine literals and generators
|
:test-result: PASS GENERATE can combine literals and generators
|
||||||
:test-result: PASS Generators -- adapters
|
:test-result: PASS Generators -- adapters
|
||||||
:test-result: PASS Generators -- simple
|
:test-result: PASS Generators -- simple
|
||||||
|
:test-result: PASS Generators can be skipped forward
|
||||||
:test-result: PASS Generators internals
|
:test-result: PASS Generators internals
|
||||||
:test-result: PASS Greater-than inequalities with different epsilons
|
:test-result: PASS Greater-than inequalities with different epsilons
|
||||||
:test-result: PASS Hashers with different seed produce different hash with same test case
|
:test-result: PASS Hashers with different seed produce different hash with same test case
|
||||||
|
|||||||
@@ -562,8 +562,6 @@ Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'c
|
|||||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
||||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||||
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'a'
|
|
||||||
Message.tests.cpp:<line number>: failed: false with 1 message: 'b'
|
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **}
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **}
|
||||||
@@ -789,6 +787,13 @@ Generators.tests.cpp:<line number>: passed: j < i for: -1 < 3
|
|||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 1
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 1
|
||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 2
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 2
|
||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 3
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 0 for: 0 == 0
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 3 for: 3 == 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.get() == 3 for: 3 == 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 5 for: 5 == 5
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.get() == 5 for: 5 == 5
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.skipToNthElement( 3 )
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.skipToNthElement( 6 )
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 123 for: 123 == 123
|
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 123 for: 123 == 123
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1
|
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1
|
||||||
@@ -2890,7 +2895,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
|
|||||||
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||||
Misc.tests.cpp:<line number>: passed:
|
Misc.tests.cpp:<line number>: passed:
|
||||||
Misc.tests.cpp:<line number>: passed:
|
Misc.tests.cpp:<line number>: passed:
|
||||||
test cases: 436 | 317 passed | 95 failed | 6 skipped | 18 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2305 | 2106 passed | 157 failed | 42 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -560,8 +560,6 @@ Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'c
|
|||||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom std exception'
|
||||||
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
Approx.tests.cpp:<line number>: passed: 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||||
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
Approx.tests.cpp:<line number>: passed: std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||||
Message.tests.cpp:<line number>: passed: true with 1 message: 'a'
|
|
||||||
Message.tests.cpp:<line number>: failed: false with 1 message: 'b'
|
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(1) == "Value2" for: Value2 == "Value2"
|
||||||
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **}
|
ToString.tests.cpp:<line number>: passed: enumInfo->lookup(3) == "{** unexpected enum value **}" for: {** unexpected enum value **}
|
||||||
@@ -787,6 +785,13 @@ Generators.tests.cpp:<line number>: passed: j < i for: -1 < 3
|
|||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 1
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 1
|
||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 2
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 2
|
||||||
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 3
|
Generators.tests.cpp:<line number>: passed: 4u * i > str.size() for: 12 > 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 0 for: 0 == 0
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 3 for: 3 == 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.get() == 3 for: 3 == 3
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.currentElementIndex() == 5 for: 5 == 5
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.get() == 5 for: 5 == 5
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.skipToNthElement( 3 )
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: passed: generator.skipToNthElement( 6 )
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 123 for: 123 == 123
|
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 123 for: 123 == 123
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
GeneratorsImpl.tests.cpp:<line number>: passed: !(gen.next()) for: !false
|
||||||
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1
|
GeneratorsImpl.tests.cpp:<line number>: passed: gen.get() == 1 for: 1 == 1
|
||||||
@@ -2879,7 +2884,7 @@ InternalBenchmark.tests.cpp:<line number>: passed: med == 18. for: 18.0 == 18.0
|
|||||||
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
InternalBenchmark.tests.cpp:<line number>: passed: q3 == 23. for: 23.0 == 23.0
|
||||||
Misc.tests.cpp:<line number>: passed:
|
Misc.tests.cpp:<line number>: passed:
|
||||||
Misc.tests.cpp:<line number>: passed:
|
Misc.tests.cpp:<line number>: passed:
|
||||||
test cases: 436 | 317 passed | 95 failed | 6 skipped | 18 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2305 | 2106 passed | 157 failed | 42 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -450,17 +450,6 @@ Exception.tests.cpp:<line number>: FAILED:
|
|||||||
due to unexpected exception with message:
|
due to unexpected exception with message:
|
||||||
custom std exception
|
custom std exception
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Message.tests.cpp:<line number>
|
|
||||||
...............................................................................
|
|
||||||
|
|
||||||
Message.tests.cpp:<line number>: FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
with message:
|
|
||||||
b
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Empty generators can SKIP in constructor
|
Empty generators can SKIP in constructor
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@@ -1730,6 +1719,6 @@ due to unexpected exception with message:
|
|||||||
Why would you throw a std::string?
|
Why would you throw a std::string?
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 436 | 335 passed | 76 failed | 7 skipped | 18 failed as expected
|
test cases: 436 | 336 passed | 76 failed | 7 skipped | 17 failed as expected
|
||||||
assertions: 2284 | 2106 passed | 136 failed | 42 failed as expected
|
assertions: 2289 | 2112 passed | 136 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|||||||
@@ -4148,22 +4148,6 @@ Approx.tests.cpp:<line number>: PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
0.00001 != Approx( 0.0000001 )
|
0.00001 != Approx( 0.0000001 )
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Message.tests.cpp:<line number>
|
|
||||||
...............................................................................
|
|
||||||
|
|
||||||
Message.tests.cpp:<line number>: PASSED:
|
|
||||||
REQUIRE( true )
|
|
||||||
with message:
|
|
||||||
a
|
|
||||||
|
|
||||||
Message.tests.cpp:<line number>: FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
with message:
|
|
||||||
b
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Directly creating an EnumInfo
|
Directly creating an EnumInfo
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@@ -5847,6 +5831,43 @@ Generators.tests.cpp:<line number>: PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
12 > 3
|
12 > 3
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Generators can be skipped forward
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>
|
||||||
|
...............................................................................
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 0 )
|
||||||
|
with expansion:
|
||||||
|
0 == 0
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 3 )
|
||||||
|
with expansion:
|
||||||
|
3 == 3
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.get() == 3 )
|
||||||
|
with expansion:
|
||||||
|
3 == 3
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 5 )
|
||||||
|
with expansion:
|
||||||
|
5 == 5
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.get() == 5 )
|
||||||
|
with expansion:
|
||||||
|
5 == 5
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 3 ) )
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 6 ) )
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Generators internals
|
Generators internals
|
||||||
Single value
|
Single value
|
||||||
@@ -19311,6 +19332,6 @@ Misc.tests.cpp:<line number>
|
|||||||
Misc.tests.cpp:<line number>: PASSED:
|
Misc.tests.cpp:<line number>: PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 436 | 317 passed | 95 failed | 6 skipped | 18 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2305 | 2106 passed | 157 failed | 42 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|||||||
@@ -4146,22 +4146,6 @@ Approx.tests.cpp:<line number>: PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
0.00001 != Approx( 0.0000001 )
|
0.00001 != Approx( 0.0000001 )
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Message.tests.cpp:<line number>
|
|
||||||
...............................................................................
|
|
||||||
|
|
||||||
Message.tests.cpp:<line number>: PASSED:
|
|
||||||
REQUIRE( true )
|
|
||||||
with message:
|
|
||||||
a
|
|
||||||
|
|
||||||
Message.tests.cpp:<line number>: FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
with message:
|
|
||||||
b
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Directly creating an EnumInfo
|
Directly creating an EnumInfo
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@@ -5845,6 +5829,43 @@ Generators.tests.cpp:<line number>: PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
12 > 3
|
12 > 3
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Generators can be skipped forward
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>
|
||||||
|
...............................................................................
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 0 )
|
||||||
|
with expansion:
|
||||||
|
0 == 0
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 3 )
|
||||||
|
with expansion:
|
||||||
|
3 == 3
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.get() == 3 )
|
||||||
|
with expansion:
|
||||||
|
3 == 3
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.currentElementIndex() == 5 )
|
||||||
|
with expansion:
|
||||||
|
5 == 5
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE( generator.get() == 5 )
|
||||||
|
with expansion:
|
||||||
|
5 == 5
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 3 ) )
|
||||||
|
|
||||||
|
GeneratorsImpl.tests.cpp:<line number>: PASSED:
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 6 ) )
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Generators internals
|
Generators internals
|
||||||
Single value
|
Single value
|
||||||
@@ -19300,6 +19321,6 @@ Misc.tests.cpp:<line number>
|
|||||||
Misc.tests.cpp:<line number>: PASSED:
|
Misc.tests.cpp:<line number>: PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 436 | 317 passed | 95 failed | 6 skipped | 18 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2305 | 2106 passed | 157 failed | 42 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<testsuitesloose text artifact
|
<testsuitesloose text artifact
|
||||||
>
|
>
|
||||||
<testsuite name="<exe-name>" errors="17" failures="140" skipped="12" tests="2317" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
<testsuite name="<exe-name>" errors="17" failures="140" skipped="12" tests="2322" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="random-seed" value="1"/>
|
<property name="random-seed" value="1"/>
|
||||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||||
@@ -547,15 +547,6 @@ at Exception.tests.cpp:<line number>
|
|||||||
</error>
|
</error>
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase classname="<exe-name>.global" name="Default scale is invisible to comparison" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Default scale is invisible to comparison" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Delayed unscoped message clearing does not catch newly inserted messages" time="{duration}" status="run">
|
|
||||||
<skipped message="TEST_CASE tagged with !mayfail"/>
|
|
||||||
<failure message="false" type="REQUIRE">
|
|
||||||
FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
b
|
|
||||||
at Message.tests.cpp:<line number>
|
|
||||||
</failure>
|
|
||||||
</testcase>
|
|
||||||
<testcase classname="<exe-name>.global" name="Directly creating an EnumInfo" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Directly creating an EnumInfo" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Empty generators can SKIP in constructor" time="{duration}" status="run">
|
<testcase classname="<exe-name>.global" name="Empty generators can SKIP in constructor" time="{duration}" status="run">
|
||||||
<skipped type="SKIP">
|
<skipped type="SKIP">
|
||||||
@@ -846,6 +837,7 @@ at Message.tests.cpp:<line number>
|
|||||||
<testcase classname="<exe-name>.global" name="Generators -- simple" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators -- simple/one" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple/one" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators -- simple/two" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple/two" time="{duration}" status="run"/>
|
||||||
|
<testcase classname="<exe-name>.global" name="Generators can be skipped forward" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals/Single value" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals/Single value" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals/Preset values" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals/Preset values" time="{duration}" status="run"/>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="<exe-name>" errors="17" failures="140" skipped="12" tests="2317" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
<testsuite name="<exe-name>" errors="17" failures="140" skipped="12" tests="2322" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="random-seed" value="1"/>
|
<property name="random-seed" value="1"/>
|
||||||
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
<property name="filters" value=""*" ~[!nonportable] ~[!benchmark] ~[approvals]"/>
|
||||||
@@ -546,15 +546,6 @@ at Exception.tests.cpp:<line number>
|
|||||||
</error>
|
</error>
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase classname="<exe-name>.global" name="Default scale is invisible to comparison" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Default scale is invisible to comparison" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Delayed unscoped message clearing does not catch newly inserted messages" time="{duration}" status="run">
|
|
||||||
<skipped message="TEST_CASE tagged with !mayfail"/>
|
|
||||||
<failure message="false" type="REQUIRE">
|
|
||||||
FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
b
|
|
||||||
at Message.tests.cpp:<line number>
|
|
||||||
</failure>
|
|
||||||
</testcase>
|
|
||||||
<testcase classname="<exe-name>.global" name="Directly creating an EnumInfo" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Directly creating an EnumInfo" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Empty generators can SKIP in constructor" time="{duration}" status="run">
|
<testcase classname="<exe-name>.global" name="Empty generators can SKIP in constructor" time="{duration}" status="run">
|
||||||
<skipped type="SKIP">
|
<skipped type="SKIP">
|
||||||
@@ -845,6 +836,7 @@ at Message.tests.cpp:<line number>
|
|||||||
<testcase classname="<exe-name>.global" name="Generators -- simple" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators -- simple/one" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple/one" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators -- simple/two" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators -- simple/two" time="{duration}" status="run"/>
|
||||||
|
<testcase classname="<exe-name>.global" name="Generators can be skipped forward" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals/Single value" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals/Single value" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Generators internals/Preset values" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Generators internals/Preset values" time="{duration}" status="run"/>
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ at AssertionHandler.tests.cpp:<line number>
|
|||||||
</file>
|
</file>
|
||||||
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
|
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
|
||||||
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
|
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
|
||||||
|
<testCase name="Generators can be skipped forward" duration="{duration}"/>
|
||||||
<testCase name="Generators internals" duration="{duration}"/>
|
<testCase name="Generators internals" duration="{duration}"/>
|
||||||
<testCase name="Generators internals/Single value" duration="{duration}"/>
|
<testCase name="Generators internals/Single value" duration="{duration}"/>
|
||||||
<testCase name="Generators internals/Preset values" duration="{duration}"/>
|
<testCase name="Generators internals/Preset values" duration="{duration}"/>
|
||||||
@@ -1699,14 +1700,6 @@ at Message.tests.cpp:<line number>
|
|||||||
</failure>
|
</failure>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase name="Captures outlive section end/Dummy section" duration="{duration}"/>
|
<testCase name="Captures outlive section end/Dummy section" duration="{duration}"/>
|
||||||
<testCase name="Delayed unscoped message clearing does not catch newly inserted messages" duration="{duration}">
|
|
||||||
<skipped message="REQUIRE(false)">
|
|
||||||
FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
b
|
|
||||||
at Message.tests.cpp:<line number>
|
|
||||||
</skipped>
|
|
||||||
</testCase>
|
|
||||||
<testCase name="FAIL aborts the test" duration="{duration}">
|
<testCase name="FAIL aborts the test" duration="{duration}">
|
||||||
<failure message="FAIL()">
|
<failure message="FAIL()">
|
||||||
FAILED:
|
FAILED:
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ at AssertionHandler.tests.cpp:<line number>
|
|||||||
</file>
|
</file>
|
||||||
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
|
<file path="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp">
|
||||||
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
|
<testCase name="Filter generator throws exception for empty generator" duration="{duration}"/>
|
||||||
|
<testCase name="Generators can be skipped forward" duration="{duration}"/>
|
||||||
<testCase name="Generators internals" duration="{duration}"/>
|
<testCase name="Generators internals" duration="{duration}"/>
|
||||||
<testCase name="Generators internals/Single value" duration="{duration}"/>
|
<testCase name="Generators internals/Single value" duration="{duration}"/>
|
||||||
<testCase name="Generators internals/Preset values" duration="{duration}"/>
|
<testCase name="Generators internals/Preset values" duration="{duration}"/>
|
||||||
@@ -1698,14 +1699,6 @@ at Message.tests.cpp:<line number>
|
|||||||
</failure>
|
</failure>
|
||||||
</testCase>
|
</testCase>
|
||||||
<testCase name="Captures outlive section end/Dummy section" duration="{duration}"/>
|
<testCase name="Captures outlive section end/Dummy section" duration="{duration}"/>
|
||||||
<testCase name="Delayed unscoped message clearing does not catch newly inserted messages" duration="{duration}">
|
|
||||||
<skipped message="REQUIRE(false)">
|
|
||||||
FAILED:
|
|
||||||
REQUIRE( false )
|
|
||||||
b
|
|
||||||
at Message.tests.cpp:<line number>
|
|
||||||
</skipped>
|
|
||||||
</testCase>
|
|
||||||
<testCase name="FAIL aborts the test" duration="{duration}">
|
<testCase name="FAIL aborts the test" duration="{duration}">
|
||||||
<failure message="FAIL()">
|
<failure message="FAIL()">
|
||||||
FAILED:
|
FAILED:
|
||||||
|
|||||||
@@ -1024,10 +1024,6 @@ not ok {test-number} - unexpected exception with message: 'custom std exception'
|
|||||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||||
# Default scale is invisible to comparison
|
# Default scale is invisible to comparison
|
||||||
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||||
# Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
ok {test-number} - true with 1 message: 'a'
|
|
||||||
# Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
not ok {test-number} - false with 1 message: 'b'
|
|
||||||
# Directly creating an EnumInfo
|
# Directly creating an EnumInfo
|
||||||
ok {test-number} - enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
ok {test-number} - enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||||
# Directly creating an EnumInfo
|
# Directly creating an EnumInfo
|
||||||
@@ -1434,6 +1430,20 @@ ok {test-number} - 4u * i > str.size() for: 12 > 1
|
|||||||
ok {test-number} - 4u * i > str.size() for: 12 > 2
|
ok {test-number} - 4u * i > str.size() for: 12 > 2
|
||||||
# Generators -- simple
|
# Generators -- simple
|
||||||
ok {test-number} - 4u * i > str.size() for: 12 > 3
|
ok {test-number} - 4u * i > str.size() for: 12 > 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 0 for: 0 == 0
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 3 for: 3 == 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.get() == 3 for: 3 == 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 5 for: 5 == 5
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.get() == 5 for: 5 == 5
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.skipToNthElement( 3 )
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.skipToNthElement( 6 )
|
||||||
# Generators internals
|
# Generators internals
|
||||||
ok {test-number} - gen.get() == 123 for: 123 == 123
|
ok {test-number} - gen.get() == 123 for: 123 == 123
|
||||||
# Generators internals
|
# Generators internals
|
||||||
@@ -4631,5 +4641,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
|||||||
ok {test-number} -
|
ok {test-number} -
|
||||||
# xmlentitycheck
|
# xmlentitycheck
|
||||||
ok {test-number} -
|
ok {test-number} -
|
||||||
1..2317
|
1..2322
|
||||||
|
|
||||||
|
|||||||
@@ -1022,10 +1022,6 @@ not ok {test-number} - unexpected exception with message: 'custom std exception'
|
|||||||
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
ok {test-number} - 101.000001 != Approx(100).epsilon(0.01) for: 101.00000099999999748 != Approx( 100.0 )
|
||||||
# Default scale is invisible to comparison
|
# Default scale is invisible to comparison
|
||||||
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
ok {test-number} - std::pow(10, -5) != Approx(std::pow(10, -7)) for: 0.00001 != Approx( 0.0000001 )
|
||||||
# Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
ok {test-number} - true with 1 message: 'a'
|
|
||||||
# Delayed unscoped message clearing does not catch newly inserted messages
|
|
||||||
not ok {test-number} - false with 1 message: 'b'
|
|
||||||
# Directly creating an EnumInfo
|
# Directly creating an EnumInfo
|
||||||
ok {test-number} - enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
ok {test-number} - enumInfo->lookup(0) == "Value1" for: Value1 == "Value1"
|
||||||
# Directly creating an EnumInfo
|
# Directly creating an EnumInfo
|
||||||
@@ -1432,6 +1428,20 @@ ok {test-number} - 4u * i > str.size() for: 12 > 1
|
|||||||
ok {test-number} - 4u * i > str.size() for: 12 > 2
|
ok {test-number} - 4u * i > str.size() for: 12 > 2
|
||||||
# Generators -- simple
|
# Generators -- simple
|
||||||
ok {test-number} - 4u * i > str.size() for: 12 > 3
|
ok {test-number} - 4u * i > str.size() for: 12 > 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 0 for: 0 == 0
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 3 for: 3 == 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.get() == 3 for: 3 == 3
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.currentElementIndex() == 5 for: 5 == 5
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.get() == 5 for: 5 == 5
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.skipToNthElement( 3 )
|
||||||
|
# Generators can be skipped forward
|
||||||
|
ok {test-number} - generator.skipToNthElement( 6 )
|
||||||
# Generators internals
|
# Generators internals
|
||||||
ok {test-number} - gen.get() == 123 for: 123 == 123
|
ok {test-number} - gen.get() == 123 for: 123 == 123
|
||||||
# Generators internals
|
# Generators internals
|
||||||
@@ -4620,5 +4630,5 @@ ok {test-number} - q3 == 23. for: 23.0 == 23.0
|
|||||||
ok {test-number} -
|
ok {test-number} -
|
||||||
# xmlentitycheck
|
# xmlentitycheck
|
||||||
ok {test-number} -
|
ok {test-number} -
|
||||||
1..2317
|
1..2322
|
||||||
|
|
||||||
|
|||||||
@@ -322,9 +322,6 @@
|
|||||||
##teamcity[testFinished name='Custom std-exceptions can be custom translated' duration="{duration}"]
|
##teamcity[testFinished name='Custom std-exceptions can be custom translated' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Default scale is invisible to comparison']
|
##teamcity[testStarted name='Default scale is invisible to comparison']
|
||||||
##teamcity[testFinished name='Default scale is invisible to comparison' duration="{duration}"]
|
##teamcity[testFinished name='Default scale is invisible to comparison' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Delayed unscoped message clearing does not catch newly inserted messages']
|
|
||||||
##teamcity[testIgnored name='Delayed unscoped message clearing does not catch newly inserted messages' message='Message.tests.cpp:<line number>|n...............................................................................|n|nMessage.tests.cpp:<line number>|nexpression failed with message:|n "b"|n REQUIRE( false )|nwith expansion:|n false|n- failure ignore as test marked as |'ok to fail|'|n']
|
|
||||||
##teamcity[testFinished name='Delayed unscoped message clearing does not catch newly inserted messages' duration="{duration}"]
|
|
||||||
##teamcity[testStarted name='Directly creating an EnumInfo']
|
##teamcity[testStarted name='Directly creating an EnumInfo']
|
||||||
##teamcity[testFinished name='Directly creating an EnumInfo' duration="{duration}"]
|
##teamcity[testFinished name='Directly creating an EnumInfo' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Empty generators can SKIP in constructor']
|
##teamcity[testStarted name='Empty generators can SKIP in constructor']
|
||||||
@@ -417,6 +414,8 @@
|
|||||||
##teamcity[testFinished name='Generators -- adapters' duration="{duration}"]
|
##teamcity[testFinished name='Generators -- adapters' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Generators -- simple']
|
##teamcity[testStarted name='Generators -- simple']
|
||||||
##teamcity[testFinished name='Generators -- simple' duration="{duration}"]
|
##teamcity[testFinished name='Generators -- simple' duration="{duration}"]
|
||||||
|
##teamcity[testStarted name='Generators can be skipped forward']
|
||||||
|
##teamcity[testFinished name='Generators can be skipped forward' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Generators internals']
|
##teamcity[testStarted name='Generators internals']
|
||||||
##teamcity[testFinished name='Generators internals' duration="{duration}"]
|
##teamcity[testFinished name='Generators internals' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Greater-than inequalities with different epsilons']
|
##teamcity[testStarted name='Greater-than inequalities with different epsilons']
|
||||||
|
|||||||
@@ -322,9 +322,6 @@
|
|||||||
##teamcity[testFinished name='Custom std-exceptions can be custom translated' duration="{duration}"]
|
##teamcity[testFinished name='Custom std-exceptions can be custom translated' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Default scale is invisible to comparison']
|
##teamcity[testStarted name='Default scale is invisible to comparison']
|
||||||
##teamcity[testFinished name='Default scale is invisible to comparison' duration="{duration}"]
|
##teamcity[testFinished name='Default scale is invisible to comparison' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Delayed unscoped message clearing does not catch newly inserted messages']
|
|
||||||
##teamcity[testIgnored name='Delayed unscoped message clearing does not catch newly inserted messages' message='Message.tests.cpp:<line number>|n...............................................................................|n|nMessage.tests.cpp:<line number>|nexpression failed with message:|n "b"|n REQUIRE( false )|nwith expansion:|n false|n- failure ignore as test marked as |'ok to fail|'|n']
|
|
||||||
##teamcity[testFinished name='Delayed unscoped message clearing does not catch newly inserted messages' duration="{duration}"]
|
|
||||||
##teamcity[testStarted name='Directly creating an EnumInfo']
|
##teamcity[testStarted name='Directly creating an EnumInfo']
|
||||||
##teamcity[testFinished name='Directly creating an EnumInfo' duration="{duration}"]
|
##teamcity[testFinished name='Directly creating an EnumInfo' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Empty generators can SKIP in constructor']
|
##teamcity[testStarted name='Empty generators can SKIP in constructor']
|
||||||
@@ -417,6 +414,8 @@
|
|||||||
##teamcity[testFinished name='Generators -- adapters' duration="{duration}"]
|
##teamcity[testFinished name='Generators -- adapters' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Generators -- simple']
|
##teamcity[testStarted name='Generators -- simple']
|
||||||
##teamcity[testFinished name='Generators -- simple' duration="{duration}"]
|
##teamcity[testFinished name='Generators -- simple' duration="{duration}"]
|
||||||
|
##teamcity[testStarted name='Generators can be skipped forward']
|
||||||
|
##teamcity[testFinished name='Generators can be skipped forward' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Generators internals']
|
##teamcity[testStarted name='Generators internals']
|
||||||
##teamcity[testFinished name='Generators internals' duration="{duration}"]
|
##teamcity[testFinished name='Generators internals' duration="{duration}"]
|
||||||
##teamcity[testStarted name='Greater-than inequalities with different epsilons']
|
##teamcity[testStarted name='Greater-than inequalities with different epsilons']
|
||||||
|
|||||||
@@ -4613,31 +4613,6 @@ C
|
|||||||
</Expression>
|
</Expression>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<TestCase name="Delayed unscoped message clearing does not catch newly inserted messages" tags="[!shouldfail][messages][unscoped]" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Info filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
a
|
|
||||||
</Info>
|
|
||||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Original>
|
|
||||||
true
|
|
||||||
</Original>
|
|
||||||
<Expanded>
|
|
||||||
true
|
|
||||||
</Expanded>
|
|
||||||
</Expression>
|
|
||||||
<Info filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
b
|
|
||||||
</Info>
|
|
||||||
<Expression success="false" type="REQUIRE" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Original>
|
|
||||||
false
|
|
||||||
</Original>
|
|
||||||
<Expanded>
|
|
||||||
false
|
|
||||||
</Expanded>
|
|
||||||
</Expression>
|
|
||||||
<OverallResult success="true" skips="0"/>
|
|
||||||
</TestCase>
|
|
||||||
<TestCase name="Directly creating an EnumInfo" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
<TestCase name="Directly creating an EnumInfo" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
<Original>
|
<Original>
|
||||||
@@ -6630,6 +6605,65 @@ Approx( 1.30000000000000004 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
|
<TestCase name="Generators can be skipped forward" tags="[generators]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 0
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
0 == 0
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 3
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
3 == 3
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.get() == 3
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
3 == 3
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 5
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
5 == 5
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.get() == 5
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
5 == 5
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_THROWS" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.skipToNthElement( 3 )
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
generator.skipToNthElement( 3 )
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_THROWS" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.skipToNthElement( 6 )
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
generator.skipToNthElement( 6 )
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<OverallResult success="true" skips="0"/>
|
||||||
|
</TestCase>
|
||||||
<TestCase name="Generators internals" tags="[generators][internals]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<TestCase name="Generators internals" tags="[generators][internals]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
<Section name="Single value" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<Section name="Single value" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
@@ -22349,6 +22383,6 @@ Approx( -1.95996398454005449 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="2106" failures="157" expectedFailures="42" skips="12"/>
|
<OverallResults successes="2112" failures="157" expectedFailures="41" skips="12"/>
|
||||||
<OverallResultsCases successes="317" failures="95" expectedFailures="18" skips="6"/>
|
<OverallResultsCases successes="318" failures="95" expectedFailures="17" skips="6"/>
|
||||||
</Catch2TestRun>
|
</Catch2TestRun>
|
||||||
|
|||||||
@@ -4613,31 +4613,6 @@ C
|
|||||||
</Expression>
|
</Expression>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<TestCase name="Delayed unscoped message clearing does not catch newly inserted messages" tags="[!shouldfail][messages][unscoped]" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Info filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
a
|
|
||||||
</Info>
|
|
||||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Original>
|
|
||||||
true
|
|
||||||
</Original>
|
|
||||||
<Expanded>
|
|
||||||
true
|
|
||||||
</Expanded>
|
|
||||||
</Expression>
|
|
||||||
<Info filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
b
|
|
||||||
</Info>
|
|
||||||
<Expression success="false" type="REQUIRE" filename="tests/<exe-name>/UsageTests/Message.tests.cpp" >
|
|
||||||
<Original>
|
|
||||||
false
|
|
||||||
</Original>
|
|
||||||
<Expanded>
|
|
||||||
false
|
|
||||||
</Expanded>
|
|
||||||
</Expression>
|
|
||||||
<OverallResult success="true" skips="0"/>
|
|
||||||
</TestCase>
|
|
||||||
<TestCase name="Directly creating an EnumInfo" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
<TestCase name="Directly creating an EnumInfo" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
<Expression success="true" type="CHECK" filename="tests/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
<Original>
|
<Original>
|
||||||
@@ -6630,6 +6605,65 @@ Approx( 1.30000000000000004 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
|
<TestCase name="Generators can be skipped forward" tags="[generators]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 0
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
0 == 0
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 3
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
3 == 3
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.get() == 3
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
3 == 3
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.currentElementIndex() == 5
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
5 == 5
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.get() == 5
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
5 == 5
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_THROWS" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.skipToNthElement( 3 )
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
generator.skipToNthElement( 3 )
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_THROWS" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
generator.skipToNthElement( 6 )
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
generator.skipToNthElement( 6 )
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<OverallResult success="true" skips="0"/>
|
||||||
|
</TestCase>
|
||||||
<TestCase name="Generators internals" tags="[generators][internals]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<TestCase name="Generators internals" tags="[generators][internals]" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
<Section name="Single value" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<Section name="Single value" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
<Expression success="true" type="REQUIRE" filename="tests/<exe-name>/IntrospectiveTests/GeneratorsImpl.tests.cpp" >
|
||||||
@@ -22348,6 +22382,6 @@ Approx( -1.95996398454005449 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="2106" failures="157" expectedFailures="42" skips="12"/>
|
<OverallResults successes="2112" failures="157" expectedFailures="41" skips="12"/>
|
||||||
<OverallResultsCases successes="317" failures="95" expectedFailures="18" skips="6"/>
|
<OverallResultsCases successes="318" failures="95" expectedFailures="17" skips="6"/>
|
||||||
</Catch2TestRun>
|
</Catch2TestRun>
|
||||||
|
|||||||
@@ -586,3 +586,21 @@ TEST_CASE("from_range(container) supports ADL begin/end and arrays", "[generator
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE( "Generators can be skipped forward", "[generators]" ) {
|
||||||
|
auto generator = Catch::Generators::FixedValuesGenerator<int>( { 0, 1, 2, 3, 4, 5 } );
|
||||||
|
REQUIRE( generator.currentElementIndex() == 0 );
|
||||||
|
|
||||||
|
generator.skipToNthElement( 3 );
|
||||||
|
REQUIRE( generator.currentElementIndex() == 3 );
|
||||||
|
REQUIRE( generator.get() == 3 );
|
||||||
|
|
||||||
|
generator.skipToNthElement( 5 );
|
||||||
|
REQUIRE( generator.currentElementIndex() == 5 );
|
||||||
|
REQUIRE( generator.get() == 5 );
|
||||||
|
|
||||||
|
// Backwards
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 3 ) );
|
||||||
|
// Past the end
|
||||||
|
REQUIRE_THROWS( generator.skipToNthElement( 6 ) );
|
||||||
|
}
|
||||||
|
|||||||
@@ -360,12 +360,3 @@ TEST_CASE( "Scoped message applies to all assertions in scope",
|
|||||||
CHECK( false );
|
CHECK( false );
|
||||||
CHECK( false );
|
CHECK( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(
|
|
||||||
"Delayed unscoped message clearing does not catch newly inserted messages",
|
|
||||||
"[messages][unscoped][!shouldfail]" ) {
|
|
||||||
UNSCOPED_INFO( "a" );
|
|
||||||
REQUIRE( true );
|
|
||||||
UNSCOPED_INFO( "b" );
|
|
||||||
REQUIRE( false );
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user