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
5 #define BOOST_CHRONO_VERSION 2
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>
14 #if !defined(BOOST_NO_CXX11_STATIC_ASSERT)
19 template <typename Stopwatch
>
20 void check_invariants()
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
, ());
28 template <typename Stopwatch
>
29 void check_default_constructor()
32 BOOST_TEST(sw
.is_running());
33 BOOST_TEST(sw
.get_laps_collector().last()==Stopwatch::duration::zero());
36 template <typename Stopwatch
>
37 void check_dont_start_constructor()
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());
47 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
48 template <typename Stopwatch
>
49 void check_constructor_ec()
51 boost::system::error_code ec
;
53 BOOST_TEST(sw
.is_running());
54 BOOST_TEST(ec
.value()==0);
55 BOOST_TEST(sw
.get_laps_collector().last()==Stopwatch::duration::zero());
58 template <typename Stopwatch
>
59 void check_constructor_throws()
61 Stopwatch
sw(boost::throws());
62 BOOST_TEST(sw
.is_running());
63 BOOST_TEST(sw
.get_laps_collector().last()==Stopwatch::duration::zero());
67 template <typename Stopwatch
>
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());
79 template <typename Stopwatch
>
80 void check_start_start()
83 BOOST_TEST(sw
.is_running());
84 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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());
95 template <typename Stopwatch
>
96 void check_dont_start_start()
98 Stopwatch
sw(boost::chrono::dont_start
);
99 BOOST_TEST(!sw
.is_running());
100 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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());
111 template <typename Stopwatch
>
112 void check_dont_start_start_stop()
114 Stopwatch
sw(boost::chrono::dont_start
);
115 BOOST_TEST(!sw
.is_running());
117 BOOST_TEST(sw
.is_running());
118 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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));
127 template <typename Stopwatch
>
128 void check_dont_start_scoped_run()
130 Stopwatch
sw(boost::chrono::dont_start
);
131 BOOST_TEST(!sw
.is_running());
133 typename
Stopwatch::scoped_run
_(sw
);
134 BOOST_TEST(sw
.is_running());
135 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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));
143 BOOST_TEST(!sw
.is_running());
145 typename
Stopwatch::scoped_run
_(sw
);
146 BOOST_TEST(sw
.is_running());
147 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(200));
149 BOOST_TEST(!sw
.is_running());
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));
156 template <typename Stopwatch
>
160 BOOST_TEST(sw
.is_running());
161 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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));
170 template <typename Stopwatch
>
171 void check_stop_stop()
174 BOOST_TEST(sw
.is_running());
175 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
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));
184 BOOST_TEST(!sw
.is_running());
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));
192 template <typename Stopwatch
>
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
>();
201 check_elapsed
<Stopwatch
>();
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
>();
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();