| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include <thread> | |
| #include "flutter/fml/time/chrono_timestamp_provider.h" | |
| #include "flutter/fml/time/time_delta.h" | |
| #include "gtest/gtest.h" | |
| namespace fml { | |
| namespace { | |
| TEST(Time, Now) { | |
| auto start = ChronoTicksSinceEpoch(); | |
| for (int i = 0; i < 3; ++i) { | |
| auto now = ChronoTicksSinceEpoch(); | |
| EXPECT_GE(now, start); | |
| std::this_thread::yield(); | |
| } | |
| } | |
| TEST(Time, IntConversions) { | |
| // Integer conversions should all truncate, not round. | |
| TimeDelta delta = TimeDelta::FromNanoseconds(102304506708ll); | |
| EXPECT_EQ(102304506708ll, delta.ToNanoseconds()); | |
| EXPECT_EQ(102304506ll, delta.ToMicroseconds()); | |
| EXPECT_EQ(102304ll, delta.ToMilliseconds()); | |
| EXPECT_EQ(102ll, delta.ToSeconds()); | |
| } | |
| TEST(Time, FloatConversions) { | |
| // Float conversions should remain close to the original value. | |
| TimeDelta delta = TimeDelta::FromNanoseconds(102304506708ll); | |
| EXPECT_FLOAT_EQ(102304506708.0, delta.ToNanosecondsF()); | |
| EXPECT_FLOAT_EQ(102304506.708, delta.ToMicrosecondsF()); | |
| EXPECT_FLOAT_EQ(102304.506708, delta.ToMillisecondsF()); | |
| EXPECT_FLOAT_EQ(102.304506708, delta.ToSecondsF()); | |
| } | |
| TEST(Time, TimespecConversions) { | |
| struct timespec ts; | |
| ts.tv_sec = 5; | |
| ts.tv_nsec = 7; | |
| TimeDelta from_timespec = TimeDelta::FromTimespec(ts); | |
| EXPECT_EQ(5, from_timespec.ToSeconds()); | |
| EXPECT_EQ(5 * 1000000000ll + 7, from_timespec.ToNanoseconds()); | |
| struct timespec to_timespec = from_timespec.ToTimespec(); | |
| EXPECT_EQ(ts.tv_sec, to_timespec.tv_sec); | |
| EXPECT_EQ(ts.tv_nsec, to_timespec.tv_nsec); | |
| } | |
| } // namespace | |
| } // namespace fml |