1414
1515#include " absl/synchronization/internal/kernel_timeout.h"
1616
17+ #include < chrono> // NOLINT(build/c++11)
1718#include < limits>
1819
1920#include " gtest/gtest.h"
@@ -72,6 +73,11 @@ TEST(KernelTimeout, FiniteTimes) {
7273 EXPECT_LE (absl::AbsDuration (absl::Milliseconds (t.InMillisecondsFromNow ()) -
7374 std::max (duration, absl::ZeroDuration ())),
7475 absl::Milliseconds (5 ));
76+ EXPECT_LE (absl::AbsDuration (absl::FromChrono (t.ToChronoTimePoint ()) - when),
77+ absl::Microseconds (1 ));
78+ EXPECT_LE (absl::AbsDuration (absl::FromChrono (t.ToChronoDuration ()) -
79+ std::max (duration, absl::ZeroDuration ())),
80+ kTimingBound );
7581 }
7682}
7783
@@ -90,6 +96,9 @@ TEST(KernelTimeout, InfiniteFuture) {
9096 absl::Now () + absl::Hours (100000 ));
9197 EXPECT_EQ (t.InMillisecondsFromNow (),
9298 std::numeric_limits<KernelTimeout::DWord>::max ());
99+ EXPECT_EQ (t.ToChronoTimePoint (),
100+ std::chrono::time_point<std::chrono::system_clock>::max ());
101+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
93102}
94103
95104TEST (KernelTimeout, DefaultConstructor) {
@@ -108,6 +117,9 @@ TEST(KernelTimeout, DefaultConstructor) {
108117 absl::Now () + absl::Hours (100000 ));
109118 EXPECT_EQ (t.InMillisecondsFromNow (),
110119 std::numeric_limits<KernelTimeout::DWord>::max ());
120+ EXPECT_EQ (t.ToChronoTimePoint (),
121+ std::chrono::time_point<std::chrono::system_clock>::max ());
122+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
111123}
112124
113125TEST (KernelTimeout, TimeMaxNanos) {
@@ -126,6 +138,9 @@ TEST(KernelTimeout, TimeMaxNanos) {
126138 absl::Now () + absl::Hours (100000 ));
127139 EXPECT_EQ (t.InMillisecondsFromNow (),
128140 std::numeric_limits<KernelTimeout::DWord>::max ());
141+ EXPECT_EQ (t.ToChronoTimePoint (),
142+ std::chrono::time_point<std::chrono::system_clock>::max ());
143+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
129144}
130145
131146TEST (KernelTimeout, Never) {
@@ -144,6 +159,9 @@ TEST(KernelTimeout, Never) {
144159 absl::Now () + absl::Hours (100000 ));
145160 EXPECT_EQ (t.InMillisecondsFromNow (),
146161 std::numeric_limits<KernelTimeout::DWord>::max ());
162+ EXPECT_EQ (t.ToChronoTimePoint (),
163+ std::chrono::time_point<std::chrono::system_clock>::max ());
164+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
147165}
148166
149167TEST (KernelTimeout, InfinitePast) {
@@ -157,6 +175,9 @@ TEST(KernelTimeout, InfinitePast) {
157175 absl::ZeroDuration ());
158176 EXPECT_LE (absl::FromUnixNanos (t.MakeAbsNanos ()), absl::FromUnixNanos (1 ));
159177 EXPECT_EQ (t.InMillisecondsFromNow (), KernelTimeout::DWord{0 });
178+ EXPECT_LT (t.ToChronoTimePoint (), std::chrono::system_clock::from_time_t (0 ) +
179+ std::chrono::seconds (1 ));
180+ EXPECT_EQ (t.ToChronoDuration (), std::chrono::nanoseconds (0 ));
160181}
161182
162183TEST (KernelTimeout, FiniteDurations) {
@@ -186,6 +207,10 @@ TEST(KernelTimeout, FiniteDurations) {
186207 absl::Milliseconds (5 ));
187208 EXPECT_LE (absl::Milliseconds (t.InMillisecondsFromNow ()) - duration,
188209 absl::Milliseconds (5 ));
210+ EXPECT_LE (absl::AbsDuration (absl::Now () + duration -
211+ absl::FromChrono (t.ToChronoTimePoint ())),
212+ kTimingBound );
213+ EXPECT_EQ (absl::FromChrono (t.ToChronoDuration ()), duration);
189214 }
190215}
191216
@@ -218,6 +243,10 @@ TEST(KernelTimeout, NegativeDurations) {
218243 absl::AbsDuration (absl::Now () - absl::FromUnixNanos (t.MakeAbsNanos ())),
219244 absl::Milliseconds (5 ));
220245 EXPECT_EQ (t.InMillisecondsFromNow (), KernelTimeout::DWord{0 });
246+ EXPECT_LE (absl::AbsDuration (absl::Now () -
247+ absl::FromChrono (t.ToChronoTimePoint ())),
248+ absl::Milliseconds (5 ));
249+ EXPECT_EQ (t.ToChronoDuration (), std::chrono::nanoseconds (0 ));
221250 }
222251}
223252
@@ -236,6 +265,9 @@ TEST(KernelTimeout, InfiniteDuration) {
236265 absl::Now () + absl::Hours (100000 ));
237266 EXPECT_EQ (t.InMillisecondsFromNow (),
238267 std::numeric_limits<KernelTimeout::DWord>::max ());
268+ EXPECT_EQ (t.ToChronoTimePoint (),
269+ std::chrono::time_point<std::chrono::system_clock>::max ());
270+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
239271}
240272
241273TEST (KernelTimeout, DurationMaxNanos) {
@@ -254,6 +286,9 @@ TEST(KernelTimeout, DurationMaxNanos) {
254286 absl::Now () + absl::Hours (100000 ));
255287 EXPECT_EQ (t.InMillisecondsFromNow (),
256288 std::numeric_limits<KernelTimeout::DWord>::max ());
289+ EXPECT_EQ (t.ToChronoTimePoint (),
290+ std::chrono::time_point<std::chrono::system_clock>::max ());
291+ EXPECT_GE (t.ToChronoDuration (), std::chrono::nanoseconds::max ());
257292}
258293
259294TEST (KernelTimeout, OverflowNanos) {
@@ -273,6 +308,9 @@ TEST(KernelTimeout, OverflowNanos) {
273308 absl::Now () + absl::Hours (100000 ));
274309 EXPECT_LE (absl::Milliseconds (t.InMillisecondsFromNow ()) - duration,
275310 absl::Milliseconds (5 ));
311+ EXPECT_GT (t.ToChronoTimePoint (),
312+ std::chrono::system_clock::now () + std::chrono::hours (100000 ));
313+ EXPECT_GT (t.ToChronoDuration (), std::chrono::hours (100000 ));
276314}
277315
278316} // namespace
0 commit comments