|
|
|
|
@@ -245,42 +245,42 @@
|
|
|
|
|
INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_CLASS_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) )
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
|
|
|
|
|
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\
|
|
|
|
|
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
|
|
|
|
namespace {\
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
|
|
|
|
|
void test();\
|
|
|
|
|
};\
|
|
|
|
|
namespace {\
|
|
|
|
|
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
|
|
|
|
|
INTERNAL_CATCH_TYPE_GEN \
|
|
|
|
|
INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
|
|
|
|
|
template<typename...Types>\
|
|
|
|
|
struct TestNameClass{\
|
|
|
|
|
void reg_tests(){\
|
|
|
|
|
std::size_t index = 0;\
|
|
|
|
|
using expander = std::size_t[];\
|
|
|
|
|
constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
|
|
|
|
|
constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
|
|
|
|
|
constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
|
|
|
|
|
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \
|
|
|
|
|
}\
|
|
|
|
|
};\
|
|
|
|
|
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
|
|
|
|
|
using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
|
|
|
|
|
TestInit t;\
|
|
|
|
|
t.reg_tests();\
|
|
|
|
|
return 0;\
|
|
|
|
|
}(); \
|
|
|
|
|
}\
|
|
|
|
|
}\
|
|
|
|
|
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
void TestName<TestType>::test()
|
|
|
|
|
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
|
|
|
|
|
void test();\
|
|
|
|
|
};\
|
|
|
|
|
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\
|
|
|
|
|
INTERNAL_CATCH_TYPE_GEN \
|
|
|
|
|
INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\
|
|
|
|
|
template<typename...Types>\
|
|
|
|
|
struct TestNameClass{\
|
|
|
|
|
void reg_tests(){\
|
|
|
|
|
std::size_t index = 0;\
|
|
|
|
|
using expander = std::size_t[];\
|
|
|
|
|
constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\
|
|
|
|
|
constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\
|
|
|
|
|
constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\
|
|
|
|
|
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \
|
|
|
|
|
}\
|
|
|
|
|
};\
|
|
|
|
|
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
|
|
|
|
|
using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\
|
|
|
|
|
TestInit t;\
|
|
|
|
|
t.reg_tests();\
|
|
|
|
|
return 0;\
|
|
|
|
|
}(); \
|
|
|
|
|
}\
|
|
|
|
|
}\
|
|
|
|
|
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
void TestName<TestType>::test()
|
|
|
|
|
|
|
|
|
|
#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\
|
|
|
|
|
@@ -298,37 +298,37 @@
|
|
|
|
|
INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) )
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
|
|
|
|
|
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \
|
|
|
|
|
CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \
|
|
|
|
|
CATCH_INTERNAL_SUPPRESS_COMMA_WARNINGS \
|
|
|
|
|
namespace {\
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
|
|
|
|
|
void test();\
|
|
|
|
|
};\
|
|
|
|
|
namespace {\
|
|
|
|
|
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
|
|
|
|
|
INTERNAL_CATCH_TYPE_GEN\
|
|
|
|
|
template<typename...Types>\
|
|
|
|
|
struct TestNameClass{\
|
|
|
|
|
void reg_tests(){\
|
|
|
|
|
size_t index = 0;\
|
|
|
|
|
using expander = size_t[];\
|
|
|
|
|
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName##_catch_sr, Catch::NameAndTags{ Name " - " INTERNAL_CATCH_STRINGIZE(TmplList) " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
|
|
|
|
|
}\
|
|
|
|
|
};\
|
|
|
|
|
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
|
|
|
|
|
using TestInit = typename convert<TestNameClass, TmplList>::type;\
|
|
|
|
|
TestInit t;\
|
|
|
|
|
t.reg_tests();\
|
|
|
|
|
return 0;\
|
|
|
|
|
}(); \
|
|
|
|
|
}}\
|
|
|
|
|
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
void TestName<TestType>::test()
|
|
|
|
|
namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \
|
|
|
|
|
INTERNAL_CATCH_TYPE_GEN\
|
|
|
|
|
template<typename...Types>\
|
|
|
|
|
struct TestNameClass{\
|
|
|
|
|
void reg_tests(){\
|
|
|
|
|
size_t index = 0;\
|
|
|
|
|
using expander = size_t[];\
|
|
|
|
|
(void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName##_catch_sr, Catch::NameAndTags{ Name " - " INTERNAL_CATCH_STRINGIZE(TmplList) " - " + std::to_string(index), Tags } ), index++)... };/* NOLINT */ \
|
|
|
|
|
}\
|
|
|
|
|
};\
|
|
|
|
|
static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
|
|
|
|
|
using TestInit = typename convert<TestNameClass, TmplList>::type;\
|
|
|
|
|
TestInit t;\
|
|
|
|
|
t.reg_tests();\
|
|
|
|
|
return 0;\
|
|
|
|
|
}(); \
|
|
|
|
|
}}\
|
|
|
|
|
CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \
|
|
|
|
|
template<typename TestType> \
|
|
|
|
|
void TestName<TestType>::test()
|
|
|
|
|
|
|
|
|
|
#define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \
|
|
|
|
|
INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ), ClassName, Name, Tags, TmplList )
|
|
|
|
|
|