1a8c51b3fSopenharmony_ci#include <chrono> 2a8c51b3fSopenharmony_ci#include <thread> 3a8c51b3fSopenharmony_ci 4a8c51b3fSopenharmony_ci#include "benchmark/benchmark.h" 5a8c51b3fSopenharmony_ci 6a8c51b3fSopenharmony_ci#if defined(NDEBUG) 7a8c51b3fSopenharmony_ci#undef NDEBUG 8a8c51b3fSopenharmony_ci#endif 9a8c51b3fSopenharmony_ci#include <cassert> 10a8c51b3fSopenharmony_ci 11a8c51b3fSopenharmony_civoid BM_basic(benchmark::State& state) { 12a8c51b3fSopenharmony_ci for (auto _ : state) { 13a8c51b3fSopenharmony_ci } 14a8c51b3fSopenharmony_ci} 15a8c51b3fSopenharmony_ci 16a8c51b3fSopenharmony_civoid BM_basic_slow(benchmark::State& state) { 17a8c51b3fSopenharmony_ci std::chrono::milliseconds sleep_duration(state.range(0)); 18a8c51b3fSopenharmony_ci for (auto _ : state) { 19a8c51b3fSopenharmony_ci std::this_thread::sleep_for( 20a8c51b3fSopenharmony_ci std::chrono::duration_cast<std::chrono::nanoseconds>(sleep_duration)); 21a8c51b3fSopenharmony_ci } 22a8c51b3fSopenharmony_ci} 23a8c51b3fSopenharmony_ci 24a8c51b3fSopenharmony_ciBENCHMARK(BM_basic); 25a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Arg(42); 26a8c51b3fSopenharmony_ciBENCHMARK(BM_basic_slow)->Arg(10)->Unit(benchmark::kNanosecond); 27a8c51b3fSopenharmony_ciBENCHMARK(BM_basic_slow)->Arg(100)->Unit(benchmark::kMicrosecond); 28a8c51b3fSopenharmony_ciBENCHMARK(BM_basic_slow)->Arg(1000)->Unit(benchmark::kMillisecond); 29a8c51b3fSopenharmony_ciBENCHMARK(BM_basic_slow)->Arg(1000)->Unit(benchmark::kSecond); 30a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Range(1, 8); 31a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->RangeMultiplier(2)->Range(1, 8); 32a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->DenseRange(10, 15); 33a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Args({42, 42}); 34a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Ranges({{64, 512}, {64, 512}}); 35a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->MinTime(0.7); 36a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->MinWarmUpTime(0.8); 37a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->MinTime(0.1)->MinWarmUpTime(0.2); 38a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->UseRealTime(); 39a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->ThreadRange(2, 4); 40a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->ThreadPerCpu(); 41a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Repetitions(3); 42a8c51b3fSopenharmony_ciBENCHMARK(BM_basic) 43a8c51b3fSopenharmony_ci ->RangeMultiplier(std::numeric_limits<int>::max()) 44a8c51b3fSopenharmony_ci ->Range(std::numeric_limits<int64_t>::min(), 45a8c51b3fSopenharmony_ci std::numeric_limits<int64_t>::max()); 46a8c51b3fSopenharmony_ci 47a8c51b3fSopenharmony_ci// Negative ranges 48a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Range(-64, -1); 49a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->RangeMultiplier(4)->Range(-8, 8); 50a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->DenseRange(-2, 2, 1); 51a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Ranges({{-64, 1}, {-8, -1}}); 52a8c51b3fSopenharmony_ci 53a8c51b3fSopenharmony_civoid CustomArgs(benchmark::internal::Benchmark* b) { 54a8c51b3fSopenharmony_ci for (int i = 0; i < 10; ++i) { 55a8c51b3fSopenharmony_ci b->Arg(i); 56a8c51b3fSopenharmony_ci } 57a8c51b3fSopenharmony_ci} 58a8c51b3fSopenharmony_ci 59a8c51b3fSopenharmony_ciBENCHMARK(BM_basic)->Apply(CustomArgs); 60a8c51b3fSopenharmony_ci 61a8c51b3fSopenharmony_civoid BM_explicit_iteration_count(benchmark::State& state) { 62a8c51b3fSopenharmony_ci // Test that benchmarks specified with an explicit iteration count are 63a8c51b3fSopenharmony_ci // only run once. 64a8c51b3fSopenharmony_ci static bool invoked_before = false; 65a8c51b3fSopenharmony_ci assert(!invoked_before); 66a8c51b3fSopenharmony_ci invoked_before = true; 67a8c51b3fSopenharmony_ci 68a8c51b3fSopenharmony_ci // Test that the requested iteration count is respected. 69a8c51b3fSopenharmony_ci assert(state.max_iterations == 42); 70a8c51b3fSopenharmony_ci for (auto _ : state) { 71a8c51b3fSopenharmony_ci } 72a8c51b3fSopenharmony_ci assert(state.iterations() == state.max_iterations); 73a8c51b3fSopenharmony_ci assert(state.iterations() == 42); 74a8c51b3fSopenharmony_ci} 75a8c51b3fSopenharmony_ciBENCHMARK(BM_explicit_iteration_count)->Iterations(42); 76a8c51b3fSopenharmony_ci 77a8c51b3fSopenharmony_ciBENCHMARK_MAIN(); 78