xref: /llvm-project/third-party/benchmark/test/options_test.cc (revision a5b797172cc902db166e9a695716fb81405f86e4)
15dda2efdSMircea Trofin #include <chrono>
25dda2efdSMircea Trofin #include <thread>
35dda2efdSMircea Trofin 
4a290770fSMircea Trofin #include "benchmark/benchmark.h"
5a290770fSMircea Trofin 
65dda2efdSMircea Trofin #if defined(NDEBUG)
75dda2efdSMircea Trofin #undef NDEBUG
85dda2efdSMircea Trofin #endif
95dda2efdSMircea Trofin #include <cassert>
105dda2efdSMircea Trofin 
BM_basic(benchmark::State & state)115dda2efdSMircea Trofin void BM_basic(benchmark::State& state) {
125dda2efdSMircea Trofin   for (auto _ : state) {
135dda2efdSMircea Trofin   }
145dda2efdSMircea Trofin }
155dda2efdSMircea Trofin 
BM_basic_slow(benchmark::State & state)165dda2efdSMircea Trofin void BM_basic_slow(benchmark::State& state) {
175dda2efdSMircea Trofin   std::chrono::milliseconds sleep_duration(state.range(0));
185dda2efdSMircea Trofin   for (auto _ : state) {
195dda2efdSMircea Trofin     std::this_thread::sleep_for(
205dda2efdSMircea Trofin         std::chrono::duration_cast<std::chrono::nanoseconds>(sleep_duration));
215dda2efdSMircea Trofin   }
225dda2efdSMircea Trofin }
235dda2efdSMircea Trofin 
245dda2efdSMircea Trofin BENCHMARK(BM_basic);
255dda2efdSMircea Trofin BENCHMARK(BM_basic)->Arg(42);
265dda2efdSMircea Trofin BENCHMARK(BM_basic_slow)->Arg(10)->Unit(benchmark::kNanosecond);
275dda2efdSMircea Trofin BENCHMARK(BM_basic_slow)->Arg(100)->Unit(benchmark::kMicrosecond);
285dda2efdSMircea Trofin BENCHMARK(BM_basic_slow)->Arg(1000)->Unit(benchmark::kMillisecond);
295dda2efdSMircea Trofin BENCHMARK(BM_basic_slow)->Arg(1000)->Unit(benchmark::kSecond);
305dda2efdSMircea Trofin BENCHMARK(BM_basic)->Range(1, 8);
315dda2efdSMircea Trofin BENCHMARK(BM_basic)->RangeMultiplier(2)->Range(1, 8);
325dda2efdSMircea Trofin BENCHMARK(BM_basic)->DenseRange(10, 15);
335dda2efdSMircea Trofin BENCHMARK(BM_basic)->Args({42, 42});
345dda2efdSMircea Trofin BENCHMARK(BM_basic)->Ranges({{64, 512}, {64, 512}});
355dda2efdSMircea Trofin BENCHMARK(BM_basic)->MinTime(0.7);
36*a5b79717SMircea Trofin BENCHMARK(BM_basic)->MinWarmUpTime(0.8);
37*a5b79717SMircea Trofin BENCHMARK(BM_basic)->MinTime(0.1)->MinWarmUpTime(0.2);
385dda2efdSMircea Trofin BENCHMARK(BM_basic)->UseRealTime();
395dda2efdSMircea Trofin BENCHMARK(BM_basic)->ThreadRange(2, 4);
405dda2efdSMircea Trofin BENCHMARK(BM_basic)->ThreadPerCpu();
415dda2efdSMircea Trofin BENCHMARK(BM_basic)->Repetitions(3);
425dda2efdSMircea Trofin BENCHMARK(BM_basic)
435dda2efdSMircea Trofin     ->RangeMultiplier(std::numeric_limits<int>::max())
445dda2efdSMircea Trofin     ->Range(std::numeric_limits<int64_t>::min(),
455dda2efdSMircea Trofin             std::numeric_limits<int64_t>::max());
465dda2efdSMircea Trofin 
475dda2efdSMircea Trofin // Negative ranges
485dda2efdSMircea Trofin BENCHMARK(BM_basic)->Range(-64, -1);
495dda2efdSMircea Trofin BENCHMARK(BM_basic)->RangeMultiplier(4)->Range(-8, 8);
505dda2efdSMircea Trofin BENCHMARK(BM_basic)->DenseRange(-2, 2, 1);
515dda2efdSMircea Trofin BENCHMARK(BM_basic)->Ranges({{-64, 1}, {-8, -1}});
525dda2efdSMircea Trofin 
CustomArgs(benchmark::internal::Benchmark * b)535dda2efdSMircea Trofin void CustomArgs(benchmark::internal::Benchmark* b) {
545dda2efdSMircea Trofin   for (int i = 0; i < 10; ++i) {
555dda2efdSMircea Trofin     b->Arg(i);
565dda2efdSMircea Trofin   }
575dda2efdSMircea Trofin }
585dda2efdSMircea Trofin 
595dda2efdSMircea Trofin BENCHMARK(BM_basic)->Apply(CustomArgs);
605dda2efdSMircea Trofin 
BM_explicit_iteration_count(benchmark::State & state)615dda2efdSMircea Trofin void BM_explicit_iteration_count(benchmark::State& state) {
625dda2efdSMircea Trofin   // Test that benchmarks specified with an explicit iteration count are
635dda2efdSMircea Trofin   // only run once.
645dda2efdSMircea Trofin   static bool invoked_before = false;
655dda2efdSMircea Trofin   assert(!invoked_before);
665dda2efdSMircea Trofin   invoked_before = true;
675dda2efdSMircea Trofin 
685dda2efdSMircea Trofin   // Test that the requested iteration count is respected.
695dda2efdSMircea Trofin   assert(state.max_iterations == 42);
70*a5b79717SMircea Trofin   for (auto _ : state) {
71*a5b79717SMircea Trofin   }
725dda2efdSMircea Trofin   assert(state.iterations() == state.max_iterations);
735dda2efdSMircea Trofin   assert(state.iterations() == 42);
745dda2efdSMircea Trofin }
755dda2efdSMircea Trofin BENCHMARK(BM_explicit_iteration_count)->Iterations(42);
765dda2efdSMircea Trofin 
775dda2efdSMircea Trofin BENCHMARK_MAIN();
78