1 // 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 "quiche/quic/core/quic_packet_number.h"
6
7 #include "quiche/quic/platform/api/quic_flags.h"
8 #include "quiche/quic/platform/api/quic_test.h"
9
10 namespace quic {
11
12 namespace test {
13
14 namespace {
15
TEST(QuicPacketNumberTest,BasicTest)16 TEST(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.UpdateMax(num);
25 EXPECT_EQ(10u, num2.ToUint64());
26 num2.UpdateMax(QuicPacketNumber(9));
27 EXPECT_EQ(10u, num2.ToUint64());
28 num2.UpdateMax(QuicPacketNumber(11));
29 EXPECT_EQ(11u, num2.ToUint64());
30 num2.Clear();
31 EXPECT_FALSE(num2.IsInitialized());
32 num2.UpdateMax(QuicPacketNumber(9));
33 EXPECT_EQ(9u, num2.ToUint64());
34
35 QuicPacketNumber num4(0);
36 EXPECT_TRUE(num4.IsInitialized());
37 EXPECT_EQ(0u, num4.ToUint64());
38 EXPECT_EQ(0u, num4.Hash());
39 num4.Clear();
40 EXPECT_FALSE(num4.IsInitialized());
41 }
42
TEST(QuicPacketNumberTest,Operators)43 TEST(QuicPacketNumberTest, Operators) {
44 QuicPacketNumber num(100);
45 EXPECT_EQ(QuicPacketNumber(100), num++);
46 EXPECT_EQ(QuicPacketNumber(101), num);
47 EXPECT_EQ(QuicPacketNumber(101), num--);
48 EXPECT_EQ(QuicPacketNumber(100), num);
49
50 EXPECT_EQ(QuicPacketNumber(101), ++num);
51 EXPECT_EQ(QuicPacketNumber(100), --num);
52
53 QuicPacketNumber num3(0);
54 EXPECT_EQ(QuicPacketNumber(0), num3++);
55 EXPECT_EQ(QuicPacketNumber(1), num3);
56 EXPECT_EQ(QuicPacketNumber(2), ++num3);
57
58 EXPECT_EQ(QuicPacketNumber(2), num3--);
59 EXPECT_EQ(QuicPacketNumber(1), num3);
60 EXPECT_EQ(QuicPacketNumber(0), --num3);
61 }
62
63 } // namespace
64
65 } // namespace test
66
67 } // namespace quic
68