]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/chrono/stopwatches/test/stopwatch/basic_stopwatch_last_lap_pass.cpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / libs / chrono / stopwatches / test / stopwatch / basic_stopwatch_last_lap_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 <boost/chrono/stopwatches/collectors/last_lap.hpp>
11 #include "../cycle_count.hpp"
12 #include <boost/detail/lightweight_test.hpp>
13
14 #if !defined(BOOST_NO_CXX11_STATIC_ASSERT)
15 #define NOTHING ""
16 #endif
17
18
19 template <typename Stopwatch>
20 void check_invariants()
21 {
22 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::rep, typename Stopwatch::clock::duration::rep>::value), NOTHING, ());
23 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::period, typename Stopwatch::clock::duration::period>::value), NOTHING, ());
24 BOOST_CHRONO_STATIC_ASSERT((boost::is_same<typename Stopwatch::duration, typename Stopwatch::clock::time_point::duration>::value), NOTHING, ());
25 BOOST_CHRONO_STATIC_ASSERT(Stopwatch::is_steady == Stopwatch::clock::is_steady, NOTHING, ());
26 }
27
28 template <typename Stopwatch>
29 void check_default_constructor()
30 {
31 Stopwatch sw;
32 BOOST_TEST(sw.is_running());
33 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
34 }
35
36 template <typename Stopwatch>
37 void check_dont_start_constructor()
38 {
39 Stopwatch sw(boost::chrono::dont_start);
40 BOOST_TEST(!sw.is_running());
41 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
42 typename Stopwatch::duration d=sw.elapsed();
43 BOOST_TEST(d == Stopwatch::duration::zero());
44 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
45 }
46
47 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
48 template <typename Stopwatch>
49 void check_constructor_ec()
50 {
51 boost::system::error_code ec;
52 Stopwatch sw(ec);
53 BOOST_TEST(sw.is_running());
54 BOOST_TEST(ec.value()==0);
55 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
56 }
57
58 template <typename Stopwatch>
59 void check_constructor_throws()
60 {
61 Stopwatch sw(boost::throws());
62 BOOST_TEST(sw.is_running());
63 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
64 }
65 #endif
66
67 template <typename Stopwatch>
68 void check_elapsed()
69 {
70 Stopwatch sw;
71 BOOST_TEST(sw.is_running());
72 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
73 typename Stopwatch::duration d=sw.elapsed();
74 BOOST_TEST(sw.is_running());
75 BOOST_TEST(d >= boost::chrono::milliseconds(100));
76 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
77 }
78
79 template <typename Stopwatch>
80 void check_start_start()
81 {
82 Stopwatch sw;
83 BOOST_TEST(sw.is_running());
84 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
85 sw.start();
86 BOOST_TEST(sw.is_running());
87 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
88 typename Stopwatch::duration d=sw.elapsed();
89 BOOST_TEST(sw.is_running());
90 BOOST_TEST(d >= boost::chrono::milliseconds(100));
91 BOOST_TEST(d < boost::chrono::milliseconds(200));
92 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
93 }
94
95 template <typename Stopwatch>
96 void check_dont_start_start()
97 {
98 Stopwatch sw(boost::chrono::dont_start);
99 BOOST_TEST(!sw.is_running());
100 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
101 sw.start();
102 BOOST_TEST(sw.is_running());
103 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
104 typename Stopwatch::duration d=sw.elapsed();
105 BOOST_TEST(sw.is_running());
106 BOOST_TEST(d >= boost::chrono::milliseconds(100));
107 BOOST_TEST(d < boost::chrono::milliseconds(200));
108 BOOST_TEST(sw.get_laps_collector().last()==Stopwatch::duration::zero());
109 }
110
111 template <typename Stopwatch>
112 void check_dont_start_start_stop()
113 {
114 Stopwatch sw(boost::chrono::dont_start);
115 BOOST_TEST(!sw.is_running());
116 sw.start();
117 BOOST_TEST(sw.is_running());
118 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
119 sw.stop();
120 BOOST_TEST(!sw.is_running());
121 typename Stopwatch::duration d=sw.elapsed();
122 BOOST_TEST(!sw.is_running());
123 BOOST_TEST(d >= boost::chrono::milliseconds(0));
124 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(100));
125 }
126
127 template <typename Stopwatch>
128 void check_dont_start_scoped_run()
129 {
130 Stopwatch sw(boost::chrono::dont_start);
131 BOOST_TEST(!sw.is_running());
132 {
133 typename Stopwatch::scoped_run _(sw);
134 BOOST_TEST(sw.is_running());
135 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
136 }
137 BOOST_TEST(!sw.is_running());
138 typename Stopwatch::duration d=sw.elapsed();
139 BOOST_TEST(!sw.is_running());
140 BOOST_TEST(d >= boost::chrono::milliseconds(0));
141 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(100));
142
143 BOOST_TEST(!sw.is_running());
144 {
145 typename Stopwatch::scoped_run _(sw);
146 BOOST_TEST(sw.is_running());
147 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(200));
148 }
149 BOOST_TEST(!sw.is_running());
150 d=sw.elapsed();
151 BOOST_TEST(!sw.is_running());
152 BOOST_TEST(d >= boost::chrono::milliseconds(0));
153 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(200));
154 }
155
156 template <typename Stopwatch>
157 void check_stop()
158 {
159 Stopwatch sw;
160 BOOST_TEST(sw.is_running());
161 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
162 sw.stop();
163 BOOST_TEST(!sw.is_running());
164 typename Stopwatch::duration d=sw.elapsed();
165 BOOST_TEST(!sw.is_running());
166 BOOST_TEST(d == boost::chrono::milliseconds(0));
167 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(100));
168 }
169
170 template <typename Stopwatch>
171 void check_stop_stop()
172 {
173 Stopwatch sw;
174 BOOST_TEST(sw.is_running());
175 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
176 sw.stop();
177 BOOST_TEST(!sw.is_running());
178 typename Stopwatch::duration d=sw.elapsed();
179 BOOST_TEST(!sw.is_running());
180 BOOST_TEST(d == boost::chrono::milliseconds(0));
181 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(100));
182 ex::sleep_for<typename Stopwatch::clock>(boost::chrono::milliseconds(100));
183 sw.stop();
184 BOOST_TEST(!sw.is_running());
185 d=sw.elapsed();
186 BOOST_TEST(!sw.is_running());
187 BOOST_TEST(d == boost::chrono::milliseconds(0));
188 BOOST_TEST(sw.get_laps_collector().last()==boost::chrono::milliseconds(100));
189 }
190
191
192 template <typename Stopwatch>
193 void check_all()
194 {
195 check_invariants<Stopwatch>();
196 check_default_constructor<Stopwatch>();
197 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
198 check_constructor_ec<Stopwatch>();
199 check_constructor_throws<Stopwatch>();
200 #endif
201 check_elapsed<Stopwatch>();
202
203 check_start_start<Stopwatch>();
204 check_dont_start_constructor<Stopwatch>();
205 check_dont_start_start<Stopwatch>();
206 check_dont_start_start_stop<Stopwatch>();
207 check_dont_start_scoped_run<Stopwatch>();
208 check_stop<Stopwatch>();
209 check_stop_stop<Stopwatch>();
210
211 }
212
213
214 int main()
215 {
216 std::cout << "cycle_count=";
217 check_all<boost::chrono::stopwatch< ex::cycle_count<1500>, boost::chrono::last_lap<ex::cycle_count<1500>::duration> > >();
218 return boost::report_errors();
219 }