]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/chrono/stopwatches/test/stopwatch/basic_stopwatch_pass.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / chrono / stopwatches / test / stopwatch / basic_stopwatch_pass.cpp
1 // Copyright 2010-2011 Vicente J. Botet Escriba
2 // Distributed under the Boost Software License, Version 1.0.
3 // See http://www.boost.org/LICENSE_1_0.txt
4
5 #define BOOST_CHRONO_VERSION 2
6
7 #include <iostream>
8 #include <boost/type_traits/is_same.hpp>
9 #include <boost/chrono/stopwatches/stopwatch.hpp>
10 #include "../cycle_count.hpp"
11 #include <boost/detail/lightweight_test.hpp>
12
13 #if !defined(BOOST_NO_CXX11_STATIC_ASSERT)
14 #define NOTHING ""
15 #endif
16
17
18 template <typename Stopwatch>
19 void check_invariants()
20 {
21 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::rep, typename Stopwatch::clock::duration::rep>::value), NOTHING, ());
22 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::period, typename Stopwatch::clock::duration::period>::value), NOTHING, ());
23 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::duration, typename Stopwatch::clock::time_point::duration>::value), NOTHING, ());
24 BOOST_CHRONO_STATIC_ASSERT(Stopwatch::is_steady == Stopwatch::clock::is_steady, NOTHING, ());
25 }
26
27 template <typename Stopwatch>
28 void check_default_constructor()
29 {
30 Stopwatch sw;
31 BOOST_TEST(sw.is_running());
32 }
33
34 template <typename Stopwatch>
35 void check_dont_start_constructor()
36 {
37 Stopwatch sw(boost::chrono::dont_start);
38 BOOST_TEST(!sw.is_running());
39 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
40 typename Stopwatch::duration d=sw.elapsed();
41 BOOST_TEST(d == Stopwatch::duration::zero());
42 }
43
44 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
45 template <typename Stopwatch>
46 void check_constructor_ec()
47 {
48 boost::system::error_code ec;
49 Stopwatch sw(ec);
50 BOOST_TEST(sw.is_running());
51 BOOST_TEST(ec.value()==0);
52 }
53
54 template <typename Stopwatch>
55 void check_constructor_throws()
56 {
57 Stopwatch sw(boost::throws());
58 BOOST_TEST(sw.is_running());
59 }
60 #endif
61
62 template <typename Stopwatch>
63 void check_elapsed()
64 {
65 Stopwatch sw;
66 BOOST_TEST(sw.is_running());
67 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
68 typename Stopwatch::duration d=sw.elapsed();
69 BOOST_TEST(sw.is_running());
70 BOOST_TEST(d >= boost::chrono::milliseconds(100));
71 }
72
73 template <typename Stopwatch>
74 void check_start_start()
75 {
76 Stopwatch sw;
77 BOOST_TEST(sw.is_running());
78 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
79 sw.start();
80 BOOST_TEST(sw.is_running());
81 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
82 typename Stopwatch::duration d=sw.elapsed();
83 BOOST_TEST(sw.is_running());
84 BOOST_TEST(d >= boost::chrono::milliseconds(100));
85 BOOST_TEST(d < boost::chrono::milliseconds(200));
86 }
87
88 template <typename Stopwatch>
89 void check_dont_start_start()
90 {
91 Stopwatch sw(boost::chrono::dont_start);
92 BOOST_TEST(!sw.is_running());
93 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
94 sw.start();
95 BOOST_TEST(sw.is_running());
96 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
97 typename Stopwatch::duration d=sw.elapsed();
98 BOOST_TEST(sw.is_running());
99 BOOST_TEST(d >= boost::chrono::milliseconds(100));
100 BOOST_TEST(d < boost::chrono::milliseconds(200));
101 }
102
103 template <typename Stopwatch>
104 void check_dont_start_start_stop()
105 {
106 Stopwatch sw(boost::chrono::dont_start);
107 BOOST_TEST(!sw.is_running());
108 sw.start();
109 BOOST_TEST(sw.is_running());
110 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
111 sw.stop();
112 BOOST_TEST(!sw.is_running());
113 typename Stopwatch::duration d=sw.elapsed();
114 BOOST_TEST(!sw.is_running());
115 BOOST_TEST(d >= boost::chrono::milliseconds(0));
116 }
117
118 template <typename Stopwatch>
119 void check_dont_start_scoped_run()
120 {
121 Stopwatch sw(boost::chrono::dont_start);
122 BOOST_TEST(!sw.is_running());
123 {
124 typename Stopwatch::scoped_run _(sw);
125 BOOST_TEST(sw.is_running());
126 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
127 }
128 BOOST_TEST(!sw.is_running());
129 typename Stopwatch::duration d=sw.elapsed();
130 BOOST_TEST(!sw.is_running());
131 BOOST_TEST(d >= boost::chrono::milliseconds(0));
132 }
133
134 template <typename Stopwatch>
135 void check_stop()
136 {
137 Stopwatch sw;
138 BOOST_TEST(sw.is_running());
139 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
140 sw.stop();
141 BOOST_TEST(!sw.is_running());
142 typename Stopwatch::duration d=sw.elapsed();
143 BOOST_TEST(!sw.is_running());
144 BOOST_TEST(d == boost::chrono::milliseconds(0));
145 }
146
147 template <typename Stopwatch>
148 void check_stop_stop()
149 {
150 Stopwatch sw;
151 BOOST_TEST(sw.is_running());
152 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
153 sw.stop();
154 BOOST_TEST(!sw.is_running());
155 typename Stopwatch::duration d=sw.elapsed();
156 BOOST_TEST(!sw.is_running());
157 BOOST_TEST(d == boost::chrono::milliseconds(0));
158 sw.stop();
159 BOOST_TEST(!sw.is_running());
160 d=sw.elapsed();
161 BOOST_TEST(!sw.is_running());
162 BOOST_TEST(d == boost::chrono::milliseconds(0));
163 }
164
165
166 template <typename Stopwatch>
167 void check_all()
168 {
169 check_invariants<Stopwatch>();
170 check_default_constructor<Stopwatch>();
171 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
172 check_constructor_ec<Stopwatch>();
173 check_constructor_throws<Stopwatch>();
174 #endif
175 check_elapsed<Stopwatch>();
176
177 check_start_start<Stopwatch>();
178 check_dont_start_constructor<Stopwatch>();
179 check_dont_start_start<Stopwatch>();
180 check_dont_start_start_stop<Stopwatch>();
181 check_dont_start_scoped_run<Stopwatch>();
182 check_stop<Stopwatch>();
183 check_stop_stop<Stopwatch>();
184
185 }
186
187
188 int main()
189 {
190 std::cout << "cycle_count=";
191 check_all<boost::chrono::stopwatch< ex::cycle_count<1500> > >();
192
193 return boost::report_errors();
194 }