xref: /llvm-project/third-party/benchmark/test/cxx03_test.cc (revision a290770fa848cfe9b46dcc2c44e06e15cafd0f23)
15dda2efdSMircea Trofin #undef NDEBUG
25dda2efdSMircea Trofin #include <cassert>
35dda2efdSMircea Trofin #include <cstddef>
45dda2efdSMircea Trofin 
55dda2efdSMircea Trofin #include "benchmark/benchmark.h"
65dda2efdSMircea Trofin 
75dda2efdSMircea Trofin #if __cplusplus >= 201103L
85dda2efdSMircea Trofin #error C++11 or greater detected. Should be C++03.
95dda2efdSMircea Trofin #endif
105dda2efdSMircea Trofin 
115dda2efdSMircea Trofin #ifdef BENCHMARK_HAS_CXX11
125dda2efdSMircea Trofin #error C++11 or greater detected by the library. BENCHMARK_HAS_CXX11 is defined.
135dda2efdSMircea Trofin #endif
145dda2efdSMircea Trofin 
BM_empty(benchmark::State & state)155dda2efdSMircea Trofin void BM_empty(benchmark::State& state) {
165dda2efdSMircea Trofin   while (state.KeepRunning()) {
175dda2efdSMircea Trofin     volatile benchmark::IterationCount x = state.iterations();
185dda2efdSMircea Trofin     ((void)x);
195dda2efdSMircea Trofin   }
205dda2efdSMircea Trofin }
215dda2efdSMircea Trofin BENCHMARK(BM_empty);
225dda2efdSMircea Trofin 
235dda2efdSMircea Trofin // The new C++11 interface for args/ranges requires initializer list support.
245dda2efdSMircea Trofin // Therefore we provide the old interface to support C++03.
BM_old_arg_range_interface(benchmark::State & state)255dda2efdSMircea Trofin void BM_old_arg_range_interface(benchmark::State& state) {
265dda2efdSMircea Trofin   assert((state.range(0) == 1 && state.range(1) == 2) ||
275dda2efdSMircea Trofin          (state.range(0) == 5 && state.range(1) == 6));
285dda2efdSMircea Trofin   while (state.KeepRunning()) {
295dda2efdSMircea Trofin   }
305dda2efdSMircea Trofin }
315dda2efdSMircea Trofin BENCHMARK(BM_old_arg_range_interface)->ArgPair(1, 2)->RangePair(5, 5, 6, 6);
325dda2efdSMircea Trofin 
335dda2efdSMircea Trofin template <class T, class U>
BM_template2(benchmark::State & state)345dda2efdSMircea Trofin void BM_template2(benchmark::State& state) {
355dda2efdSMircea Trofin   BM_empty(state);
365dda2efdSMircea Trofin }
375dda2efdSMircea Trofin BENCHMARK_TEMPLATE2(BM_template2, int, long);
385dda2efdSMircea Trofin 
395dda2efdSMircea Trofin template <class T>
BM_template1(benchmark::State & state)405dda2efdSMircea Trofin void BM_template1(benchmark::State& state) {
415dda2efdSMircea Trofin   BM_empty(state);
425dda2efdSMircea Trofin }
435dda2efdSMircea Trofin BENCHMARK_TEMPLATE(BM_template1, long);
445dda2efdSMircea Trofin BENCHMARK_TEMPLATE1(BM_template1, int);
455dda2efdSMircea Trofin 
465dda2efdSMircea Trofin template <class T>
47*a290770fSMircea Trofin struct BM_Fixture : public ::benchmark::Fixture {};
485dda2efdSMircea Trofin 
BENCHMARK_TEMPLATE_F(BM_Fixture,BM_template1,long)495dda2efdSMircea Trofin BENCHMARK_TEMPLATE_F(BM_Fixture, BM_template1, long)(benchmark::State& state) {
505dda2efdSMircea Trofin   BM_empty(state);
515dda2efdSMircea Trofin }
BENCHMARK_TEMPLATE1_F(BM_Fixture,BM_template2,int)525dda2efdSMircea Trofin BENCHMARK_TEMPLATE1_F(BM_Fixture, BM_template2, int)(benchmark::State& state) {
535dda2efdSMircea Trofin   BM_empty(state);
545dda2efdSMircea Trofin }
555dda2efdSMircea Trofin 
BM_counters(benchmark::State & state)565dda2efdSMircea Trofin void BM_counters(benchmark::State& state) {
575dda2efdSMircea Trofin   BM_empty(state);
585dda2efdSMircea Trofin   state.counters["Foo"] = 2;
595dda2efdSMircea Trofin }
605dda2efdSMircea Trofin BENCHMARK(BM_counters);
615dda2efdSMircea Trofin 
625dda2efdSMircea Trofin BENCHMARK_MAIN();
63