Тест Google: утверждение `has_range_x_'не удалось

В проекте я начинаю использовать google/benchmark из https://github.com/google/benchmark.git tag v1.0.0.

Я запускаю очень простой тест

#include <benchmark/benchmark.h>
#include <cstring>

static void BM_memcpy(benchmark::State& state) {
  char* src = new char[state.range_x()]; char* dst = new char[state.range_x()];
  memset(src, 'x', state.range_x());
  while (state.KeepRunning())
    memcpy(dst, src, state.range_x());
  state.SetBytesProcessed(int64_t(state.iterations()) *
                          int64_t(state.range_x()));
  delete[] src;
  delete[] dst;
}
BENCHMARK(BM_memcpy)->Arg(8)->Arg(64)->Arg(512)->Arg(1<<10)->Arg(8<<10);

// Register the function as a benchmark
BENCHMARK(BM_memcpy);

BENCHMARK_MAIN();

но я получаю ошибку

./bench/simple-benchmark 
Run on (8 X 4000 MHz CPU s)
2016-08-02 18:22:30
Benchmark               Time           CPU Iterations
-----------------------------------------------------
BM_memcpy/8             9 ns          9 ns   79545455       877MB/s
BM_memcpy/64            9 ns          9 ns   56451613   6.67615GB/s
BM_memcpy/512          21 ns         21 ns   33018868   23.0185GB/s
BM_memcpy/1024         30 ns         29 ns   23648649   32.4039GB/s
BM_memcpy/8k          516 ns        514 ns    1346154   14.8415GB/s
simple-idl-benchmark: /usr/local/include/benchmark/benchmark_api.h:417: int benchmark::State::range_x() const: Assertion `has_range_x_' failed.

Я пробовал мастер и старые теги, но я всегда получаю это утверждение. Я использую gcc 5.4.0 в debian / testing как для библиотеки тестов производительности, так и для исполняемого файла simple-benchmark.

Мне кажется, что он не может определить конец списка аргументов и утверждает. Но что не так? Как это предотвратить?

1 ответ

Решение

Вы регистрируете бенчмарк дважды (звонки на BENCHMARK) но во второй раз вы не предоставите Arg, То есть вы вызываете это без установки диапазона, как утверждает утверждение.

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