| // Copyright (c) 2019 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/third_party/quiche/src/quic/core/quic_packet_number.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" | |
| namespace quic { | |
| namespace test { | |
| namespace { | |
| TEST(QuicPacketNumberTest, BasicTest) { | |
| QuicPacketNumber num; | |
| EXPECT_FALSE(num.IsInitialized()); | |
| QuicPacketNumber num2(10); | |
| EXPECT_TRUE(num2.IsInitialized()); | |
| EXPECT_EQ(10u, num2.ToUint64()); | |
| EXPECT_EQ(10u, num2.Hash()); | |
| num2.Clear(); | |
| EXPECT_FALSE(num2.IsInitialized()); | |
| if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) { | |
| QuicPacketNumber num3(std::numeric_limits<uint64_t>::max()); | |
| EXPECT_TRUE(num3.IsInitialized()); | |
| EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.ToUint64()); | |
| EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.Hash()); | |
| num3.Clear(); | |
| EXPECT_FALSE(num3.IsInitialized()); | |
| return; | |
| } | |
| QuicPacketNumber num4(0); | |
| EXPECT_TRUE(num4.IsInitialized()); | |
| EXPECT_EQ(0u, num4.ToUint64()); | |
| EXPECT_EQ(0u, num4.Hash()); | |
| num4.Clear(); | |
| EXPECT_FALSE(num4.IsInitialized()); | |
| } | |
| TEST(QuicPacketNumberTest, Operators) { | |
| QuicPacketNumber num(100); | |
| EXPECT_EQ(QuicPacketNumber(100), num++); | |
| EXPECT_EQ(QuicPacketNumber(101), num); | |
| EXPECT_EQ(QuicPacketNumber(101), num--); | |
| EXPECT_EQ(QuicPacketNumber(100), num); | |
| EXPECT_EQ(QuicPacketNumber(101), ++num); | |
| EXPECT_EQ(QuicPacketNumber(100), --num); | |
| if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) { | |
| QuicPacketNumber num2(std::numeric_limits<uint64_t>::max()); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), num2--); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2), | |
| --num2); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2), | |
| num2++); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2); | |
| EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), ++num2); | |
| return; | |
| } | |
| QuicPacketNumber num3(0); | |
| EXPECT_EQ(QuicPacketNumber(0), num3++); | |
| EXPECT_EQ(QuicPacketNumber(1), num3); | |
| EXPECT_EQ(QuicPacketNumber(2), ++num3); | |
| EXPECT_EQ(QuicPacketNumber(2), num3--); | |
| EXPECT_EQ(QuicPacketNumber(1), num3); | |
| EXPECT_EQ(QuicPacketNumber(0), --num3); | |
| } | |
| } // namespace | |
| } // namespace test | |
| } // namespace quic |