1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/linked_list.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace { 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass Node : public LinkNode<Node> { 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott explicit Node(int id) : id_(id) {} 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int id() const { return id_; } 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int id_; 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MultipleInheritanceNodeBase { 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MultipleInheritanceNodeBase() : field_taking_up_space_(0) {} 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int field_taking_up_space_; 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MultipleInheritanceNode : public MultipleInheritanceNodeBase, 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public LinkNode<MultipleInheritanceNode> { 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MultipleInheritanceNode() {} 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Checks that when iterating |list| (either from head to tail, or from 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// tail to head, as determined by |forward|), we get back |node_ids|, 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// which is an array of size |num_nodes|. 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid ExpectListContentsForDirection(const LinkedList<Node>& list, 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int num_nodes, const int* node_ids, bool forward) { 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int i = 0; 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott for (const LinkNode<Node>* node = (forward ? list.head() : list.tail()); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott node != list.end(); 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott node = (forward ? node->next() : node->previous())) { 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_LT(i, num_nodes); 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int index_of_id = forward ? i : num_nodes - i - 1; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(node_ids[index_of_id], node->value()->id()); 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++i; 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(num_nodes, i); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid ExpectListContents(const LinkedList<Node>& list, 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int num_nodes, 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int* node_ids) { 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SCOPED_TRACE("Iterating forward (from head to tail)"); 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContentsForDirection(list, num_nodes, node_ids, true); 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SCOPED_TRACE("Iterating backward (from tail to head)"); 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContentsForDirection(list, num_nodes, node_ids, false); 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, Empty) { 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LinkedList<Node> list; 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(list.end(), list.head()); 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(list.end(), list.tail()); 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, 0, NULL); 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, Append) { 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LinkedList<Node> list; 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, 0, NULL); 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n1(1); 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n1); 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.tail()); 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1}; 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n2(2); 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n2); 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.tail()); 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2}; 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n3(3); 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n3); 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n3, list.tail()); 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 3}; 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, RemoveFromList) { 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LinkedList<Node> list; 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n1(1); 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n2(2); 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n3(3); 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n4(4); 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n5(5); 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n1); 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n2); 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n3); 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n4); 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n5); 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n5, list.tail()); 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 3, 4, 5}; 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Remove from the middle. 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n3.RemoveFromList(); 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n5, list.tail()); 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 4, 5}; 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Remove from the tail. 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n5.RemoveFromList(); 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n4, list.tail()); 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 4}; 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Remove from the head. 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n1.RemoveFromList(); 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.head()); 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n4, list.tail()); 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {2, 4}; 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Empty the list. 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n2.RemoveFromList(); 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n4.RemoveFromList(); 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, 0, NULL); 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(list.end(), list.head()); 164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(list.end(), list.tail()); 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Fill the list once again. 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n1); 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n2); 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n3); 170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n4); 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n5); 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n5, list.tail()); 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 3, 4, 5}; 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, InsertBefore) { 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LinkedList<Node> list; 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n1(1); 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n2(2); 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n3(3); 187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n4(4); 188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n1); 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n2); 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.tail()); 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2}; 196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n3.InsertBefore(&n2); 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.tail()); 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 3, 2}; 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n4.InsertBefore(&n1); 209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n4, list.head()); 211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.tail()); 212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {4, 1, 3, 2}; 214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, InsertAfter) { 219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott LinkedList<Node> list; 220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n1(1); 222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n2(2); 223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n3(3); 224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Node n4(4); 225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n1); 227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott list.Append(&n2); 228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n2, list.tail()); 231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2}; 233c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 234c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 235c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 236c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n3.InsertAfter(&n2); 237c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 238c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 239c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n3, list.tail()); 240c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 2, 3}; 242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott n4.InsertAfter(&n1); 246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n1, list.head()); 248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&n3, list.tail()); 249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const int expected[] = {1, 4, 2, 3}; 251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ExpectListContents(list, arraysize(expected), expected); 252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(LinkedList, MultipleInheritanceNode) { 256c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott MultipleInheritanceNode node; 257c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(&node, node.value()); 258c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 259c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 260c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace 261c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 262