mirror of
https://github.com/google/benchmark.git
synced 2024-12-26 20:40:21 +08:00
3d85343d65
* Rewrite complexity_test to use (hardcoded) manual time This test is fundamentally flaky, because it tried to read tea leafs, and is inherently misbehaving in CI environments, since there are unmitigated sources of noise. That being said, the computed Big-O also depends on the `--benchmark_min_time=` Fixes https://github.com/google/benchmark/issues/272 * Correctly compute Big-O for manual timings. Fixes #1758. * complexity_test: do more stuff in empty loop * Make all empty loops be a bit longer empty Looks like on windows, some of these tests still fail, i guess clock precision is too small.
48 lines
1.7 KiB
C++
48 lines
1.7 KiB
C++
#include <memory>
|
|
|
|
#include "../src/check.h"
|
|
#include "benchmark/benchmark.h"
|
|
#include "output_test.h"
|
|
|
|
class TestMemoryManager : public benchmark::MemoryManager {
|
|
void Start() override {}
|
|
void Stop(Result& result) override {
|
|
result.num_allocs = 42;
|
|
result.max_bytes_used = 42000;
|
|
}
|
|
};
|
|
|
|
void BM_empty(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
auto iterations = double(state.iterations()) * double(state.iterations());
|
|
benchmark::DoNotOptimize(iterations);
|
|
}
|
|
}
|
|
BENCHMARK(BM_empty);
|
|
|
|
ADD_CASES(TC_ConsoleOut, {{"^BM_empty %console_report$"}});
|
|
ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_empty\",$"},
|
|
{"\"family_index\": 0,$", MR_Next},
|
|
{"\"per_family_instance_index\": 0,$", MR_Next},
|
|
{"\"run_name\": \"BM_empty\",$", MR_Next},
|
|
{"\"run_type\": \"iteration\",$", MR_Next},
|
|
{"\"repetitions\": 1,$", MR_Next},
|
|
{"\"repetition_index\": 0,$", MR_Next},
|
|
{"\"threads\": 1,$", MR_Next},
|
|
{"\"iterations\": %int,$", MR_Next},
|
|
{"\"real_time\": %float,$", MR_Next},
|
|
{"\"cpu_time\": %float,$", MR_Next},
|
|
{"\"time_unit\": \"ns\",$", MR_Next},
|
|
{"\"allocs_per_iter\": %float,$", MR_Next},
|
|
{"\"max_bytes_used\": 42000$", MR_Next},
|
|
{"}", MR_Next}});
|
|
ADD_CASES(TC_CSVOut, {{"^\"BM_empty\",%csv_report$"}});
|
|
|
|
int main(int argc, char* argv[]) {
|
|
std::unique_ptr<benchmark::MemoryManager> mm(new TestMemoryManager());
|
|
|
|
benchmark::RegisterMemoryManager(mm.get());
|
|
RunOutputTests(argc, argv);
|
|
benchmark::RegisterMemoryManager(nullptr);
|
|
}
|