Тест Google с аргументами командной строки. Написание моей собственной основной функции? - PullRequest
4 голосов
/ 17 марта 2020

У меня есть код, который выглядит примерно так:

...
void benchMark(benchmark::State& state){
    maxCapacity = state.range(0);
    // set up some stuff
    for (auto _ : state){
        // time this code
    }
}

BENCHMARK(benchMark)->DenseRange(2, 10, 1);
BENCHMARK_MAIN();

Я хочу изменить его на что-то вроде:

...
void benchMark(benchmark::State& state){
    maxCapacity = state.range(0);
    // set up some stuff
    for (auto _ : state){
        // time this code
    }
}

int main(){
    BENCHMARK(benchMark)->DenseRange(2, 10, 1);
}

Я делаю это просто, чтобы я мог предоставить Поддержка аргумента командной строки для кода позже. Теперь этот код успешно компилируется, но я вообще ничего не получаю. Код даже не запускается, я думаю. Первый код занимает около 5 минут, но второй завершает выполнение почти мгновенно. Что я делаю не так?

Любая помощь будет отличной. Спасибо ..

РЕДАКТИРОВАТЬ:

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

#include <iostream>
#include <benchmark/benchmark.h>
using namespace std;

void pointQuery(int maxCapacity){
    long sum = 0;
    for(int i=0; i<100000*maxCapacity; i++){
        for(int j=0; j<100000*maxCapacity; j++)
            sum--;
        sum+=i;
    }
    cout<<sum<<endl;
}

void benchMark(benchmark::State& state){
    int maxCapacity = state.range(0);
    for (auto _ : state)
        pointQuery(maxCapacity);
}

BENCHMARK(benchMark)->DenseRange(2, 10, 1);
BENCHMARK_MAIN();
// int main(){
//     BENCHMARK(benchMark)->DenseRange(2, 10, 1);
// }

1 Ответ

2 голосов
/ 17 марта 2020

если вы просто скопируете содержимое прагмы BENCHMARK_MAIN в ваш тестовый файл, оно должно работать:

int main(int argc, char** argv) {
    BENCHMARK(benchMark)->DenseRange(2, 10, 1);

    //these entries are from BENCHMARK_MAIN
    ::benchmark::Initialize(&argc, argv);
    if (::benchmark::ReportUnrecognizedArguments(argc, argv)) return 1;
    ::benchmark::RunSpecifiedBenchmarks();
  }
...