doctest の TEST_CASE_TEMPLATE
namespace { ... } で包んで使ったほうがよさそう。
経緯
TEST_CASE_TEMPLATE を使うと型パラメータを変えたテストが書ける。
複数のコンパイル単位で TEST_CASE_TEMPLATE を使うと、どれか一つしか実行されなかった。
code:file_a.cpp
TEST_CASE_TEMPLATE("a", T, doctest:Types<uint32_t, uint16_t>) {
T x(0);
CHECK(x == 0);
}
code:file_b.cpp
TEST_CASE_TEMPLATE("b", T, doctest:Types<double, float>) {
T x(0);
CHECK(x == 0);
}
この 2 ファイルを一つの実行ファイルにコンパイルすると、どちらか一つしか実行されなかった。
Visual Studio 2017 で
doctest 内部で、それぞれのファイルで同じ名前の static 変数を作っているのが原因っぽい。
次のように namespace { ... } で包めば解決する。
code:file_a.cpp
namespace {
TEST_CASE_TEMPLATE("a", T, doctest:Types<uint32_t, uint16_t>) {
T x(0);
CHECK(x == 0);
}
}
code:file_b.cpp
namespace {
TEST_CASE_TEMPLATE("b", T, doctest:Types<double, float>) {
T x(0);
CHECK(x == 0);
}
}