//===- unittests/ADT/IListBaseTest.cpp - ilist_base unit tests ------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "llvm/ADT/ilist_base.h"
#include "gtest/gtest.h"

using namespace llvm;

namespace {

// Test fixture.
template <typename T> class IListBaseTest : public ::testing::Test {};

// Test variants with the same test.
typedef ::testing::Types<ilist_base<false>, ilist_base<true>>
    IListBaseTestTypes;
TYPED_TEST_CASE(IListBaseTest, IListBaseTestTypes);

TYPED_TEST(IListBaseTest, insertBeforeImpl) {
  typedef TypeParam list_base_type;
  typedef typename list_base_type::node_base_type node_base_type;

  node_base_type S, A, B;

  // [S] <-> [S]
  S.setPrev(&S);
  S.setNext(&S);

  // [S] <-> A <-> [S]
  list_base_type::insertBeforeImpl(S, A);
  EXPECT_EQ(&A, S.getPrev());
  EXPECT_EQ(&S, A.getPrev());
  EXPECT_EQ(&A, S.getNext());
  EXPECT_EQ(&S, A.getNext());

  // [S] <-> A <-> B <-> [S]
  list_base_type::insertBeforeImpl(S, B);
  EXPECT_EQ(&B, S.getPrev());
  EXPECT_EQ(&A, B.getPrev());
  EXPECT_EQ(&S, A.getPrev());
  EXPECT_EQ(&A, S.getNext());
  EXPECT_EQ(&B, A.getNext());
  EXPECT_EQ(&S, B.getNext());
}

TYPED_TEST(IListBaseTest, removeImpl) {
  typedef TypeParam list_base_type;
  typedef typename list_base_type::node_base_type node_base_type;

  node_base_type S, A, B;

  // [S] <-> A <-> B <-> [S]
  S.setPrev(&S);
  S.setNext(&S);
  list_base_type::insertBeforeImpl(S, A);
  list_base_type::insertBeforeImpl(S, B);

  // [S] <-> B <-> [S]
  list_base_type::removeImpl(A);
  EXPECT_EQ(&B, S.getPrev());
  EXPECT_EQ(&S, B.getPrev());
  EXPECT_EQ(&B, S.getNext());
  EXPECT_EQ(&S, B.getNext());
  EXPECT_EQ(nullptr, A.getPrev());
  EXPECT_EQ(nullptr, A.getNext());

  // [S] <-> [S]
  list_base_type::removeImpl(B);
  EXPECT_EQ(&S, S.getPrev());
  EXPECT_EQ(&S, S.getNext());
  EXPECT_EQ(nullptr, B.getPrev());
  EXPECT_EQ(nullptr, B.getNext());
}

TYPED_TEST(IListBaseTest, removeRangeImpl) {
  typedef TypeParam list_base_type;
  typedef typename list_base_type::node_base_type node_base_type;

  node_base_type S, A, B, C, D;

  // [S] <-> A <-> B <-> C <-> D <-> [S]
  S.setPrev(&S);
  S.setNext(&S);
  list_base_type::insertBeforeImpl(S, A);
  list_base_type::insertBeforeImpl(S, B);
  list_base_type::insertBeforeImpl(S, C);
  list_base_type::insertBeforeImpl(S, D);

  // [S] <-> A <-> D <-> [S]
  list_base_type::removeRangeImpl(B, D);
  EXPECT_EQ(&D, S.getPrev());
  EXPECT_EQ(&A, D.getPrev());
  EXPECT_EQ(&S, A.getPrev());
  EXPECT_EQ(&A, S.getNext());
  EXPECT_EQ(&D, A.getNext());
  EXPECT_EQ(&S, D.getNext());
  EXPECT_EQ(nullptr, B.getPrev());
  EXPECT_EQ(nullptr, C.getNext());
}

TYPED_TEST(IListBaseTest, removeRangeImplAllButSentinel) {
  typedef TypeParam list_base_type;
  typedef typename list_base_type::node_base_type node_base_type;

  node_base_type S, A, B;

  // [S] <-> A <-> B <-> [S]
  S.setPrev(&S);
  S.setNext(&S);
  list_base_type::insertBeforeImpl(S, A);
  list_base_type::insertBeforeImpl(S, B);

  // [S] <-> [S]
  list_base_type::removeRangeImpl(A, S);
  EXPECT_EQ(&S, S.getPrev());
  EXPECT_EQ(&S, S.getNext());
  EXPECT_EQ(nullptr, A.getPrev());
  EXPECT_EQ(nullptr, B.getNext());
}

TYPED_TEST(IListBaseTest, transferBeforeImpl) {
  typedef TypeParam list_base_type;
  typedef typename list_base_type::node_base_type node_base_type;

  node_base_type S1, S2, A, B, C, D, E;

  // [S1] <-> A <-> B <-> C <-> [S1]
  S1.setPrev(&S1);
  S1.setNext(&S1);
  list_base_type::insertBeforeImpl(S1, A);
  list_base_type::insertBeforeImpl(S1, B);
  list_base_type::insertBeforeImpl(S1, C);

  // [S2] <-> D <-> E <-> [S2]
  S2.setPrev(&S2);
  S2.setNext(&S2);
  list_base_type::insertBeforeImpl(S2, D);
  list_base_type::insertBeforeImpl(S2, E);

  // [S1] <-> C <-> [S1]
  list_base_type::transferBeforeImpl(D, A, C);
  EXPECT_EQ(&C, S1.getPrev());
  EXPECT_EQ(&S1, C.getPrev());
  EXPECT_EQ(&C, S1.getNext());
  EXPECT_EQ(&S1, C.getNext());

  // [S2] <-> A <-> B <-> D <-> E <-> [S2]
  EXPECT_EQ(&E, S2.getPrev());
  EXPECT_EQ(&D, E.getPrev());
  EXPECT_EQ(&B, D.getPrev());
  EXPECT_EQ(&A, B.getPrev());
  EXPECT_EQ(&S2, A.getPrev());
  EXPECT_EQ(&A, S2.getNext());
  EXPECT_EQ(&B, A.getNext());
  EXPECT_EQ(&D, B.getNext());
  EXPECT_EQ(&E, D.getNext());
  EXPECT_EQ(&S2, E.getNext());
}

} // end namespace
