mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Add GENERATE_COPY and GENERATE_VAR capturing generator macros
This commit is contained in:
		| @@ -637,6 +637,22 @@ Matchers.tests.cpp:<line number>: passed: testStringForMatching(), !Contains("di | ||||
| Matchers.tests.cpp:<line number>: failed: testStringForMatching(), !Contains("substring") for: "this string contains 'abc' as a substring" not contains: "substring" | ||||
| Exception.tests.cpp:<line number>: passed: thisThrows(), "expected exception" for: "expected exception" equals: "expected exception" | ||||
| Exception.tests.cpp:<line number>: failed: thisThrows(), "should fail" for: "expected exception" equals: "should fail" | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 3 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 4 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 5 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 6 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: -5 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: -4 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 90 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 91 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 92 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 93 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 94 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 95 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 96 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 97 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 98 > -6 | ||||
| Generators.tests.cpp:<line number>: passed: values > -6 for: 99 > -6 | ||||
| Misc.tests.cpp:<line number>: warning: 'This one ran' | ||||
| Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'custom exception' | ||||
| Tricky.tests.cpp:<line number>: passed: True for: {?} | ||||
|   | ||||
| @@ -1264,6 +1264,6 @@ due to unexpected exception with message: | ||||
|   Why would you throw a std::string? | ||||
|  | ||||
| =============================================================================== | ||||
| test cases:  256 |  190 passed |  62 failed |  4 failed as expected | ||||
| assertions: 1403 | 1260 passed | 122 failed | 21 failed as expected | ||||
| test cases:  257 |  191 passed |  62 failed |  4 failed as expected | ||||
| assertions: 1419 | 1276 passed | 122 failed | 21 failed as expected | ||||
|  | ||||
|   | ||||
| @@ -4697,6 +4697,182 @@ Exception.tests.cpp:<line number>: FAILED: | ||||
| with expansion: | ||||
|   "expected exception" equals: "should fail" | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   3 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   4 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   5 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   6 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   -5 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   -4 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   90 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   91 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   92 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   93 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   94 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   95 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   96 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   97 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   98 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nested generators and captured variables | ||||
| ------------------------------------------------------------------------------- | ||||
| Generators.tests.cpp:<line number> | ||||
| ............................................................................... | ||||
|  | ||||
| Generators.tests.cpp:<line number>: PASSED: | ||||
|   REQUIRE( values > -6 ) | ||||
| with expansion: | ||||
|   99 > -6 | ||||
|  | ||||
| ------------------------------------------------------------------------------- | ||||
| Nice descriptive name | ||||
| ------------------------------------------------------------------------------- | ||||
| @@ -10936,6 +11112,6 @@ Misc.tests.cpp:<line number> | ||||
| Misc.tests.cpp:<line number>: PASSED: | ||||
|  | ||||
| =============================================================================== | ||||
| test cases:  256 |  175 passed |  77 failed |  4 failed as expected | ||||
| assertions: 1419 | 1260 passed | 138 failed | 21 failed as expected | ||||
| test cases:  257 |  176 passed |  77 failed |  4 failed as expected | ||||
| assertions: 1435 | 1276 passed | 138 failed | 21 failed as expected | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <property name="random-seed" value="1"/> | ||||
|   </properties> | ||||
| loose text artifact | ||||
|   <testsuite name="<exe-name>" errors="17" failures="122" tests="1420" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> | ||||
|   <testsuite name="<exe-name>" errors="17" failures="122" tests="1436" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> | ||||
|     <testcase classname="<exe-name>.global" name="# A test name that starts with a #" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="#1005: Comparing pointer to int and long (NULL can be either on various systems)" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="#1027" time="{duration}"/> | ||||
| @@ -454,6 +454,7 @@ Matchers.tests.cpp:<line number> | ||||
| Exception.tests.cpp:<line number> | ||||
|       </failure> | ||||
|     </testcase> | ||||
|     <testcase classname="<exe-name>.global" name="Nested generators and captured variables" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Nice descriptive name" time="{duration}"/> | ||||
|     <testcase classname="<exe-name>.global" name="Non-std exceptions can be translated" time="{duration}"> | ||||
|       <error type="TEST_CASE"> | ||||
|   | ||||
| @@ -5913,6 +5913,137 @@ Nor would this | ||||
|       </Expression> | ||||
|       <OverallResult success="false"/> | ||||
|     </TestCase> | ||||
|     <TestCase name="Nested generators and captured variables" tags="[generators]" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           3 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           4 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           5 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           6 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           -5 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           -4 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           90 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           91 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           92 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           93 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           94 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           95 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           96 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           97 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           98 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Generators.tests.cpp" > | ||||
|         <Original> | ||||
|           values > -6 | ||||
|         </Original> | ||||
|         <Expanded> | ||||
|           99 > -6 | ||||
|         </Expanded> | ||||
|       </Expression> | ||||
|       <OverallResult success="true"/> | ||||
|     </TestCase> | ||||
|     <TestCase name="Nice descriptive name" tags="[.][tag1][tag2][tag3]" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" > | ||||
|       <Warning> | ||||
|         This one ran | ||||
| @@ -13257,7 +13388,7 @@ loose text artifact | ||||
|       </Section> | ||||
|       <OverallResult success="true"/> | ||||
|     </TestCase> | ||||
|     <OverallResults successes="1260" failures="139" expectedFailures="21"/> | ||||
|     <OverallResults successes="1276" failures="139" expectedFailures="21"/> | ||||
|   </Group> | ||||
|   <OverallResults successes="1260" failures="138" expectedFailures="21"/> | ||||
|   <OverallResults successes="1276" failures="138" expectedFailures="21"/> | ||||
| </Catch> | ||||
|   | ||||
| @@ -216,3 +216,45 @@ TEST_CASE("Generators internals", "[generators][internals]") { | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
| // todo: uncopyable type used in a generator | ||||
| //  idea: uncopyable tag type for a stupid generator | ||||
|  | ||||
| namespace { | ||||
| struct non_copyable { | ||||
|     non_copyable() = default; | ||||
|     non_copyable(non_copyable const&) = delete; | ||||
|     non_copyable& operator=(non_copyable const&) = delete; | ||||
|     int value = -1; | ||||
| }; | ||||
|  | ||||
| // This class shows how to implement a simple generator for Catch tests | ||||
| class TestGen : public Catch::Generators::IGenerator<int> { | ||||
|     int current_number; | ||||
| public: | ||||
|  | ||||
|     TestGen(non_copyable const& nc): | ||||
|         current_number(nc.value) {} | ||||
|  | ||||
|     int const& get() const override; | ||||
|     bool next() override { | ||||
|         return false; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| // Avoids -Wweak-vtables | ||||
| int const& TestGen::get() const { | ||||
|     return current_number; | ||||
| } | ||||
|  | ||||
| } | ||||
|  | ||||
| TEST_CASE("GENERATE capture macros", "[generators][internals][.approvals]") { | ||||
|     auto value = GENERATE(take(10, random(0, 10))); | ||||
|  | ||||
|     non_copyable nc; nc.value = value; | ||||
|     // neither `GENERATE_COPY` nor plain `GENERATE` would compile here | ||||
|     auto value2 = GENERATE_REF(Catch::Generators::GeneratorWrapper<int>(std::unique_ptr<Catch::Generators::IGenerator<int>>(new TestGen(nc)))); | ||||
|     REQUIRE(value == value2); | ||||
| } | ||||
|   | ||||
| @@ -188,3 +188,21 @@ TEST_CASE("Random generator", "[generators][.][approvals]") { | ||||
|         static_cast<void>(val); // Silence VS 2015 unused variable warning | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| TEST_CASE("Nested generators and captured variables", "[generators]") { | ||||
|     // Workaround for old libstdc++ | ||||
|     using record = std::tuple<int, int>; | ||||
|     // Set up 3 ranges to generate numbers from | ||||
|     auto extent = GENERATE(table<int, int>({ | ||||
|         record{3, 7}, | ||||
|         record{-5, -3}, | ||||
|         record{90, 100} | ||||
|     })); | ||||
|  | ||||
|     auto from = std::get<0>(extent); | ||||
|     auto to = std::get<1>(extent); | ||||
|  | ||||
|     auto values = GENERATE_COPY(range(from, to)); | ||||
|     REQUIRE(values > -6); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský