|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "net/quic/quic_time.h" | 
|  | #include "net/quic/test_tools/mock_clock.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace net { | 
|  | namespace test { | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Zero) { | 
|  | EXPECT_TRUE(QuicTime::Delta::Zero().IsZero()); | 
|  | EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite()); | 
|  | EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsZero()); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Infinite) { | 
|  | EXPECT_TRUE(QuicTime::Delta::Infinite().IsInfinite()); | 
|  | EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite()); | 
|  | EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsInfinite()); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, FromTo) { | 
|  | EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), | 
|  | QuicTime::Delta::FromMicroseconds(1000)); | 
|  | EXPECT_EQ(QuicTime::Delta::FromSeconds(1), | 
|  | QuicTime::Delta::FromMilliseconds(1000)); | 
|  | EXPECT_EQ(QuicTime::Delta::FromSeconds(1), | 
|  | QuicTime::Delta::FromMicroseconds(1000000)); | 
|  |  | 
|  | EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds()); | 
|  | EXPECT_EQ(2, QuicTime::Delta::FromMilliseconds(2000).ToSeconds()); | 
|  | EXPECT_EQ(1000, QuicTime::Delta::FromMilliseconds(1).ToMicroseconds()); | 
|  | EXPECT_EQ(1, QuicTime::Delta::FromMicroseconds(1000).ToMilliseconds()); | 
|  | EXPECT_EQ(QuicTime::Delta::FromMilliseconds(2000).ToMicroseconds(), | 
|  | QuicTime::Delta::FromSeconds(2).ToMicroseconds()); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Add) { | 
|  | EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000), | 
|  | QuicTime::Delta::Zero().Add(QuicTime::Delta::FromMilliseconds(2))); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Subtract) { | 
|  | EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1000), | 
|  | QuicTime::Delta::FromMilliseconds(2).Subtract( | 
|  | QuicTime::Delta::FromMilliseconds(1))); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Multiply) { | 
|  | int i = 2; | 
|  | EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000), | 
|  | QuicTime::Delta::FromMilliseconds(2).Multiply(i)); | 
|  | double d = 2; | 
|  | EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000), | 
|  | QuicTime::Delta::FromMilliseconds(2).Multiply(d)); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, Max) { | 
|  | EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000), | 
|  | QuicTime::Delta::Max(QuicTime::Delta::FromMicroseconds(1000), | 
|  | QuicTime::Delta::FromMicroseconds(2000))); | 
|  | } | 
|  |  | 
|  | TEST(QuicTimeDeltaTest, NotEqual) { | 
|  | EXPECT_TRUE(QuicTime::Delta::FromSeconds(0) != | 
|  | QuicTime::Delta::FromSeconds(1)); | 
|  | EXPECT_FALSE(QuicTime::Delta::FromSeconds(0) != | 
|  | QuicTime::Delta::FromSeconds(0)); | 
|  | } | 
|  |  | 
|  | class QuicTimeTest : public ::testing::Test { | 
|  | protected: | 
|  | MockClock clock_; | 
|  | }; | 
|  |  | 
|  | TEST_F(QuicTimeTest, Initialized) { | 
|  | EXPECT_FALSE(QuicTime::Zero().IsInitialized()); | 
|  | EXPECT_TRUE(QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMicroseconds(1)).IsInitialized()); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, Add) { | 
|  | QuicTime time_1 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(1)); | 
|  | QuicTime time_2 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(2)); | 
|  |  | 
|  | QuicTime::Delta diff = time_2.Subtract(time_1); | 
|  |  | 
|  | EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), diff); | 
|  | EXPECT_EQ(1000, diff.ToMicroseconds()); | 
|  | EXPECT_EQ(1, diff.ToMilliseconds()); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, Subtract) { | 
|  | QuicTime time_1 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(1)); | 
|  | QuicTime time_2 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(2)); | 
|  |  | 
|  | EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1), time_2.Subtract(time_1)); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, SubtractDelta) { | 
|  | QuicTime time = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(2)); | 
|  | EXPECT_EQ(QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1)), | 
|  | time.Subtract(QuicTime::Delta::FromMilliseconds(1))); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, Max) { | 
|  | QuicTime time_1 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(1)); | 
|  | QuicTime time_2 = QuicTime::Zero().Add( | 
|  | QuicTime::Delta::FromMilliseconds(2)); | 
|  |  | 
|  | EXPECT_EQ(time_2, QuicTime::Max(time_1, time_2)); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, MockClock) { | 
|  | clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 
|  |  | 
|  | QuicTime now = clock_.ApproximateNow(); | 
|  | QuicTime time = QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(1000)); | 
|  |  | 
|  | EXPECT_EQ(now, time); | 
|  |  | 
|  | clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); | 
|  | now = clock_.ApproximateNow(); | 
|  |  | 
|  | EXPECT_NE(now, time); | 
|  |  | 
|  | time = time.Add(QuicTime::Delta::FromMilliseconds(1)); | 
|  | EXPECT_EQ(now, time); | 
|  | } | 
|  |  | 
|  | TEST_F(QuicTimeTest, LE) { | 
|  | const QuicTime zero = QuicTime::Zero(); | 
|  | const QuicTime one  = zero.Add(QuicTime::Delta::FromSeconds(1)); | 
|  | EXPECT_TRUE(zero <= zero); | 
|  | EXPECT_TRUE(zero <= one); | 
|  | EXPECT_TRUE(one <= one); | 
|  | EXPECT_FALSE(one <= zero); | 
|  | } | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace net |