在doctest中,我们可以编写C ++测试框架:
TEST_SUITE("foo") {
TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) {
/* code using template parameter T */
}
}
并且这有效-如果t1
,t2
,t3
是types。它的实现方式是doctest生成代码,包括
template<typename T>
inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)()
并在T
之后为宏参数调用此函数。这显然不适用于value参数,例如TEST_CASE_TEMPLATE("bar", MyType, v1, v2, v3)
。
我们可以使用doctest在数字参数上创建模板吗?
一个丑陋的解决方案(不使用任何doctest工具)将是:
template <typename T, T Value>
struct value_as_type { static constexpr const T value { Value }; };
然后替换
TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) { /*... etc ... */ }
with:
TEST_CASE_TEMPLATE("bar", MyType,
value_to_type<MyType, v1>,
value_to_type<MyType, v2>,
value_to_type<MyType, v3>)
{
constexpr const MyType val { MyType::value };
/*... etc ... */
}