summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/markdown/parameterized-tests.md4
-rw-r--r--doctest/parts/doctest_fwd.h29
-rw-r--r--examples/all_features/header.h2
-rw-r--r--examples/all_features/templated_test_cases.cpp6
4 files changed, 22 insertions, 19 deletions
diff --git a/doc/markdown/parameterized-tests.md b/doc/markdown/parameterized-tests.md
index 663d380..309d179 100644
--- a/doc/markdown/parameterized-tests.md
+++ b/doc/markdown/parameterized-tests.md
@@ -125,9 +125,9 @@ There are 2 ways to do it:
CHECK(var == -1);
}
- TEST_CASE_TEMPLATE_INSTANTIATE(test_id, char, short, int, long long int);
+ TEST_CASE_TEMPLATE_INVOKE(test_id, char, short, int, long long int);
- TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE(test_id, std::tuple<float, double>);
+ TEST_CASE_TEMPLATE_APPLY(test_id, std::tuple<float, double>);
```
If you are designing an interface or concept, you can define a suite of type-parameterized tests to verify properties that any valid implementation of the interface/concept should have. Then, the author of each implementation can just instantiate the test suite with his type to verify that it conforms to the requirements, without having to write similar tests repeatedly.
diff --git a/doctest/parts/doctest_fwd.h b/doctest/parts/doctest_fwd.h
index 14c8a2c..57e2cb4 100644
--- a/doctest/parts/doctest_fwd.h
+++ b/doctest/parts/doctest_fwd.h
@@ -1934,7 +1934,7 @@ int registerReporter(const char* name, int priority) {
#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(dec, T, id) \
DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL_PROXY(dec, T, id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_))
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \
+#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE_IMPL(id, anon, ...) \
DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY)) = [] { \
DOCTEST_CAT(id, ITERATOR)<std::tuple<__VA_ARGS__>> DOCTEST_UNUSED DOCTEST_CAT( \
anon, inner_dummy)(__LINE__, 0); \
@@ -1942,12 +1942,11 @@ int registerReporter(const char* name, int priority) {
}(); \
DOCTEST_GLOBAL_NO_WARNINGS_END()
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) \
- DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), \
- __VA_ARGS__) \
+#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_INVOKE_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), __VA_ARGS__) \
typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_)
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE_IMPL(id, anon, ...) \
+#define DOCTEST_TEST_CASE_TEMPLATE_APPLY_IMPL(id, anon, ...) \
DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY)) = [] { \
DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__> DOCTEST_UNUSED DOCTEST_CAT(anon, inner_dummy)( \
__LINE__, 0); \
@@ -1955,14 +1954,13 @@ int registerReporter(const char* name, int priority) {
}(); \
DOCTEST_GLOBAL_NO_WARNINGS_END()
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE(id, ...) \
- DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), \
- __VA_ARGS__) \
+#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_APPLY_IMPL(id, DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_), __VA_ARGS__) \
typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_)
#define DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, anon, ...) \
DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL_PROXY(dec, T, anon, anon); \
- DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(anon, anon, __VA_ARGS__) \
+ DOCTEST_TEST_CASE_TEMPLATE_INVOKE_IMPL(anon, anon, __VA_ARGS__) \
template <typename T> \
inline void anon()
@@ -2354,10 +2352,10 @@ constexpr T to_lvalue = x;
template <typename type> \
inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)()
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) \
+#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \
typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_)
-#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE(id, ...) \
+#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \
typedef int DOCTEST_ANONYMOUS(_DOCTEST_ANON_FOR_SEMICOLON_)
// for subcases
@@ -2482,6 +2480,8 @@ constexpr T to_lvalue = x;
#define DOCTEST_FAST_WARN_UNARY_FALSE DOCTEST_WARN_UNARY_FALSE
#define DOCTEST_FAST_CHECK_UNARY_FALSE DOCTEST_CHECK_UNARY_FALSE
#define DOCTEST_FAST_REQUIRE_UNARY_FALSE DOCTEST_REQUIRE_UNARY_FALSE
+
+#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE DOCTEST_TEST_CASE_TEMPLATE_INVOKE
// clang-format on
// BDD style macros
@@ -2507,8 +2507,8 @@ constexpr T to_lvalue = x;
#define TYPE_TO_STRING DOCTEST_TYPE_TO_STRING
#define TEST_CASE_TEMPLATE DOCTEST_TEST_CASE_TEMPLATE
#define TEST_CASE_TEMPLATE_DEFINE DOCTEST_TEST_CASE_TEMPLATE_DEFINE
-#define TEST_CASE_TEMPLATE_INSTANTIATE DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE
-#define TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE
+#define TEST_CASE_TEMPLATE_INVOKE DOCTEST_TEST_CASE_TEMPLATE_INVOKE
+#define TEST_CASE_TEMPLATE_APPLY DOCTEST_TEST_CASE_TEMPLATE_APPLY
#define SUBCASE DOCTEST_SUBCASE
#define TEST_SUITE DOCTEST_TEST_SUITE
#define TEST_SUITE_BEGIN DOCTEST_TEST_SUITE_BEGIN
@@ -2617,6 +2617,7 @@ constexpr T to_lvalue = x;
#define FAST_WARN_LE DOCTEST_FAST_WARN_LE
#define FAST_CHECK_LE DOCTEST_FAST_CHECK_LE
#define FAST_REQUIRE_LE DOCTEST_FAST_REQUIRE_LE
+
#define FAST_WARN_UNARY DOCTEST_FAST_WARN_UNARY
#define FAST_CHECK_UNARY DOCTEST_FAST_CHECK_UNARY
#define FAST_REQUIRE_UNARY DOCTEST_FAST_REQUIRE_UNARY
@@ -2624,6 +2625,8 @@ constexpr T to_lvalue = x;
#define FAST_CHECK_UNARY_FALSE DOCTEST_FAST_CHECK_UNARY_FALSE
#define FAST_REQUIRE_UNARY_FALSE DOCTEST_FAST_REQUIRE_UNARY_FALSE
+#define TEST_CASE_TEMPLATE_INSTANTIATE DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE
+
#endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
#if !defined(DOCTEST_CONFIG_DISABLE)
diff --git a/examples/all_features/header.h b/examples/all_features/header.h
index 5f94410..63b50eb 100644
--- a/examples/all_features/header.h
+++ b/examples/all_features/header.h
@@ -36,7 +36,7 @@ TEST_CASE_TEMPLATE_DEFINE("template 2", T, header_test) {
FAIL("");
}
-TEST_CASE_TEMPLATE_INSTANTIATE(header_test, doctest::String);
+TEST_CASE_TEMPLATE_INVOKE(header_test, doctest::String);
// to silence GCC warnings when inheriting from some class which has no virtual destructor - happens only on gcc 4.7/4.8
#if DOCTEST_GCC >= DOCTEST_COMPILER(4, 7, 0) && DOCTEST_GCC < DOCTEST_COMPILER(4, 9, 0)
diff --git a/examples/all_features/templated_test_cases.cpp b/examples/all_features/templated_test_cases.cpp
index aaf7c62..5c204a5 100644
--- a/examples/all_features/templated_test_cases.cpp
+++ b/examples/all_features/templated_test_cases.cpp
@@ -31,10 +31,10 @@ TEST_CASE_TEMPLATE_DEFINE("default construction", T, test_id) {
CHECK(doctest::Approx(var) == T());
}
-TEST_CASE_TEMPLATE_INSTANTIATE(test_id, signed char, short, int);
-TEST_CASE_TEMPLATE_INSTANTIATE(test_id, double, double); // note that types won't be filtered for uniqueness
+TEST_CASE_TEMPLATE_INVOKE(test_id, signed char, short, int);
+TEST_CASE_TEMPLATE_INVOKE(test_id, double, double); // note that types won't be filtered for uniqueness
-TEST_CASE_TEMPLATE_INSTANTIATE_TUPLE(test_id, std::tuple<unsigned char, char>);
+TEST_CASE_TEMPLATE_APPLY(test_id, std::tuple<unsigned char, char>);
// =================================================================================================
// MULTIPLE TYPES AS PARAMETERS