1a8c51b3fSopenharmony_ci#undef NDEBUG 2a8c51b3fSopenharmony_ci#include <cassert> 3a8c51b3fSopenharmony_ci#include <cstddef> 4a8c51b3fSopenharmony_ci 5a8c51b3fSopenharmony_ci#include "benchmark/benchmark.h" 6a8c51b3fSopenharmony_ci 7a8c51b3fSopenharmony_ci#if __cplusplus >= 201103L 8a8c51b3fSopenharmony_ci#error C++11 or greater detected. Should be C++03. 9a8c51b3fSopenharmony_ci#endif 10a8c51b3fSopenharmony_ci 11a8c51b3fSopenharmony_ci#ifdef BENCHMARK_HAS_CXX11 12a8c51b3fSopenharmony_ci#error C++11 or greater detected by the library. BENCHMARK_HAS_CXX11 is defined. 13a8c51b3fSopenharmony_ci#endif 14a8c51b3fSopenharmony_ci 15a8c51b3fSopenharmony_civoid BM_empty(benchmark::State& state) { 16a8c51b3fSopenharmony_ci while (state.KeepRunning()) { 17a8c51b3fSopenharmony_ci volatile benchmark::IterationCount x = state.iterations(); 18a8c51b3fSopenharmony_ci ((void)x); 19a8c51b3fSopenharmony_ci } 20a8c51b3fSopenharmony_ci} 21a8c51b3fSopenharmony_ciBENCHMARK(BM_empty); 22a8c51b3fSopenharmony_ci 23a8c51b3fSopenharmony_ci// The new C++11 interface for args/ranges requires initializer list support. 24a8c51b3fSopenharmony_ci// Therefore we provide the old interface to support C++03. 25a8c51b3fSopenharmony_civoid BM_old_arg_range_interface(benchmark::State& state) { 26a8c51b3fSopenharmony_ci assert((state.range(0) == 1 && state.range(1) == 2) || 27a8c51b3fSopenharmony_ci (state.range(0) == 5 && state.range(1) == 6)); 28a8c51b3fSopenharmony_ci while (state.KeepRunning()) { 29a8c51b3fSopenharmony_ci } 30a8c51b3fSopenharmony_ci} 31a8c51b3fSopenharmony_ciBENCHMARK(BM_old_arg_range_interface)->ArgPair(1, 2)->RangePair(5, 5, 6, 6); 32a8c51b3fSopenharmony_ci 33a8c51b3fSopenharmony_citemplate <class T, class U> 34a8c51b3fSopenharmony_civoid BM_template2(benchmark::State& state) { 35a8c51b3fSopenharmony_ci BM_empty(state); 36a8c51b3fSopenharmony_ci} 37a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE2(BM_template2, int, long); 38a8c51b3fSopenharmony_ci 39a8c51b3fSopenharmony_citemplate <class T> 40a8c51b3fSopenharmony_civoid BM_template1(benchmark::State& state) { 41a8c51b3fSopenharmony_ci BM_empty(state); 42a8c51b3fSopenharmony_ci} 43a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE(BM_template1, long); 44a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE1(BM_template1, int); 45a8c51b3fSopenharmony_ci 46a8c51b3fSopenharmony_citemplate <class T> 47a8c51b3fSopenharmony_cistruct BM_Fixture : public ::benchmark::Fixture {}; 48a8c51b3fSopenharmony_ci 49a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE_F(BM_Fixture, BM_template1, long)(benchmark::State& state) { 50a8c51b3fSopenharmony_ci BM_empty(state); 51a8c51b3fSopenharmony_ci} 52a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE1_F(BM_Fixture, BM_template2, int)(benchmark::State& state) { 53a8c51b3fSopenharmony_ci BM_empty(state); 54a8c51b3fSopenharmony_ci} 55a8c51b3fSopenharmony_ci 56a8c51b3fSopenharmony_civoid BM_counters(benchmark::State& state) { 57a8c51b3fSopenharmony_ci BM_empty(state); 58a8c51b3fSopenharmony_ci state.counters["Foo"] = 2; 59a8c51b3fSopenharmony_ci} 60a8c51b3fSopenharmony_ciBENCHMARK(BM_counters); 61a8c51b3fSopenharmony_ci 62a8c51b3fSopenharmony_ciBENCHMARK_MAIN(); 63