]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/date_time/test/posix_time/testmicrosec_time_clock.cpp
1 /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
2 * Use, modification and distribution is subject to the
3 * Boost Software License, Version 1.0. (See accompanying
4 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8 #include "boost/date_time/posix_time/posix_time.hpp"
9 #include "boost/date_time/microsec_time_clock.hpp"
10 #include "../testfrmwk.hpp"
11 #if defined(BOOST_HAS_FTIME)
18 using namespace boost::posix_time
;
21 ptime t_now
= second_clock::local_time();
23 // Wait the next seconds
27 t_now
= second_clock::local_time();
28 } while (t_now
.time_of_day().seconds() == t_prev
.time_of_day().seconds());
30 // Wait 300ms in order to avoid seconds of second_clock > microsec_clock.
31 t_now
= microsec_clock::local_time();
35 t_now
= microsec_clock::local_time();
36 } while (t_now
- t_prev
< milliseconds(300));
44 #ifdef BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
46 using namespace boost::posix_time
;
48 std::cout
<< "Check local time of microsec_clock against second_clock" << std::endl
;
50 ptime last
= microsec_clock::local_time();
52 for (int i
=0; i
<max
; i
++)
54 // Some systems loop too fast so "last is less" tests fail due to
55 // 'last' & 't2' being equal. These calls slow it down enough to
56 // make 'last' & 't2' different. Moreover, we must wait the next
57 // second to avoid a change in hour, minute or second field
58 // between acquisition of t1 and t2.
59 sync_to_next_second();
61 ptime t1
= second_clock::local_time();
62 std::cout
<< t1
<< std::endl
;
64 ptime t2
= microsec_clock::local_time();
65 std::cout
<< t2
<< std::endl
;
67 // sometimes on very slow systems (github actions) a long time
68 // can pass between syncing to the next second + 300ms (see previous
69 // function) and asking for t2; therefore if the fractional seconds
70 // of t2 are less than 300ms we skip that test loop assuming it
72 time_duration t2_tod
= t2
.time_of_day();
73 if (t2_tod
.fractional_seconds() < (t2_tod
.ticks_per_second() * 3) / 10) {
74 std::cout
<< "SKIP :: we had a significant host processing delay" << std::endl
;
78 check("check equality of hours "
79 "between second_clock and microsec_clock timestamps",
80 t1
.time_of_day().hours() == t2
.time_of_day().hours());
82 check("check equality of minutes "
83 "between second_clock and microsec_clock timestamps",
84 t1
.time_of_day().minutes() == t2
.time_of_day().minutes());
86 check("check equality of seconds "
87 "between second_clock and microsec_clock timestamps",
88 t1
.time_of_day().seconds() == t2
.time_of_day().seconds());
90 check("check equality of date"
91 "between second_clock and microsec_clock timestamps",
92 t1
.date() == t2
.date());
94 if( !check("check that previous microsec_clock timestamp "
95 "is less than the current", last
< t2
) ) {
96 std::cout
<< last
<< " < " << t2
<< std::endl
;
103 std::cout
<< "Check universal time of microsec_clock against second_clock" << std::endl
;
105 last
= microsec_clock::universal_time();
106 for (int i
=0; i
<max
; i
++)
108 // Some systems loop too fast so "last is less" tests fail due to
109 // 'last' & 't2' being equal. These calls slow it down enough to
110 // make 'last' & 't2' different. Moreover, we must wait the next
111 // second to avoid a change in hour, minute or second field
112 // between acquisition of t1 and t2.
113 sync_to_next_second();
115 ptime t1
= second_clock::universal_time();
116 std::cout
<< t1
<< std::endl
;
118 ptime t2
= microsec_clock::universal_time();
119 std::cout
<< t2
<< std::endl
;
121 // sometimes on very slow systems (github actions) a long time
122 // can pass between syncing to the next second + 300ms (see previous
123 // function) and asking for t2; therefore if the fractional seconds
124 // of t2 are less than 300ms we skip that test loop assuming it
126 time_duration t2_tod
= t2
.time_of_day();
127 if (t2_tod
.fractional_seconds() < (t2_tod
.ticks_per_second() * 3) / 10) {
128 std::cout
<< "SKIP :: we had a significant host processing delay" << std::endl
;
132 check("check equality of hours "
133 "between second_clock and microsec_clock timestamps",
134 t1
.time_of_day().hours() == t2
.time_of_day().hours());
136 check("check equality of minutes "
137 "between second_clock and microsec_clock timestamps",
138 t1
.time_of_day().minutes() == t2
.time_of_day().minutes());
140 check("check equality of seconds "
141 "between second_clock and microsec_clock timestamps",
142 t1
.time_of_day().seconds() == t2
.time_of_day().seconds());
144 check("check equality of date"
145 "between second_clock and microsec_clock timestamps",
146 t1
.date() == t2
.date());
148 if( !check("check that previous microsec_clock timestamp "
149 "is less than the current", last
< t2
) ) {
150 std::cout
<< last
<< " < " << t2
<< std::endl
;
157 check("Get time of day micro second clock not supported due to inadequate compiler/platform", false);
159 return printTestStats();