blob: 5e32b8c9deecbc1867c5727a040e6cc8b47f4c66 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2019 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 "net/third_party/quiche/src/quic/core/quic_packet_number.h"
6
7#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
8#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
9
10namespace quic {
11
12namespace test {
13
14namespace {
15
16TEST(QuicPacketNumberTest, BasicTest) {
17 QuicPacketNumber num;
18 EXPECT_FALSE(num.IsInitialized());
19
20 QuicPacketNumber num2(10);
21 EXPECT_TRUE(num2.IsInitialized());
22 EXPECT_EQ(10u, num2.ToUint64());
23 EXPECT_EQ(10u, num2.Hash());
24 num2.Clear();
25 EXPECT_FALSE(num2.IsInitialized());
26
27 if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
28 QuicPacketNumber num3(std::numeric_limits<uint64_t>::max());
29 EXPECT_TRUE(num3.IsInitialized());
30 EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.ToUint64());
31 EXPECT_EQ(std::numeric_limits<uint64_t>::max(), num3.Hash());
32 num3.Clear();
33 EXPECT_FALSE(num3.IsInitialized());
34 return;
35 }
36
37 QuicPacketNumber num4(0);
38 EXPECT_TRUE(num4.IsInitialized());
39 EXPECT_EQ(0u, num4.ToUint64());
40 EXPECT_EQ(0u, num4.Hash());
41 num4.Clear();
42 EXPECT_FALSE(num4.IsInitialized());
43}
44
45TEST(QuicPacketNumberTest, Operators) {
46 QuicPacketNumber num(100);
47 EXPECT_EQ(QuicPacketNumber(100), num++);
48 EXPECT_EQ(QuicPacketNumber(101), num);
49 EXPECT_EQ(QuicPacketNumber(101), num--);
50 EXPECT_EQ(QuicPacketNumber(100), num);
51
52 EXPECT_EQ(QuicPacketNumber(101), ++num);
53 EXPECT_EQ(QuicPacketNumber(100), --num);
54
55 if (!GetQuicRestartFlag(quic_uint64max_uninitialized_pn)) {
56 QuicPacketNumber num2(std::numeric_limits<uint64_t>::max());
57 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), num2--);
58 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2);
59 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2),
60 --num2);
61
62 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 2),
63 num2++);
64 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max() - 1), num2);
65 EXPECT_EQ(QuicPacketNumber(std::numeric_limits<uint64_t>::max()), ++num2);
66 return;
67 }
68
69 QuicPacketNumber num3(0);
70 EXPECT_EQ(QuicPacketNumber(0), num3++);
71 EXPECT_EQ(QuicPacketNumber(1), num3);
72 EXPECT_EQ(QuicPacketNumber(2), ++num3);
73
74 EXPECT_EQ(QuicPacketNumber(2), num3--);
75 EXPECT_EQ(QuicPacketNumber(1), num3);
76 EXPECT_EQ(QuicPacketNumber(0), --num3);
77}
78
79} // namespace
80
81} // namespace test
82
83} // namespace quic