21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "core/thread_api_traits.hpp"
28 using namespace libjmmcg;
32 BOOST_AUTO_TEST_SUITE(hp_timers)
34 BOOST_AUTO_TEST_CASE(check_cpu_frequency) {
35 BOOST_CHECK_GT(cpu_timer::private_::start_ticks, 0);
36 BOOST_CHECK_GT(cpu_timer::private_::start_UTC.time_of_day().total_milliseconds(), 0);
37 BOOST_CHECK_GT(cpu_timer::private_::ticks_per_microsec.min, 0);
38 BOOST_CHECK_GT(cpu_timer::private_::ticks_per_microsec.mean, cpu_timer::private_::ticks_per_microsec.min);
39 BOOST_CHECK_GT(cpu_timer::private_::ticks_per_microsec.max, cpu_timer::private_::ticks_per_microsec.mean);
40 BOOST_CHECK_GE(cpu_timer::private_::ticks_per_microsec.mean_average_dev, 0);
41 BOOST_CHECK_LT(cpu_timer::private_::ticks_per_microsec.mean_average_dev, 1);
42 BOOST_CHECK_GT(cpu_timer::out_of_order::now(), 0);
43 BOOST_CHECK_GT(cpu_timer::in_order::now(), 0);
46 BOOST_AUTO_TEST_CASE_TEMPLATE(create_timer, Mdl, thread_types) {
47 typedef hp_timer<
ppd::platform_api,Mdl> hp_timer_t;
50 BOOST_CHECK_GT(t.start_up_count, 0);
51 BOOST_CHECK_GT(t.to_usec(t.start_up_time), 0);
54 BOOST_AUTO_TEST_CASE_TEMPLATE(check_timer_counter_counts, Mdl, thread_types) {
55 typedef hp_timer<
ppd::platform_api,Mdl> hp_timer_t;
58 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
59 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
60 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
61 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
62 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
63 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
64 BOOST_CHECK_GE(t.current_count(), t.start_up_count);
67 BOOST_AUTO_TEST_CASE_TEMPLATE(check_timer_usec_simply_increments, Mdl, thread_types) {
68 typedef hp_timer<
ppd::platform_api,Mdl> hp_timer_t;
71 BOOST_CHECK_GE(t.to_usec(t.current_time()), t.start_up_count);
72 BOOST_CHECK_GE(t.to_usec(t.current_time()), t.start_up_count);
73 BOOST_CHECK_GE(t.to_usec(t.current_time()), t.start_up_count);
76 BOOST_AUTO_TEST_CASE_TEMPLATE(check_timer_usec_increments, Mdl, thread_types) {
77 typedef hp_timer<
ppd::platform_api,Mdl> hp_timer_t;
80 const typename hp_timer_t::value_type t1=t.to_usec(t.current_time());
81 const typename hp_timer_t::value_type t2=t.to_usec(t.current_time());
82 BOOST_CHECK_GE(t2, t1);
83 const typename hp_timer_t::value_type t3=t.to_usec(t.current_time());
84 BOOST_CHECK_GE(t3, t2);
85 BOOST_CHECK_GT(t3, t1);
88 BOOST_AUTO_TEST_SUITE_END()
90 BOOST_AUTO_TEST_SUITE(hp_intervals)
92 BOOST_AUTO_TEST_CASE_TEMPLATE(create_interval, Mdl, thread_types) {
93 typedef hp_timer<
ppd::platform_api,Mdl> hp_timer_t;
97 typename hp_timer_t::time_utc_t interval;
98 hp_interval_t measure(timer,interval);
99 BOOST_CHECK_GE(measure.timer.to_usec(measure.start), measure.timer.start_up_count);
102 BOOST_AUTO_TEST_CASE(measure_one_sec_thread_interval) {
103 typedef ppd::api_threading_traits<
ppd::platform_api,
ppd::heavyweight_threading> thread_traits;
104 typedef hp_timer<
ppd::platform_api,
ppd::heavyweight_threading> hp_timer_t;
107 const thread_traits::api_params_type::suspend_period_ms one_sec=1000;
109 hp_timer_t::time_utc_t interval;
111 hp_interval_t measure(timer,interval);
112 thread_traits::sleep(one_sec);
114 BOOST_CHECK_GT(timer.to_usec(interval),
static_cast<hp_timer_t::value_type>(one_sec*0.9*1000));
115 BOOST_CHECK_LT(timer.to_usec(interval),
static_cast<hp_timer_t::value_type>(one_sec*2*1000));
118 BOOST_AUTO_TEST_CASE(measure_one_sec_seq_interval) {
119 typedef ppd::api_threading_traits<
ppd::platform_api,
ppd::sequential_mode> thread_traits;
120 typedef hp_timer<
ppd::platform_api,
ppd::sequential_mode> hp_timer_t;
123 const thread_traits::api_params_type::suspend_period_ms one_sec=1000;
125 hp_timer_t::time_utc_t interval;
127 const hp_interval_t measure(timer, interval);
128 thread_traits::sleep(one_sec);
130 BOOST_CHECK_GE(timer.to_usec(interval), 0);
133 BOOST_AUTO_TEST_CASE(measure_one_sec_pause) {
134 using hp_timer_t=hp_timer<
ppd::platform_api,
ppd::sequential_mode>;
137 const double one_sec=1000000;
139 hp_timer_t::time_utc_t interval;
141 const hp_interval_t measure(timer, interval);
143 BOOST_CHECK_GE(paused, one_sec);
145 BOOST_CHECK_GE(timer.to_usec(interval), 0.9*one_sec);
148 BOOST_AUTO_TEST_SUITE_END()