0

我有一个函数,我想用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 值的示例都是不可维护的。

最小的工作示例

https://godbolt.org/z/TzTG7PnW6

4

0 回答 0