]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/chrono/stopwatches/test/stopwatch/basic_stopwatch_pass.cpp
Add patch for failing prerm scripts
[ceph.git] / ceph / src / boost / libs / chrono / stopwatches / test / stopwatch / basic_stopwatch_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 "../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
18template <typename Stopwatch>
19void 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
27template <typename Stopwatch>
28void check_default_constructor()
29{
30 Stopwatch sw;
31 BOOST_TEST(sw.is_running());
32}
33
34template <typename Stopwatch>
35void 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
45template <typename Stopwatch>
46void 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
54template <typename Stopwatch>
55void check_constructor_throws()
56{
57 Stopwatch sw(boost::throws());
58 BOOST_TEST(sw.is_running());
59}
60#endif
61
62template <typename Stopwatch>
63void 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
73template <typename Stopwatch>
74void 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
88template <typename Stopwatch>
89void 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
103template <typename Stopwatch>
104void 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
118template <typename Stopwatch>
119void 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
134template <typename Stopwatch>
135void 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
147template <typename Stopwatch>
148void 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
166template <typename Stopwatch>
167void 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
188int main()
189{
190 std::cout << "cycle_count=";
191 check_all<boost::chrono::stopwatch< ex::cycle_count<1500> > >();
192
193 return boost::report_errors();
194}