// 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 "quic/core/quic_packet_number.h"

#include "quic/platform/api/quic_flags.h"
#include "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.UpdateMax(num);
  EXPECT_EQ(10u, num2.ToUint64());
  num2.UpdateMax(QuicPacketNumber(9));
  EXPECT_EQ(10u, num2.ToUint64());
  num2.UpdateMax(QuicPacketNumber(11));
  EXPECT_EQ(11u, num2.ToUint64());
  num2.Clear();
  EXPECT_FALSE(num2.IsInitialized());
  num2.UpdateMax(QuicPacketNumber(9));
  EXPECT_EQ(9u, num2.ToUint64());

  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);

  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
