1 #include "benchmark/benchmark.h"
8 class MultipleRangesFixture
: public ::benchmark::Fixture
{
10 MultipleRangesFixture()
11 : expectedValues({{1, 3, 5},
31 void SetUp(const ::benchmark::State
& state
) {
32 std::vector
<int64_t> ranges
= {state
.range(0), state
.range(1),
35 assert(expectedValues
.find(ranges
) != expectedValues
.end());
37 actualValues
.insert(ranges
);
40 // NOTE: This is not TearDown as we want to check after _all_ runs are
42 virtual ~MultipleRangesFixture() {
43 assert(actualValues
.size() == expectedValues
.size());
44 if (actualValues
.size() != expectedValues
.size()) {
45 std::cout
<< "EXPECTED\n";
46 for (auto v
: expectedValues
) {
48 for (int64_t iv
: v
) {
49 std::cout
<< iv
<< ", ";
53 std::cout
<< "ACTUAL\n";
54 for (auto v
: actualValues
) {
56 for (int64_t iv
: v
) {
57 std::cout
<< iv
<< ", ";
64 std::set
<std::vector
<int64_t>> expectedValues
;
65 std::set
<std::vector
<int64_t>> actualValues
;
68 BENCHMARK_DEFINE_F(MultipleRangesFixture
, Empty
)(benchmark::State
& state
) {
69 for (auto _
: state
) {
70 int64_t product
= state
.range(0) * state
.range(1) * state
.range(2);
71 for (int64_t x
= 0; x
< product
; x
++) {
72 benchmark::DoNotOptimize(x
);
77 BENCHMARK_REGISTER_F(MultipleRangesFixture
, Empty
)
79 ->Ranges({{1, 2}, {3, 7}, {5, 15}})
82 void BM_CheckDefaultArgument(benchmark::State
& state
) {
83 // Test that the 'range()' without an argument is the same as 'range(0)'.
84 assert(state
.range() == state
.range(0));
85 assert(state
.range() != state
.range(1));
86 for (auto _
: state
) {
89 BENCHMARK(BM_CheckDefaultArgument
)->Ranges({{1, 5}, {6, 10}});
91 static void BM_MultipleRanges(benchmark::State
& st
) {
95 BENCHMARK(BM_MultipleRanges
)->Ranges({{5, 5}, {6, 6}});