Как правильно использовать шаблонное приспособление для тестирования производительности 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)
вызов.
Смотрите здесь для примера.