Index: base/time/time_unittest.cc |
diff --git a/base/time/time_unittest.cc b/base/time/time_unittest.cc |
index 8a6a7f517728335660c180788cadcd158abcb78a..5b215fbf94525af222d082ebb3b209539e0db2d0 100644 |
--- a/base/time/time_unittest.cc |
+++ b/base/time/time_unittest.cc |
@@ -723,16 +723,21 @@ TEST(TimeTicks, SnappedToNextTickOverflow) { |
} |
TEST(TimeDelta, FromAndIn) { |
- EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); |
- EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); |
- EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); |
- EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); |
- EXPECT_TRUE(TimeDelta::FromMilliseconds(2) == |
- TimeDelta::FromMicroseconds(2000)); |
- EXPECT_TRUE(TimeDelta::FromSecondsD(2.3) == |
- TimeDelta::FromMilliseconds(2300)); |
- EXPECT_TRUE(TimeDelta::FromMillisecondsD(2.5) == |
- TimeDelta::FromMicroseconds(2500)); |
+ // static_assert also checks that the contained expression is a constant |
+ // expression, meaning all its components are suitable for initializing global |
+ // variables. |
+ static_assert(TimeDelta::FromDays(2) == TimeDelta::FromHours(48), ""); |
+ static_assert(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180), ""); |
+ static_assert(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120), ""); |
+ static_assert(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000), |
+ ""); |
+ static_assert( |
+ TimeDelta::FromMilliseconds(2) == TimeDelta::FromMicroseconds(2000), ""); |
+ static_assert( |
+ TimeDelta::FromSecondsD(2.3) == TimeDelta::FromMilliseconds(2300), ""); |
+ static_assert( |
+ TimeDelta::FromMillisecondsD(2.5) == TimeDelta::FromMicroseconds(2500), |
+ ""); |
EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); |
EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); |
EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); |
@@ -855,18 +860,26 @@ TEST(TimeDelta, MaxConversions) { |
int64_t max_int = std::numeric_limits<int64_t>::max(); |
+ t = TimeDelta::FromSeconds(max_int / Time::kMicrosecondsPerSecond); |
+ EXPECT_FALSE(t.is_max()); |
t = TimeDelta::FromSeconds(max_int / Time::kMicrosecondsPerSecond + 1); |
EXPECT_TRUE(t.is_max()); |
+ t = TimeDelta::FromMilliseconds(max_int / Time::kMillisecondsPerSecond); |
+ EXPECT_FALSE(t.is_max()); |
t = TimeDelta::FromMilliseconds(max_int / Time::kMillisecondsPerSecond + 1); |
EXPECT_TRUE(t.is_max()); |
t = TimeDelta::FromMicroseconds(max_int); |
EXPECT_TRUE(t.is_max()); |
+ t = TimeDelta::FromSeconds(-max_int / Time::kMicrosecondsPerSecond); |
+ EXPECT_FALSE(IsMin(t)); |
t = TimeDelta::FromSeconds(-max_int / Time::kMicrosecondsPerSecond - 1); |
EXPECT_TRUE(IsMin(t)); |
+ t = TimeDelta::FromMilliseconds(-max_int / Time::kMillisecondsPerSecond); |
+ EXPECT_FALSE(IsMin(t)); |
t = TimeDelta::FromMilliseconds(-max_int / Time::kMillisecondsPerSecond - 1); |
EXPECT_TRUE(IsMin(t)); |
@@ -880,21 +893,35 @@ TEST(TimeDelta, MaxConversions) { |
EXPECT_TRUE(t.is_max()); |
double max_d = max_int; |
+ // Converting max_int to double changes its value. |
+ EXPECT_EQ(pow(2.0, 63), max_d); |
- t = TimeDelta::FromSecondsD(max_d / Time::kMicrosecondsPerSecond + 1); |
+ t = TimeDelta::FromSecondsD(max_d / Time::kMicrosecondsPerSecond); |
EXPECT_TRUE(t.is_max()); |
+ t = TimeDelta::FromSecondsD( |
+ nexttoward(max_d / Time::kMicrosecondsPerSecond, 0)); |
+ EXPECT_FALSE(t.is_max()); |
t = TimeDelta::FromMillisecondsD(std::numeric_limits<double>::infinity()); |
EXPECT_TRUE(t.is_max()); |
- t = TimeDelta::FromMillisecondsD(max_d / Time::kMillisecondsPerSecond * 2); |
- EXPECT_TRUE(t.is_max()); |
+ t = TimeDelta::FromMillisecondsD(max_d / Time::kMillisecondsPerSecond); |
+ EXPECT_TRUE(t.is_max()) << t; |
+ t = TimeDelta::FromMillisecondsD( |
+ nexttoward(max_d / Time::kMillisecondsPerSecond, 0)); |
+ EXPECT_FALSE(t.is_max()); |
- t = TimeDelta::FromSecondsD(-max_d / Time::kMicrosecondsPerSecond - 1); |
+ t = TimeDelta::FromSecondsD(-max_d / Time::kMicrosecondsPerSecond); |
EXPECT_TRUE(IsMin(t)); |
+ t = TimeDelta::FromSecondsD( |
+ nexttoward(-max_d / Time::kMicrosecondsPerSecond, 0)); |
+ EXPECT_FALSE(IsMin(t)); |
- t = TimeDelta::FromMillisecondsD(-max_d / Time::kMillisecondsPerSecond * 2); |
- EXPECT_TRUE(IsMin(t)); |
+ t = TimeDelta::FromMillisecondsD(-max_d / Time::kMillisecondsPerSecond); |
+ EXPECT_TRUE(IsMin(t)) << t; |
+ t = TimeDelta::FromMillisecondsD( |
+ nexttoward(-max_d / Time::kMillisecondsPerSecond, 0)); |
+ EXPECT_FALSE(IsMin(t)); |
} |
TEST(TimeDelta, NumericOperators) { |