// Copyright 2020 The Chromium OS 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 <functional>

#include <gtest/gtest.h>

#include "dlcservice/unique_queue.h"

namespace dlcservice {

TEST(UniqueQueueTest, Clear) {
  UniqueQueue<int, std::hash<int>> unique_queue;
  unique_queue.Push(1);
  EXPECT_FALSE(unique_queue.Empty());
  unique_queue.Clear();
  EXPECT_TRUE(unique_queue.Empty());
}

TEST(UniqueQueueTest, Has) {
  UniqueQueue<int, std::hash<int>> unique_queue;
  EXPECT_FALSE(unique_queue.Has(1));
  EXPECT_FALSE(unique_queue.Has(2));

  unique_queue.Push(1);
  EXPECT_TRUE(unique_queue.Has(1));
  EXPECT_FALSE(unique_queue.Has(2));

  unique_queue.Push(2);
  EXPECT_TRUE(unique_queue.Has(1));
  EXPECT_TRUE(unique_queue.Has(2));
}

TEST(UniqueQueueTest, ActuallyUnique) {
  UniqueQueue<int, std::hash<int>> unique_queue;
  unique_queue.Push(1);
  unique_queue.Push(1);
  unique_queue.Pop();
  EXPECT_TRUE(unique_queue.Empty());
}

TEST(UniqueQueueTest, Erase) {
  UniqueQueue<int, std::hash<int>> unique_queue;
  unique_queue.Push(1);
  unique_queue.Push(2);
  unique_queue.Erase(1);
  EXPECT_EQ(2, unique_queue.Peek());
}

}  // namespace dlcservice
