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

Я хочу изменить шаблонный бенчмарк 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 ответ

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

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

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

Другие вопросы по тегам