Как правильно использовать шаблонное приспособление для тестирования производительности Google с пользовательскими аргументами? - PullRequest
0 голосов
/ 06 мая 2019

Я хочу изменить шаблонный бенчмарк Google (с настраиваемыми аргументами) для запуска с классом тестовых приборов, но не знаю, действительно ли это возможно, и если да, то каков правильный синтаксис.

Просто добавления класса фикстуры недостаточно,

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 голосов
/ 06 мая 2019

Вам потребуется использовать несколько менее удобный макрос регистрации:

BENCHMARK_TEMPLATE_DEFINE_F определяет шаблонный эталонный тест с прибором.Затем BENCHMARK_REGISTER_F можно использовать для регистрации теста, и именно здесь вы добавите вызов ->Apply(CustomArguments).

См. здесь для примера.

...