diff options
| author | Martin Hořeňovský | 2026-02-15 21:53:10 +0100 |
|---|---|---|
| committer | Martin Hořeňovský | 2026-02-15 21:53:10 +0100 |
| commit | 56024c04e42172d53a1672b9af6a538afdb79801 (patch) | |
| tree | b1102b231c8039a0ac06bd3229261ff4d64aced8 /tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp | |
| parent | edfed6c04eb3b5734bb74b9048f67f9e0cc45a01 (diff) | |
| download | catch3-56024c04e42172d53a1672b9af6a538afdb79801.tar.gz | |
More tests for MapGenerator
Diffstat (limited to 'tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp')
| -rw-r--r-- | tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp | 76 |
1 files changed, 57 insertions, 19 deletions
diff --git a/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp b/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp index 297c67a9..2c87b0e5 100644 --- a/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp +++ b/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp @@ -708,25 +708,46 @@ TEST_CASE("MapGenerator can be skipped forward efficiently", return i; }; - MapGenerator<int, int, decltype(map_func)> map_generator( map_func, values( { 0, 1, 2, 3, 4, 5, 6 } ) ); - REQUIRE( map_calls == 0 ); - const int map_calls_1 = map_calls; - - map_generator.skipToNthElement( 4 ); - REQUIRE( map_generator.get() == 4 ); - REQUIRE( map_calls == map_calls_1 + 1 ); - - map_generator.skipToNthElement( 4 ); - REQUIRE( map_generator.get() == 4 ); - REQUIRE( map_calls == map_calls_1 + 1 ); - - const int map_calls_2 = map_calls; - map_generator.skipToNthElement( 6 ); - REQUIRE( map_generator.get() == 6 ); - REQUIRE( map_calls == map_calls_2 + 1 ); - - REQUIRE_THROWS( map_generator.skipToNthElement( 7 ) ); - REQUIRE( map_calls == map_calls_2 + 1 ); + SECTION( "via calls to next()" ) { + MapGenerator<int, int, decltype( map_func )> map_generator( + map_func, values( { 0, 1, 2, 3, 4, 5, 6 } ) ); + REQUIRE( map_calls == 0 ); + + map_generator.next(); + map_generator.next(); + map_generator.next(); + REQUIRE( map_calls == 0 ); + REQUIRE( map_generator.get() == 3 ); + REQUIRE( map_calls == 1 ); + REQUIRE( map_generator.get() == 3 ); + REQUIRE( map_calls == 1 ); + + map_generator.next(); + REQUIRE( map_calls == 1 ); + } + SECTION("via calls to skipToNthElement()") { + MapGenerator<int, int, decltype( map_func )> map_generator( + map_func, values( { 0, 1, 2, 3, 4, 5, 6 } ) ); + REQUIRE( map_calls == 0 ); + + map_generator.skipToNthElement( 3 ); + map_generator.skipToNthElement( 4 ); + REQUIRE( map_calls == 0 ); + REQUIRE( map_generator.get() == 4 ); + REQUIRE( map_calls == 1 ); + + map_generator.skipToNthElement( 4 ); + REQUIRE( map_generator.get() == 4 ); + REQUIRE( map_calls == 1 ); + + map_generator.skipToNthElement( 6 ); + REQUIRE( map_calls == 1 ); + REQUIRE( map_generator.get() == 6 ); + REQUIRE( map_calls == 2 ); + + REQUIRE_THROWS( map_generator.skipToNthElement( 7 ) ); + REQUIRE( map_calls == 2 ); + } } TEST_CASE( "Generator adapters properly handle isFinite", @@ -791,3 +812,20 @@ TEMPLATE_TEST_CASE( "RandomGenerator reports itself as infinite", long double) { REQUIRE_FALSE( Catch::Generators::random( TestType{ 0 }, TestType{ 100 } ).isFinite() ); } + +namespace { + struct NotDefaultConstructible { + int m_i; + explicit NotDefaultConstructible( int i ): m_i( i ){} + }; +} + +TEST_CASE( "MapGenerator can handle not default constructible types", + "[generators][map]" ) { + using namespace Catch::Generators; + auto map_generator = map( []( int i ) { return NotDefaultConstructible( i ); }, values({1, 2, 3})); + REQUIRE( map_generator.get().m_i == 1 ); + REQUIRE( map_generator.next() ); + REQUIRE( map_generator.next() ); + REQUIRE( map_generator.get().m_i == 3 ); +} |