我想修改一个模板化的Google基准测试程序(带有自定义参数)以与测试治具类一起运行,但不知道这是否真的可能,如果正确,语法如何。
仅添加Fixture类似乎还不够。
static void CustomArguments(benchmark::internal::Benchmark* b) {
// define I, J
for (auto i : I)
{
for (auto j : J)
b->Args({i, j});
}
}
template<typename my_type>
class My_Fixture : public benchmark::Fixture
{
protected:
void SetUp(const ::benchmark::State& state) { ...}
virtual void TearDown() { ...}
};
template <typename any_type>
static void insert(benchmark::State& state)
{
for (auto _ : state)
{ ...}
}
BENCHMARK_TEMPLATE_F(My_Fixture, insert, my_type)->Apply(CustomArguments);
BENCHMARK_MAIN();
编译器抱怨最后一个代码行
error: expected initializer before '->' token
,但是也无法从测试内部的夹具中找到变量声明。这可能是结果或其他错误。我是否需要额外注册灯具?该示例在没有夹具的情况下运行完美。
答案 0 :(得分:0)
您需要使用一个不太方便的注册宏:
BENCHMARK_TEMPLATE_DEFINE_F
用夹具定义模板化基准。然后BENCHMARK_REGISTER_F
可用于注册基准测试,这就是您添加->Apply(CustomArguments)
调用的地方。
有关示例,请参见here。