mirror of
https://github.com/catchorg/Catch2.git
synced 2025-11-13 05:50:35 +01:00
Compare commits
1 Commits
devel-cond
...
devel-gene
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4a98791d5 |
36
.github/workflows/mac-other-builds.yml
vendored
36
.github/workflows/mac-other-builds.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
name: Mac Sanitizer Builds
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
env:
|
|
||||||
CXXFLAGS: -fsanitize=thread,undefined
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
# From macos-14 forward, the baseline "macos-X" image is Arm based,
|
|
||||||
# and not Intel based.
|
|
||||||
runs-on: ${{matrix.image}}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
image: [macos-13, macos-14]
|
|
||||||
build_type: [Debug, Release]
|
|
||||||
std: [14, 17]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
|
|
||||||
run: |
|
|
||||||
cmake --preset all-tests -GNinja \
|
|
||||||
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
|
|
||||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
|
||||||
-DCATCH_BUILD_EXTRA_TESTS=ON \
|
|
||||||
-DCATCH_ENABLE_WERROR=OFF
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: ctest --test-dir build -R ThreadSafetyTests --timeout 21600 --verbose
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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" )
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -553,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
|
|
||||||
)
|
|
||||||
set_tests_properties(ThreadSafetyTests
|
|
||||||
PROPERTIES
|
|
||||||
PASS_REGULAR_EXPRESSION "assertions: 801 | 400 passed | 401 failed"
|
|
||||||
RUN_SERIAL ON
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1,44 +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 <atomic>
|
|
||||||
#include <thread>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
TEST_CASE( "Failed REQUIRE in the main thread is fine" ) {
|
|
||||||
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 );
|
|
||||||
}
|
|
||||||
@@ -168,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
|
||||||
|
|||||||
@@ -166,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
|
||||||
|
|||||||
@@ -787,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
|
||||||
@@ -2888,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: 435 | 317 passed | 95 failed | 6 skipped | 17 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2303 | 2105 passed | 157 failed | 41 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -785,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
|
||||||
@@ -2877,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: 435 | 317 passed | 95 failed | 6 skipped | 17 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2303 | 2105 passed | 157 failed | 41 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1719,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: 435 | 335 passed | 76 failed | 7 skipped | 17 failed as expected
|
test cases: 436 | 336 passed | 76 failed | 7 skipped | 17 failed as expected
|
||||||
assertions: 2282 | 2105 passed | 136 failed | 41 failed as expected
|
assertions: 2289 | 2112 passed | 136 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|||||||
@@ -5831,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
|
||||||
@@ -19295,6 +19332,6 @@ Misc.tests.cpp:<line number>
|
|||||||
Misc.tests.cpp:<line number>: PASSED:
|
Misc.tests.cpp:<line number>: PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 435 | 317 passed | 95 failed | 6 skipped | 17 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2303 | 2105 passed | 157 failed | 41 failed as expected
|
assertions: 2310 | 2112 passed | 157 failed | 41 failed as expected
|
||||||
|
|
||||||
|
|||||||
@@ -5829,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
|
||||||
@@ -19284,6 +19321,6 @@ Misc.tests.cpp:<line number>
|
|||||||
Misc.tests.cpp:<line number>: PASSED:
|
Misc.tests.cpp:<line number>: PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 435 | 317 passed | 95 failed | 6 skipped | 17 failed as expected
|
test cases: 436 | 318 passed | 95 failed | 6 skipped | 17 failed as expected
|
||||||
assertions: 2303 | 2105 passed | 157 failed | 41 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="2315" 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]"/>
|
||||||
@@ -837,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="2315" 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]"/>
|
||||||
@@ -836,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}"/>
|
||||||
|
|||||||
@@ -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}"/>
|
||||||
|
|||||||
@@ -1430,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
|
||||||
@@ -4627,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..2315
|
1..2322
|
||||||
|
|
||||||
|
|||||||
@@ -1428,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
|
||||||
@@ -4616,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..2315
|
1..2322
|
||||||
|
|
||||||
|
|||||||
@@ -414,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']
|
||||||
|
|||||||
@@ -414,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']
|
||||||
|
|||||||
@@ -6605,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" >
|
||||||
@@ -22324,6 +22383,6 @@ Approx( -1.95996398454005449 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="2105" failures="157" expectedFailures="41" skips="12"/>
|
<OverallResults successes="2112" failures="157" expectedFailures="41" skips="12"/>
|
||||||
<OverallResultsCases successes="317" failures="95" expectedFailures="17" skips="6"/>
|
<OverallResultsCases successes="318" failures="95" expectedFailures="17" skips="6"/>
|
||||||
</Catch2TestRun>
|
</Catch2TestRun>
|
||||||
|
|||||||
@@ -6605,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" >
|
||||||
@@ -22323,6 +22382,6 @@ Approx( -1.95996398454005449 )
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true" skips="0"/>
|
<OverallResult success="true" skips="0"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="2105" failures="157" expectedFailures="41" skips="12"/>
|
<OverallResults successes="2112" failures="157" expectedFailures="41" skips="12"/>
|
||||||
<OverallResultsCases successes="317" failures="95" expectedFailures="17" 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 ) );
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user