| Index: base/time/time_unittest.cc
|
| diff --git a/base/time/time_unittest.cc b/base/time/time_unittest.cc
|
| index e78a61cf4bdcd1bb2fa8fe96d2ad171877944821..6cfe787c674c30aa7f06cb42c949c13a3298d361 100644
|
| --- a/base/time/time_unittest.cc
|
| +++ b/base/time/time_unittest.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "base/time/time.h"
|
|
|
| +#include <cmath>
|
| +
|
| #include <time.h>
|
|
|
| #include "base/compiler_specific.h"
|
| @@ -660,6 +662,47 @@ TEST(TimeTicks, NowFromSystemTraceTime) {
|
| HighResClockTest(&TimeTicks::NowFromSystemTraceTime);
|
| }
|
|
|
| +TEST(TimeTicks, WebKitConversion) {
|
| + double double_null = 0;
|
| + double double_max = std::numeric_limits<double>::max();
|
| + double double_min = std::numeric_limits<double>::lowest();
|
| + double double_positive_inf = std::numeric_limits<double>::infinity();
|
| + double double_negative_inf = -std::numeric_limits<double>::infinity();
|
| +
|
| + TimeTicks ticks_null = TimeTicks();
|
| + TimeTicks ticks_min =
|
| + TimeTicks::FromInternalValue(std::numeric_limits<int64>::min());
|
| + TimeTicks ticks_max =
|
| + TimeTicks::FromInternalValue(std::numeric_limits<int64>::max());
|
| +
|
| + EXPECT_EQ(ticks_null, TimeTicks::FromWebKit(double_null));
|
| + EXPECT_EQ(ticks_max, TimeTicks::FromWebKit(double_max));
|
| + EXPECT_EQ(ticks_min, TimeTicks::FromWebKit(double_min));
|
| + EXPECT_EQ(ticks_max, TimeTicks::FromWebKit(double_positive_inf));
|
| + EXPECT_EQ(ticks_min, TimeTicks::FromWebKit(double_negative_inf));
|
| +
|
| + EXPECT_EQ(double_null, ticks_null.ToWebKit());
|
| + EXPECT_EQ(double_negative_inf, ticks_min.ToWebKit());
|
| + EXPECT_EQ(double_positive_inf, ticks_max.ToWebKit());
|
| +
|
| + // Round trip some values
|
| + // Outside of 2**53 the int64->double->int64 round trip isn't exact.
|
| + for (int i = -53; i < 53; i++) {
|
| + if (!i)
|
| + continue;
|
| +
|
| + SCOPED_TRACE(i);
|
| + double i_abs = abs(static_cast<double>(i));
|
| +
|
| + TimeTicks ticks_value = TimeTicks::FromInternalValue(
|
| + static_cast<int64>((i / i_abs) * pow(2.0, i_abs)));
|
| + EXPECT_EQ(TimeTicks::FromWebKit(ticks_value.ToWebKit()), ticks_value);
|
| +
|
| + double double_value = (i / i_abs) * pow(2.0, i_abs) / 1e6;
|
| + EXPECT_EQ(TimeTicks::FromWebKit(double_value).ToWebKit(), double_value);
|
| + }
|
| +}
|
| +
|
| TEST(TimeDelta, FromAndIn) {
|
| EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48));
|
| EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180));
|
|
|