Mercurial > hg > CbC > CbC_llvm
comparison libcxx/utils/google-benchmark/test/diagnostics_test.cc @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // Testing: | |
2 // State::PauseTiming() | |
3 // State::ResumeTiming() | |
4 // Test that CHECK's within these function diagnose when they are called | |
5 // outside of the KeepRunning() loop. | |
6 // | |
7 // NOTE: Users should NOT include or use src/check.h. This is only done in | |
8 // order to test library internals. | |
9 | |
10 #include <cstdlib> | |
11 #include <stdexcept> | |
12 | |
13 #include "../src/check.h" | |
14 #include "benchmark/benchmark.h" | |
15 | |
16 #if defined(__GNUC__) && !defined(__EXCEPTIONS) | |
17 #define TEST_HAS_NO_EXCEPTIONS | |
18 #endif | |
19 | |
20 void TestHandler() { | |
21 #ifndef TEST_HAS_NO_EXCEPTIONS | |
22 throw std::logic_error(""); | |
23 #else | |
24 std::abort(); | |
25 #endif | |
26 } | |
27 | |
28 void try_invalid_pause_resume(benchmark::State& state) { | |
29 #if !defined(TEST_BENCHMARK_LIBRARY_HAS_NO_ASSERTIONS) && !defined(TEST_HAS_NO_EXCEPTIONS) | |
30 try { | |
31 state.PauseTiming(); | |
32 std::abort(); | |
33 } catch (std::logic_error const&) { | |
34 } | |
35 try { | |
36 state.ResumeTiming(); | |
37 std::abort(); | |
38 } catch (std::logic_error const&) { | |
39 } | |
40 #else | |
41 (void)state; // avoid unused warning | |
42 #endif | |
43 } | |
44 | |
45 void BM_diagnostic_test(benchmark::State& state) { | |
46 static bool called_once = false; | |
47 | |
48 if (called_once == false) try_invalid_pause_resume(state); | |
49 | |
50 for (auto _ : state) { | |
51 benchmark::DoNotOptimize(state.iterations()); | |
52 } | |
53 | |
54 if (called_once == false) try_invalid_pause_resume(state); | |
55 | |
56 called_once = true; | |
57 } | |
58 BENCHMARK(BM_diagnostic_test); | |
59 | |
60 | |
61 void BM_diagnostic_test_keep_running(benchmark::State& state) { | |
62 static bool called_once = false; | |
63 | |
64 if (called_once == false) try_invalid_pause_resume(state); | |
65 | |
66 while(state.KeepRunning()) { | |
67 benchmark::DoNotOptimize(state.iterations()); | |
68 } | |
69 | |
70 if (called_once == false) try_invalid_pause_resume(state); | |
71 | |
72 called_once = true; | |
73 } | |
74 BENCHMARK(BM_diagnostic_test_keep_running); | |
75 | |
76 int main(int argc, char* argv[]) { | |
77 benchmark::internal::GetAbortHandler() = &TestHandler; | |
78 benchmark::Initialize(&argc, argv); | |
79 benchmark::RunSpecifiedBenchmarks(); | |
80 } |