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/strict_stopwatch.hpp>
10 #include "../cycle_count.hpp"
11 #include <boost/detail/lightweight_test.hpp>
13 #if !defined(BOOST_NO_CXX11_STATIC_ASSERT)
18 template <typename Stopwatch
>
19 void check_invariants()
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
, ());
27 template <typename Stopwatch
>
28 void check_default_constructor()
33 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
34 template <typename Stopwatch
>
35 void check_constructor_ec()
37 boost::system::error_code ec
;
39 BOOST_TEST(ec
.value()==0);
42 template <typename Stopwatch
>
43 void check_constructor_throws()
45 Stopwatch
_(boost::throws());
49 template <typename Stopwatch
>
50 void check_elapsed(bool check
=true)
53 ex::sleep_for
<typename
Stopwatch::clock
>(boost::chrono::milliseconds(100));
54 typename
Stopwatch::duration d
=sw
.elapsed();
56 BOOST_TEST(d
>= boost::chrono::milliseconds(100));
59 template <typename Clock
>
60 void check_all(bool check
=true)
62 typedef boost::chrono::strict_stopwatch
<Clock
> Stopwatch
;
63 check_invariants
<Stopwatch
>();
64 check_default_constructor
<Stopwatch
>();
65 #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
66 check_constructor_ec
<Stopwatch
>();
67 check_constructor_throws
<Stopwatch
>();
69 check_elapsed
<Stopwatch
>(check
);
75 std::cout
<< "cycle_count=";
76 check_all
<ex::cycle_count
<1500> >(true);
78 return boost::report_errors();