mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	| @@ -7,6 +7,7 @@ | ||||
|  */ | ||||
|  | ||||
| #include "catch.hpp" | ||||
| #include <array> | ||||
|  | ||||
| namespace{ namespace ClassTests { | ||||
|  | ||||
| @@ -58,6 +59,15 @@ struct Template_Foo { | ||||
|     size_t size() { return 0; } | ||||
| }; | ||||
|  | ||||
| template< typename T, size_t V> | ||||
| struct Template_Foo_2 { | ||||
|     size_t size() { return V; } | ||||
| }; | ||||
|  | ||||
| template <int V> | ||||
| struct Nttp_Fixture{ | ||||
|     int value = V; | ||||
| }; | ||||
| #endif | ||||
|  | ||||
|  | ||||
| @@ -74,11 +84,20 @@ TEMPLATE_TEST_CASE_METHOD(Template_Fixture, "A TEMPLATE_TEST_CASE_METHOD based t | ||||
|     REQUIRE( Template_Fixture<TestType>::m_a == 1 ); | ||||
| } | ||||
|  | ||||
| TEMPLATE_TEST_CASE_METHOD_SIG(Nttp_Fixture, "A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds", "[class][template][nttp]",((int V), V), 1, 3, 6) { | ||||
|     REQUIRE(Nttp_Fixture<V>::value > 0); | ||||
| } | ||||
|  | ||||
| TEMPLATE_PRODUCT_TEST_CASE_METHOD(Template_Fixture_2, "A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds","[class][template][product]",(std::vector,Template_Foo),(int,float)) | ||||
| { | ||||
|     REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 0 ); | ||||
| } | ||||
|  | ||||
| TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG(Template_Fixture_2, "A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds", "[class][template][product][nttp]", ((typename T, size_t S), T, S),(std::array, Template_Foo_2), ((int,2), (float,6))) | ||||
| { | ||||
|     REQUIRE(Template_Fixture_2<TestType>{}.m_a.size() >= 2); | ||||
| } | ||||
|  | ||||
| // We should be able to write our tests within a different namespace | ||||
| namespace Inner | ||||
| { | ||||
| @@ -92,10 +111,19 @@ namespace Inner | ||||
|         REQUIRE( Template_Fixture<TestType>::m_a == 2 ); | ||||
|     } | ||||
|  | ||||
|     TEMPLATE_TEST_CASE_METHOD_SIG(Nttp_Fixture, "A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails", "[.][class][template][nttp][failing]", ((int V), V), 1, 3, 6) { | ||||
|         REQUIRE(Nttp_Fixture<V>::value == 0); | ||||
|     } | ||||
|  | ||||
|     TEMPLATE_PRODUCT_TEST_CASE_METHOD(Template_Fixture_2, "A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails","[.][class][template][product][failing]",(std::vector,Template_Foo),(int,float)) | ||||
|     { | ||||
|         REQUIRE( Template_Fixture_2<TestType>::m_a.size() == 1 ); | ||||
|     } | ||||
|  | ||||
|     TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG(Template_Fixture_2, "A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails", "[.][class][template][product][nttp][failing]", ((typename T, size_t S), T, S), (std::array, Template_Foo_2), ((int, 2), (float, 6))) | ||||
|     { | ||||
|         REQUIRE(Template_Fixture_2<TestType>{}.m_a.size() < 2); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -18,6 +18,7 @@ | ||||
| #include <cerrno> | ||||
| #include <limits> | ||||
| #include <sstream> | ||||
| #include <array> | ||||
|  | ||||
| namespace { namespace MiscTests { | ||||
|  | ||||
| @@ -66,6 +67,10 @@ struct Foo { | ||||
|     size_t size() { return 0; } | ||||
| }; | ||||
|  | ||||
| template<typename T, size_t S> | ||||
| struct Bar { | ||||
|     size_t size() { return S; } | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| TEST_CASE( "random SECTION tests", "[.][sections][failing]" ) { | ||||
| @@ -306,11 +311,56 @@ TEMPLATE_TEST_CASE( "TemplateTest: vectors can be sized and resized", "[vector][ | ||||
|     } | ||||
| } | ||||
|  | ||||
| TEMPLATE_TEST_CASE_SIG("TemplateTestSig: vectors can be sized and resized", "[vector][template][nttp]", ((typename TestType, int V), TestType, V), (int,5), (float,4), (std::string,15), ((std::tuple<int, float>), 6)) { | ||||
|  | ||||
|     std::vector<TestType> v(V); | ||||
|  | ||||
|     REQUIRE(v.size() == V); | ||||
|     REQUIRE(v.capacity() >= V); | ||||
|  | ||||
|     SECTION("resizing bigger changes size and capacity") { | ||||
|         v.resize(2 * V); | ||||
|  | ||||
|         REQUIRE(v.size() == 2 * V); | ||||
|         REQUIRE(v.capacity() >= 2 * V); | ||||
|     } | ||||
|     SECTION("resizing smaller changes size but not capacity") { | ||||
|         v.resize(0); | ||||
|  | ||||
|         REQUIRE(v.size() == 0); | ||||
|         REQUIRE(v.capacity() >= V); | ||||
|  | ||||
|         SECTION("We can use the 'swap trick' to reset the capacity") { | ||||
|             std::vector<TestType> empty; | ||||
|             empty.swap(v); | ||||
|  | ||||
|             REQUIRE(v.capacity() == 0); | ||||
|         } | ||||
|     } | ||||
|     SECTION("reserving bigger changes capacity but not size") { | ||||
|         v.reserve(2 * V); | ||||
|  | ||||
|         REQUIRE(v.size() == V); | ||||
|         REQUIRE(v.capacity() >= 2 * V); | ||||
|     } | ||||
|     SECTION("reserving smaller does not change size or capacity") { | ||||
|         v.reserve(0); | ||||
|  | ||||
|         REQUIRE(v.size() == V); | ||||
|         REQUIRE(v.capacity() >= V); | ||||
|     } | ||||
| } | ||||
|  | ||||
| TEMPLATE_PRODUCT_TEST_CASE("A Template product test case", "[template][product]", (std::vector, Foo), (int, float)) { | ||||
|     TestType x; | ||||
|     REQUIRE(x.size() == 0); | ||||
| } | ||||
|  | ||||
| TEMPLATE_PRODUCT_TEST_CASE_SIG("A Template product test case with array signature", "[template][product][nttp]", ((typename T, size_t S), T, S), (std::array, Bar), ((int, 9), (float, 42))) { | ||||
|     TestType x; | ||||
|     REQUIRE(x.size() > 0); | ||||
| } | ||||
|  | ||||
| TEMPLATE_PRODUCT_TEST_CASE("Product with differing arities", "[template][product]", std::tuple, (int, (int, double), (int, double, float))) { | ||||
|     REQUIRE(std::tuple_size<TestType>::value >= 1); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jozef Grajciar
					Jozef Grajciar