Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: base/time/time_unittest.cc

Issue 1976703005: Allow constexpr variables of TimeDelta type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Fix overflow from doubles, and test all the boundaries better. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698