OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/time/time.h" | 5 #include "base/time/time.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <time.h> | 8 #include <time.h> |
9 #include <limits> | 9 #include <limits> |
10 #include <string> | 10 #include <string> |
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 base::TimeTicks::FromInternalValue(8635916564000); | 716 base::TimeTicks::FromInternalValue(8635916564000); |
717 | 717 |
718 EXPECT_EQ(8635916564000, | 718 EXPECT_EQ(8635916564000, |
719 big_timestamp.SnappedToNextTick(phase, interval).ToInternalValue()); | 719 big_timestamp.SnappedToNextTick(phase, interval).ToInternalValue()); |
720 EXPECT_EQ(8635916564000, | 720 EXPECT_EQ(8635916564000, |
721 big_timestamp.SnappedToNextTick(big_timestamp, interval) | 721 big_timestamp.SnappedToNextTick(big_timestamp, interval) |
722 .ToInternalValue()); | 722 .ToInternalValue()); |
723 } | 723 } |
724 | 724 |
725 TEST(TimeDelta, FromAndIn) { | 725 TEST(TimeDelta, FromAndIn) { |
726 EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); | 726 // static_assert also checks that the contained expression is a constant |
727 EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); | 727 // expression, meaning all its components are suitable for initializing global |
728 EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); | 728 // variables. |
729 EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); | 729 static_assert(TimeDelta::FromDays(2) == TimeDelta::FromHours(48), ""); |
730 EXPECT_TRUE(TimeDelta::FromMilliseconds(2) == | 730 static_assert(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180), ""); |
731 TimeDelta::FromMicroseconds(2000)); | 731 static_assert(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120), ""); |
732 EXPECT_TRUE(TimeDelta::FromSecondsD(2.3) == | 732 static_assert(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000), |
733 TimeDelta::FromMilliseconds(2300)); | 733 ""); |
734 EXPECT_TRUE(TimeDelta::FromMillisecondsD(2.5) == | 734 static_assert( |
735 TimeDelta::FromMicroseconds(2500)); | 735 TimeDelta::FromMilliseconds(2) == TimeDelta::FromMicroseconds(2000), ""); |
| 736 static_assert( |
| 737 TimeDelta::FromSecondsD(2.3) == TimeDelta::FromMilliseconds(2300), ""); |
| 738 static_assert( |
| 739 TimeDelta::FromMillisecondsD(2.5) == TimeDelta::FromMicroseconds(2500), |
| 740 ""); |
736 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); | 741 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); |
737 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); | 742 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); |
738 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); | 743 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); |
739 EXPECT_EQ(13, TimeDelta::FromSeconds(13).InSeconds()); | 744 EXPECT_EQ(13, TimeDelta::FromSeconds(13).InSeconds()); |
740 EXPECT_EQ(13.0, TimeDelta::FromSeconds(13).InSecondsF()); | 745 EXPECT_EQ(13.0, TimeDelta::FromSeconds(13).InSecondsF()); |
741 EXPECT_EQ(13, TimeDelta::FromMilliseconds(13).InMilliseconds()); | 746 EXPECT_EQ(13, TimeDelta::FromMilliseconds(13).InMilliseconds()); |
742 EXPECT_EQ(13.0, TimeDelta::FromMilliseconds(13).InMillisecondsF()); | 747 EXPECT_EQ(13.0, TimeDelta::FromMilliseconds(13).InMillisecondsF()); |
743 EXPECT_EQ(13, TimeDelta::FromSecondsD(13.1).InSeconds()); | 748 EXPECT_EQ(13, TimeDelta::FromSecondsD(13.1).InSeconds()); |
744 EXPECT_EQ(13.1, TimeDelta::FromSecondsD(13.1).InSecondsF()); | 749 EXPECT_EQ(13.1, TimeDelta::FromSecondsD(13.1).InSecondsF()); |
745 EXPECT_EQ(13, TimeDelta::FromMillisecondsD(13.3).InMilliseconds()); | 750 EXPECT_EQ(13, TimeDelta::FromMillisecondsD(13.3).InMilliseconds()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 EXPECT_TRUE(t.is_max()); | 853 EXPECT_TRUE(t.is_max()); |
849 | 854 |
850 t = TimeDelta::FromHours(std::numeric_limits<int>::max()); | 855 t = TimeDelta::FromHours(std::numeric_limits<int>::max()); |
851 EXPECT_TRUE(t.is_max()); | 856 EXPECT_TRUE(t.is_max()); |
852 | 857 |
853 t = TimeDelta::FromMinutes(std::numeric_limits<int>::max()); | 858 t = TimeDelta::FromMinutes(std::numeric_limits<int>::max()); |
854 EXPECT_TRUE(t.is_max()); | 859 EXPECT_TRUE(t.is_max()); |
855 | 860 |
856 int64_t max_int = std::numeric_limits<int64_t>::max(); | 861 int64_t max_int = std::numeric_limits<int64_t>::max(); |
857 | 862 |
| 863 t = TimeDelta::FromSeconds(max_int / Time::kMicrosecondsPerSecond); |
| 864 EXPECT_FALSE(t.is_max()); |
858 t = TimeDelta::FromSeconds(max_int / Time::kMicrosecondsPerSecond + 1); | 865 t = TimeDelta::FromSeconds(max_int / Time::kMicrosecondsPerSecond + 1); |
859 EXPECT_TRUE(t.is_max()); | 866 EXPECT_TRUE(t.is_max()); |
860 | 867 |
| 868 t = TimeDelta::FromMilliseconds(max_int / Time::kMillisecondsPerSecond); |
| 869 EXPECT_FALSE(t.is_max()); |
861 t = TimeDelta::FromMilliseconds(max_int / Time::kMillisecondsPerSecond + 1); | 870 t = TimeDelta::FromMilliseconds(max_int / Time::kMillisecondsPerSecond + 1); |
862 EXPECT_TRUE(t.is_max()); | 871 EXPECT_TRUE(t.is_max()); |
863 | 872 |
864 t = TimeDelta::FromMicroseconds(max_int); | 873 t = TimeDelta::FromMicroseconds(max_int); |
865 EXPECT_TRUE(t.is_max()); | 874 EXPECT_TRUE(t.is_max()); |
866 | 875 |
| 876 t = TimeDelta::FromSeconds(-max_int / Time::kMicrosecondsPerSecond); |
| 877 EXPECT_FALSE(IsMin(t)); |
867 t = TimeDelta::FromSeconds(-max_int / Time::kMicrosecondsPerSecond - 1); | 878 t = TimeDelta::FromSeconds(-max_int / Time::kMicrosecondsPerSecond - 1); |
868 EXPECT_TRUE(IsMin(t)); | 879 EXPECT_TRUE(IsMin(t)); |
869 | 880 |
| 881 t = TimeDelta::FromMilliseconds(-max_int / Time::kMillisecondsPerSecond); |
| 882 EXPECT_FALSE(IsMin(t)); |
870 t = TimeDelta::FromMilliseconds(-max_int / Time::kMillisecondsPerSecond - 1); | 883 t = TimeDelta::FromMilliseconds(-max_int / Time::kMillisecondsPerSecond - 1); |
871 EXPECT_TRUE(IsMin(t)); | 884 EXPECT_TRUE(IsMin(t)); |
872 | 885 |
873 t = TimeDelta::FromMicroseconds(-max_int); | 886 t = TimeDelta::FromMicroseconds(-max_int); |
874 EXPECT_TRUE(IsMin(t)); | 887 EXPECT_TRUE(IsMin(t)); |
875 | 888 |
876 t = -TimeDelta::FromMicroseconds(std::numeric_limits<int64_t>::min()); | 889 t = -TimeDelta::FromMicroseconds(std::numeric_limits<int64_t>::min()); |
877 EXPECT_FALSE(IsMin(t)); | 890 EXPECT_FALSE(IsMin(t)); |
878 | 891 |
879 t = TimeDelta::FromSecondsD(std::numeric_limits<double>::infinity()); | 892 t = TimeDelta::FromSecondsD(std::numeric_limits<double>::infinity()); |
880 EXPECT_TRUE(t.is_max()); | 893 EXPECT_TRUE(t.is_max()); |
881 | 894 |
882 double max_d = max_int; | 895 double max_d = max_int; |
| 896 // Converting max_int to double changes its value. |
| 897 EXPECT_EQ(pow(2.0, 63), max_d); |
883 | 898 |
884 t = TimeDelta::FromSecondsD(max_d / Time::kMicrosecondsPerSecond + 1); | 899 t = TimeDelta::FromSecondsD(max_d / Time::kMicrosecondsPerSecond); |
885 EXPECT_TRUE(t.is_max()); | 900 EXPECT_TRUE(t.is_max()); |
| 901 t = TimeDelta::FromSecondsD( |
| 902 nexttoward(max_d / Time::kMicrosecondsPerSecond, 0)); |
| 903 EXPECT_FALSE(t.is_max()); |
886 | 904 |
887 t = TimeDelta::FromMillisecondsD(std::numeric_limits<double>::infinity()); | 905 t = TimeDelta::FromMillisecondsD(std::numeric_limits<double>::infinity()); |
888 EXPECT_TRUE(t.is_max()); | 906 EXPECT_TRUE(t.is_max()); |
889 | 907 |
890 t = TimeDelta::FromMillisecondsD(max_d / Time::kMillisecondsPerSecond * 2); | 908 t = TimeDelta::FromMillisecondsD(max_d / Time::kMillisecondsPerSecond); |
891 EXPECT_TRUE(t.is_max()); | 909 EXPECT_TRUE(t.is_max()) << t; |
| 910 t = TimeDelta::FromMillisecondsD( |
| 911 nexttoward(max_d / Time::kMillisecondsPerSecond, 0)); |
| 912 EXPECT_FALSE(t.is_max()); |
892 | 913 |
893 t = TimeDelta::FromSecondsD(-max_d / Time::kMicrosecondsPerSecond - 1); | 914 t = TimeDelta::FromSecondsD(-max_d / Time::kMicrosecondsPerSecond); |
894 EXPECT_TRUE(IsMin(t)); | 915 EXPECT_TRUE(IsMin(t)); |
| 916 t = TimeDelta::FromSecondsD( |
| 917 nexttoward(-max_d / Time::kMicrosecondsPerSecond, 0)); |
| 918 EXPECT_FALSE(IsMin(t)); |
895 | 919 |
896 t = TimeDelta::FromMillisecondsD(-max_d / Time::kMillisecondsPerSecond * 2); | 920 t = TimeDelta::FromMillisecondsD(-max_d / Time::kMillisecondsPerSecond); |
897 EXPECT_TRUE(IsMin(t)); | 921 EXPECT_TRUE(IsMin(t)) << t; |
| 922 t = TimeDelta::FromMillisecondsD( |
| 923 nexttoward(-max_d / Time::kMillisecondsPerSecond, 0)); |
| 924 EXPECT_FALSE(IsMin(t)); |
898 } | 925 } |
899 | 926 |
900 TEST(TimeDelta, NumericOperators) { | 927 TEST(TimeDelta, NumericOperators) { |
901 double d = 0.5; | 928 double d = 0.5; |
902 EXPECT_EQ(TimeDelta::FromMilliseconds(500), | 929 EXPECT_EQ(TimeDelta::FromMilliseconds(500), |
903 TimeDelta::FromMilliseconds(1000) * d); | 930 TimeDelta::FromMilliseconds(1000) * d); |
904 EXPECT_EQ(TimeDelta::FromMilliseconds(2000), | 931 EXPECT_EQ(TimeDelta::FromMilliseconds(2000), |
905 TimeDelta::FromMilliseconds(1000) / d); | 932 TimeDelta::FromMilliseconds(1000) / d); |
906 EXPECT_EQ(TimeDelta::FromMilliseconds(500), | 933 EXPECT_EQ(TimeDelta::FromMilliseconds(500), |
907 TimeDelta::FromMilliseconds(1000) *= d); | 934 TimeDelta::FromMilliseconds(1000) *= d); |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1116 | 1143 |
1117 TEST(TimeTicksLogging, DoesNotMakeStreamBad) { | 1144 TEST(TimeTicksLogging, DoesNotMakeStreamBad) { |
1118 std::ostringstream oss; | 1145 std::ostringstream oss; |
1119 oss << TimeTicks(); | 1146 oss << TimeTicks(); |
1120 EXPECT_TRUE(oss.good()); | 1147 EXPECT_TRUE(oss.good()); |
1121 } | 1148 } |
1122 | 1149 |
1123 } // namespace | 1150 } // namespace |
1124 | 1151 |
1125 } // namespace base | 1152 } // namespace base |
OLD | NEW |