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