list-unittest.cc 2.21 KB
Newer Older
1 2 3 4
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
#include "src/heap/list.h"
6 7 8
#include "testing/gtest-support.h"

namespace v8 {
9 10
namespace internal {
namespace heap {
11 12 13

class TestChunk {
 public:
14 15
  heap::ListNode<TestChunk>& list_node() { return list_node_; }
  heap::ListNode<TestChunk> list_node_;
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
};

TEST(List, InsertAtTailAndRemove) {
  List<TestChunk> list;
  EXPECT_TRUE(list.Empty());
  TestChunk t1;
  list.PushBack(&t1);
  EXPECT_FALSE(list.Empty());
  EXPECT_TRUE(list.Contains(&t1));
  list.Remove(&t1);
  EXPECT_TRUE(list.Empty());
}

TEST(List, InsertAtHeadAndRemove) {
  List<TestChunk> list;
  EXPECT_TRUE(list.Empty());
  TestChunk t1;
  list.PushFront(&t1);
  EXPECT_FALSE(list.Empty());
  list.Remove(&t1);
  EXPECT_TRUE(list.Empty());
}

TEST(List, InsertMultipleAtTailAndRemoveFromTail) {
  List<TestChunk> list;
  EXPECT_TRUE(list.Empty());
  const int kSize = 10;
  TestChunk chunks[kSize];
  for (int i = 0; i < kSize; i++) {
    list.PushBack(&chunks[i]);
    EXPECT_EQ(list.back(), &chunks[i]);
  }
  for (int i = kSize - 1; i > 0; i--) {
    list.Remove(&chunks[i]);
    EXPECT_EQ(list.back(), &chunks[i - 1]);
  }

  list.Remove(&chunks[0]);
  EXPECT_TRUE(list.Empty());
}

TEST(List, InsertMultipleAtHeadAndRemoveFromHead) {
  List<TestChunk> list;
  EXPECT_TRUE(list.Empty());
  const int kSize = 10;
  TestChunk chunks[kSize];
  for (int i = 0; i < kSize; i++) {
    list.PushFront(&chunks[i]);
    EXPECT_EQ(list.front(), &chunks[i]);
  }
  for (int i = kSize - 1; i > 0; i--) {
    list.Remove(&chunks[i]);
    EXPECT_EQ(list.front(), &chunks[i - 1]);
  }

  list.Remove(&chunks[0]);
  EXPECT_TRUE(list.Empty());
}

TEST(List, InsertMultipleAtTailAndRemoveFromMiddle) {
  List<TestChunk> list;
  EXPECT_TRUE(list.Empty());
  const int kSize = 10;
  TestChunk chunks[kSize];
  for (int i = 0; i < kSize; i++) {
    list.PushBack(&chunks[i]);
    EXPECT_EQ(list.back(), &chunks[i]);
  }
  int i, j;
  for (i = kSize / 2 - 1, j = kSize / 2; i >= 0; i--, j++) {
    list.Remove(&chunks[i]);
    list.Remove(&chunks[j]);
  }
  EXPECT_TRUE(list.Empty());
}

92 93
}  // namespace heap
}  // namespace internal
94
}  // namespace v8