]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
7c673cae
FG
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
19template <typename Stopwatch>
20void 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
28template <typename Stopwatch>
29void 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
36template <typename Stopwatch>
37void 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
48template <typename Stopwatch>
49void 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
58template <typename Stopwatch>
59void 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
67template <typename Stopwatch>
68void 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
79template <typename Stopwatch>
80void 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
95template <typename Stopwatch>
96void 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
111template <typename Stopwatch>
112void 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
127template <typename Stopwatch>
128void 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
156template <typename Stopwatch>
157void 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
170template <typename Stopwatch>
171void 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
192template <typename Stopwatch>
193void 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
214int 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}