xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_time_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/core/quic_time.h"
6 
7 #include "quiche/quic/platform/api/quic_test.h"
8 #include "quiche/quic/test_tools/mock_clock.h"
9 
10 namespace quic {
11 namespace test {
12 
13 class QuicTimeDeltaTest : public QuicTest {};
14 
TEST_F(QuicTimeDeltaTest,Zero)15 TEST_F(QuicTimeDeltaTest, Zero) {
16   EXPECT_TRUE(QuicTime::Delta::Zero().IsZero());
17   EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
18   EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsZero());
19 }
20 
TEST_F(QuicTimeDeltaTest,Infinite)21 TEST_F(QuicTimeDeltaTest, Infinite) {
22   EXPECT_TRUE(QuicTime::Delta::Infinite().IsInfinite());
23   EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
24   EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsInfinite());
25 }
26 
TEST_F(QuicTimeDeltaTest,FromTo)27 TEST_F(QuicTimeDeltaTest, FromTo) {
28   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1),
29             QuicTime::Delta::FromMicroseconds(1000));
30   EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
31             QuicTime::Delta::FromMilliseconds(1000));
32   EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
33             QuicTime::Delta::FromMicroseconds(1000000));
34 
35   EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds());
36   EXPECT_EQ(2, QuicTime::Delta::FromMilliseconds(2000).ToSeconds());
37   EXPECT_EQ(1000, QuicTime::Delta::FromMilliseconds(1).ToMicroseconds());
38   EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds());
39   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(2000).ToMicroseconds(),
40             QuicTime::Delta::FromSeconds(2).ToMicroseconds());
41 }
42 
TEST_F(QuicTimeDeltaTest,Add)43 TEST_F(QuicTimeDeltaTest, Add) {
44   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
45             QuicTime::Delta::Zero() + QuicTime::Delta::FromMilliseconds(2));
46 }
47 
TEST_F(QuicTimeDeltaTest,Subtract)48 TEST_F(QuicTimeDeltaTest, Subtract) {
49   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1000),
50             QuicTime::Delta::FromMilliseconds(2) -
51                 QuicTime::Delta::FromMilliseconds(1));
52 }
53 
TEST_F(QuicTimeDeltaTest,Multiply)54 TEST_F(QuicTimeDeltaTest, Multiply) {
55   int i = 2;
56   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
57             QuicTime::Delta::FromMilliseconds(2) * i);
58   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
59             i * QuicTime::Delta::FromMilliseconds(2));
60   double d = 2;
61   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
62             QuicTime::Delta::FromMilliseconds(2) * d);
63   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
64             d * QuicTime::Delta::FromMilliseconds(2));
65 
66   // Ensure we are rounding correctly within a single-bit level of precision.
67   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(5),
68             QuicTime::Delta::FromMicroseconds(9) * 0.5);
69   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2),
70             QuicTime::Delta::FromMicroseconds(12) * 0.2);
71 }
72 
TEST_F(QuicTimeDeltaTest,Max)73 TEST_F(QuicTimeDeltaTest, Max) {
74   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
75             std::max(QuicTime::Delta::FromMicroseconds(1000),
76                      QuicTime::Delta::FromMicroseconds(2000)));
77 }
78 
TEST_F(QuicTimeDeltaTest,NotEqual)79 TEST_F(QuicTimeDeltaTest, NotEqual) {
80   EXPECT_TRUE(QuicTime::Delta::FromSeconds(0) !=
81               QuicTime::Delta::FromSeconds(1));
82   EXPECT_FALSE(QuicTime::Delta::FromSeconds(0) !=
83                QuicTime::Delta::FromSeconds(0));
84 }
85 
TEST_F(QuicTimeDeltaTest,DebuggingValue)86 TEST_F(QuicTimeDeltaTest, DebuggingValue) {
87   const QuicTime::Delta one_us = QuicTime::Delta::FromMicroseconds(1);
88   const QuicTime::Delta one_ms = QuicTime::Delta::FromMilliseconds(1);
89   const QuicTime::Delta one_s = QuicTime::Delta::FromSeconds(1);
90 
91   EXPECT_EQ("1s", one_s.ToDebuggingValue());
92   EXPECT_EQ("3s", (3 * one_s).ToDebuggingValue());
93   EXPECT_EQ("1ms", one_ms.ToDebuggingValue());
94   EXPECT_EQ("3ms", (3 * one_ms).ToDebuggingValue());
95   EXPECT_EQ("1us", one_us.ToDebuggingValue());
96   EXPECT_EQ("3us", (3 * one_us).ToDebuggingValue());
97 
98   EXPECT_EQ("3001us", (3 * one_ms + one_us).ToDebuggingValue());
99   EXPECT_EQ("3001ms", (3 * one_s + one_ms).ToDebuggingValue());
100   EXPECT_EQ("3000001us", (3 * one_s + one_us).ToDebuggingValue());
101 }
102 
103 class QuicTimeTest : public QuicTest {
104  protected:
105   MockClock clock_;
106 };
107 
TEST_F(QuicTimeTest,Initialized)108 TEST_F(QuicTimeTest, Initialized) {
109   EXPECT_FALSE(QuicTime::Zero().IsInitialized());
110   EXPECT_TRUE((QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(1))
111                   .IsInitialized());
112 }
113 
TEST_F(QuicTimeTest,CopyConstruct)114 TEST_F(QuicTimeTest, CopyConstruct) {
115   QuicTime time_1 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1234);
116   EXPECT_NE(time_1, QuicTime(QuicTime::Zero()));
117   EXPECT_EQ(time_1, QuicTime(time_1));
118 }
119 
TEST_F(QuicTimeTest,CopyAssignment)120 TEST_F(QuicTimeTest, CopyAssignment) {
121   QuicTime time_1 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1234);
122   QuicTime time_2 = QuicTime::Zero();
123   EXPECT_NE(time_1, time_2);
124   time_2 = time_1;
125   EXPECT_EQ(time_1, time_2);
126 }
127 
TEST_F(QuicTimeTest,Add)128 TEST_F(QuicTimeTest, Add) {
129   QuicTime time_1 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1);
130   QuicTime time_2 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(2);
131 
132   QuicTime::Delta diff = time_2 - time_1;
133 
134   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), diff);
135   EXPECT_EQ(1000, diff.ToMicroseconds());
136   EXPECT_EQ(1, diff.ToMilliseconds());
137 }
138 
TEST_F(QuicTimeTest,Subtract)139 TEST_F(QuicTimeTest, Subtract) {
140   QuicTime time_1 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1);
141   QuicTime time_2 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(2);
142 
143   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), time_2 - time_1);
144 }
145 
TEST_F(QuicTimeTest,SubtractDelta)146 TEST_F(QuicTimeTest, SubtractDelta) {
147   QuicTime time = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(2);
148   EXPECT_EQ(QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1),
149             time - QuicTime::Delta::FromMilliseconds(1));
150 }
151 
TEST_F(QuicTimeTest,Max)152 TEST_F(QuicTimeTest, Max) {
153   QuicTime time_1 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(1);
154   QuicTime time_2 = QuicTime::Zero() + QuicTime::Delta::FromMilliseconds(2);
155 
156   EXPECT_EQ(time_2, std::max(time_1, time_2));
157 }
158 
TEST_F(QuicTimeTest,MockClock)159 TEST_F(QuicTimeTest, MockClock) {
160   clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
161 
162   QuicTime now = clock_.ApproximateNow();
163   QuicTime time = QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(1000);
164 
165   EXPECT_EQ(now, time);
166 
167   clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1));
168   now = clock_.ApproximateNow();
169 
170   EXPECT_NE(now, time);
171 
172   time = time + QuicTime::Delta::FromMilliseconds(1);
173   EXPECT_EQ(now, time);
174 }
175 
TEST_F(QuicTimeTest,LE)176 TEST_F(QuicTimeTest, LE) {
177   const QuicTime zero = QuicTime::Zero();
178   const QuicTime one = zero + QuicTime::Delta::FromSeconds(1);
179   EXPECT_TRUE(zero <= zero);
180   EXPECT_TRUE(zero <= one);
181   EXPECT_TRUE(one <= one);
182   EXPECT_FALSE(one <= zero);
183 }
184 
185 }  // namespace test
186 }  // namespace quic
187