如何将 TEMPLATE_TEST_CASE 与类型对一起使用?
How to use TEMPLATE_TEST_CASE with pairs of types?
我正在尝试将 catch2 TEMPLATE_TEST_CASE 用于类型对,即我需要使用一对相关的类型,而不是为每个测试模板化一个类型。我以为我可以使用 std::variant
来存储这些对,但编译失败:error: expected primary-expression before ‘)’ token. auto outtype = std::get<0>(TestType);
.
对于此错误的原因或此问题的替代解决方案,我将不胜感激。
这是代码片段:
using varA = std::variant<OutputA, InputA>;
using varB = std::variant<OutputB, InputB>;
TEMPLATE_TEST_CASE("test", "[test][template]", varA, varB) {
auto outtype = std::get<0>(TestType);
auto intype = std::get<1>(TestType);
}
. instead of templating a single type for each test, I need to use a correlated pair of types.
如果只是一对类型,我想你可以使用std::pair
; std::tuple
,更多类型。
我想你可以试试
TEMPLATE_TEST_CASE("test", "[test][template]", std::pair<OutputA, InputA>, std::pair<OutputB, InputB>) {
typename TestType::first_type outvalue = /* some initial value */;
typename TestType::second_type invalue = /* some initial value */;
}
使用std::tuple
,访问单一类型,可以使用std::tuple_element
,所以
TEMPLATE_TEST_CASE("test", "[test][template]", std::tuple<OutputA, InputA>, std::tuple<OutputB, InputB>) {
std::tuple_element_t<0u, TestType> outvalue = /* some initial value */;
std::tuple_element_t<1u, TestType> invalue = /* some initial value */;
}
我正在尝试将 catch2 TEMPLATE_TEST_CASE 用于类型对,即我需要使用一对相关的类型,而不是为每个测试模板化一个类型。我以为我可以使用 std::variant
来存储这些对,但编译失败:error: expected primary-expression before ‘)’ token. auto outtype = std::get<0>(TestType);
.
对于此错误的原因或此问题的替代解决方案,我将不胜感激。 这是代码片段:
using varA = std::variant<OutputA, InputA>;
using varB = std::variant<OutputB, InputB>;
TEMPLATE_TEST_CASE("test", "[test][template]", varA, varB) {
auto outtype = std::get<0>(TestType);
auto intype = std::get<1>(TestType);
}
. instead of templating a single type for each test, I need to use a correlated pair of types.
如果只是一对类型,我想你可以使用std::pair
; std::tuple
,更多类型。
我想你可以试试
TEMPLATE_TEST_CASE("test", "[test][template]", std::pair<OutputA, InputA>, std::pair<OutputB, InputB>) {
typename TestType::first_type outvalue = /* some initial value */;
typename TestType::second_type invalue = /* some initial value */;
}
使用std::tuple
,访问单一类型,可以使用std::tuple_element
,所以
TEMPLATE_TEST_CASE("test", "[test][template]", std::tuple<OutputA, InputA>, std::tuple<OutputB, InputB>) {
std::tuple_element_t<0u, TestType> outvalue = /* some initial value */;
std::tuple_element_t<1u, TestType> invalue = /* some initial value */;
}