我有一个函数,我想用Catch2测试每个可能的输入。这个函数有多个编译时常量作为它的参数。为简单起见,假设我有两个枚举
enum class A { a, b};
enum class B { a, b};
和功能
template<A a, B b> void foo() { /* do something */ }
我想用 和 的值的每个可能组合进行A
测试B
。如何在 Catch2 中实现这一点?我希望这是可能的,而不必列出所有可能的排列。
到目前为止我尝试过的
A a = GENERATE(A::a, A::b);
B b = GENERATE(B::a, B::b);
没有做到这一点,因为我希望它们成为编译时常量,即我需要constexpr A a = GENERATE(...)
哪个不起作用。
使用TEMPLATE_TEST_CASE_SIG
会起作用:
TEMPLATE_TEST_CASE_SIG("foo works", "[foo]",
((A T, B V), T, V), (A::a,B::a), (A::b, B::a), (A::a,B::b),(A::b,B::b)) {
foo<T, V>();
}
但这需要我列出 A 和 B 的每个可能排列,这对于任何大于 2*2 值的示例都是不可维护的。