#include "util.h" #include "util-inl.h" #include "gtest/gtest.h" TEST(UtilTest, ListHead) { struct Item { node::ListNode node_; }; typedef node::ListHead List; List list; EXPECT_TRUE(list.IsEmpty()); Item one; EXPECT_TRUE(one.node_.IsEmpty()); list.PushBack(&one); EXPECT_FALSE(list.IsEmpty()); EXPECT_FALSE(one.node_.IsEmpty()); { List::Iterator it = list.begin(); EXPECT_NE(list.end(), it); EXPECT_EQ(&one, *it); ++it; EXPECT_FALSE(it != list.end()); // Iterator only implements != operator. } Item two; list.PushBack(&two); { List::Iterator it = list.begin(); EXPECT_NE(list.end(), it); EXPECT_EQ(&one, *it); ++it; EXPECT_NE(list.end(), it); EXPECT_EQ(&two, *it); ++it; EXPECT_FALSE(it != list.end()); // Iterator only implements != operator. } EXPECT_EQ(&one, list.PopFront()); EXPECT_TRUE(one.node_.IsEmpty()); EXPECT_FALSE(list.IsEmpty()); { List::Iterator it = list.begin(); EXPECT_NE(list.end(), it); EXPECT_EQ(&two, *it); ++it; EXPECT_FALSE(it != list.end()); // Iterator only implements != operator. } EXPECT_EQ(&two, list.PopFront()); EXPECT_TRUE(two.node_.IsEmpty()); EXPECT_TRUE(list.IsEmpty()); EXPECT_FALSE(list.begin() != list.end()); }