我有一个带有非类型模板参数int
的函数,如下所示:
template <int N>
int foo() { /*...*/ }
我想对从0到32的所有N
值进行单元测试这个函数。我有一个函数int expected(int n)
,它接受相同的N
值并返回预期值。实际上,我想要:
if (foo<0>() != expected(0)) { /* fail... */ }
if (foo<1>() != expected(1)) { /* fail... */ }
if (foo<2>() != expected(2)) { /* fail... */ }
// 30 more lines
我不想手动编写所有的33个测试用例,而且由于变量N是编译时确定的,我也不能轻易地使用运行时循环。
那么,在C++11中,我怎样才能简单地让编译器为我生成测试用例呢?请注意,这种方法不需要使用BOOST_PP_REPEAT式的技巧或代码生成。
REQUIRE(foo<0>() == expected(0))
,它使用一些Catch2特定的魔法中止,并取决于命令行标志。虽然我并不想在这里引入Catch2宏的复杂性。这回答了你的问题吗,@M.M? - BeeOnRope