Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp
diff options
context:
space:
mode:
authorMartin Hořeňovský2026-02-15 21:53:10 +0100
committerMartin Hořeňovský2026-02-15 21:53:10 +0100
commit56024c04e42172d53a1672b9af6a538afdb79801 (patch)
treeb1102b231c8039a0ac06bd3229261ff4d64aced8 /tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp
parentedfed6c04eb3b5734bb74b9048f67f9e0cc45a01 (diff)
downloadcatch3-56024c04e42172d53a1672b9af6a538afdb79801.tar.gz
More tests for MapGenerator
Diffstat (limited to 'tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp')
-rw-r--r--tests/SelfTest/IntrospectiveTests/GeneratorsImpl.tests.cpp76
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 );
+}