如何正确使用带有自定义参数的模板化Google基准测试夹具?

时间:2019-05-06 13:14:27

标签: google-benchmark

我想修改一个模板化的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,但是也无法从测试内部的夹具中找到变量声明。这可能是结果或其他错误。我是否需要额外注册灯具?该示例在没有夹具的情况下运行完美。

1 个答案:

答案 0 :(得分:0)

您需要使用一个不太方便的注册宏:

BENCHMARK_TEMPLATE_DEFINE_F用夹具定义模板化基准。然后BENCHMARK_REGISTER_F可用于注册基准测试,这就是您添加->Apply(CustomArguments)调用的地方。

有关示例,请参见here