2019-05-17 14:46:54 +02:00
|
|
|
#include <benchmark/benchmark.h>
|
|
|
|
|
#include <fibonacci.h>
|
|
|
|
|
|
2021-01-06 14:40:33 +01:00
|
|
|
#include <algorithm>
|
|
|
|
|
#include <random>
|
|
|
|
|
#include <vector>
|
2019-05-17 14:46:54 +02:00
|
|
|
|
2021-01-06 14:40:33 +01:00
|
|
|
std::vector<unsigned> createTestNumbers() {
|
2019-05-17 14:46:54 +02:00
|
|
|
std::vector<unsigned> v;
|
2021-01-06 14:40:33 +01:00
|
|
|
for (int i = 0; i < 25; ++i) v.emplace_back(i);
|
2019-05-17 14:46:54 +02:00
|
|
|
std::random_device rd;
|
|
|
|
|
std::mt19937 g(rd());
|
|
|
|
|
std::shuffle(v.begin(), v.end(), g);
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 15:42:25 +02:00
|
|
|
void fibonacci(benchmark::State& state) {
|
2019-05-17 14:46:54 +02:00
|
|
|
auto numbers = createTestNumbers();
|
|
|
|
|
for (auto _ : state) {
|
2021-01-06 14:40:33 +01:00
|
|
|
for (auto v : numbers) benchmark::DoNotOptimize(fibonacci(v));
|
2019-05-17 14:46:54 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 15:42:25 +02:00
|
|
|
BENCHMARK(fibonacci);
|
2019-05-17 14:46:54 +02:00
|
|
|
|
|
|
|
|
void fastFibonacci(benchmark::State& state) {
|
|
|
|
|
auto numbers = createTestNumbers();
|
|
|
|
|
for (auto _ : state) {
|
2021-01-06 14:40:33 +01:00
|
|
|
for (auto v : numbers) benchmark::DoNotOptimize(fastFibonacci(v));
|
2019-05-17 14:46:54 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BENCHMARK(fastFibonacci);
|
|
|
|
|
|
|
|
|
|
BENCHMARK_MAIN();
|