Line data Source code
1 : // Copyright 2018 the V8 project 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 "src/base/list.h"
6 : #include "testing/gtest-support.h"
7 :
8 : namespace v8 {
9 : namespace base {
10 :
11 : class TestChunk {
12 : public:
13 : base::ListNode<TestChunk>& list_node() { return list_node_; }
14 : base::ListNode<TestChunk> list_node_;
15 : };
16 :
17 15128 : TEST(List, InsertAtTailAndRemove) {
18 : List<TestChunk> list;
19 : EXPECT_TRUE(list.Empty());
20 : TestChunk t1;
21 : list.PushBack(&t1);
22 2 : EXPECT_FALSE(list.Empty());
23 2 : EXPECT_TRUE(list.Contains(&t1));
24 1 : list.Remove(&t1);
25 1 : EXPECT_TRUE(list.Empty());
26 1 : }
27 :
28 15128 : TEST(List, InsertAtHeadAndRemove) {
29 : List<TestChunk> list;
30 : EXPECT_TRUE(list.Empty());
31 : TestChunk t1;
32 : list.PushFront(&t1);
33 2 : EXPECT_FALSE(list.Empty());
34 1 : list.Remove(&t1);
35 1 : EXPECT_TRUE(list.Empty());
36 1 : }
37 :
38 15128 : TEST(List, InsertMultipleAtTailAndRemoveFromTail) {
39 : List<TestChunk> list;
40 : EXPECT_TRUE(list.Empty());
41 : const int kSize = 10;
42 11 : TestChunk chunks[kSize];
43 10 : for (int i = 0; i < kSize; i++) {
44 10 : list.PushBack(&chunks[i]);
45 20 : EXPECT_EQ(list.back(), &chunks[i]);
46 : }
47 10 : for (int i = kSize - 1; i > 0; i--) {
48 9 : list.Remove(&chunks[i]);
49 18 : EXPECT_EQ(list.back(), &chunks[i - 1]);
50 : }
51 :
52 1 : list.Remove(&chunks[0]);
53 1 : EXPECT_TRUE(list.Empty());
54 1 : }
55 :
56 15128 : TEST(List, InsertMultipleAtHeadAndRemoveFromHead) {
57 : List<TestChunk> list;
58 : EXPECT_TRUE(list.Empty());
59 : const int kSize = 10;
60 11 : TestChunk chunks[kSize];
61 10 : for (int i = 0; i < kSize; i++) {
62 10 : list.PushFront(&chunks[i]);
63 20 : EXPECT_EQ(list.front(), &chunks[i]);
64 : }
65 10 : for (int i = kSize - 1; i > 0; i--) {
66 9 : list.Remove(&chunks[i]);
67 18 : EXPECT_EQ(list.front(), &chunks[i - 1]);
68 : }
69 :
70 1 : list.Remove(&chunks[0]);
71 1 : EXPECT_TRUE(list.Empty());
72 1 : }
73 :
74 15128 : TEST(List, InsertMultipleAtTailAndRemoveFromMiddle) {
75 : List<TestChunk> list;
76 : EXPECT_TRUE(list.Empty());
77 : const int kSize = 10;
78 11 : TestChunk chunks[kSize];
79 10 : for (int i = 0; i < kSize; i++) {
80 10 : list.PushBack(&chunks[i]);
81 20 : EXPECT_EQ(list.back(), &chunks[i]);
82 : }
83 : int i, j;
84 5 : for (i = kSize / 2 - 1, j = kSize / 2; i >= 0; i--, j++) {
85 5 : list.Remove(&chunks[i]);
86 5 : list.Remove(&chunks[j]);
87 : }
88 1 : EXPECT_TRUE(list.Empty());
89 1 : }
90 :
91 : } // namespace base
92 9075 : } // namespace v8
|