]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/test_xlist.cc
4 #include "include/xlist.h"
6 #include "gtest/gtest.h"
10 xlist
<Item
*>::item xitem
;
13 explicit Item(int v
) :
19 class XlistTest
: public testing::Test
22 typedef xlist
<Item
*> ItemList
;
23 typedef std::vector
<Item
*> Items
;
24 typedef std::vector
<ItemList::item
*> Refs
;
26 // for filling up an ItemList
29 void SetUp() override
{
30 for (int i
= 0; i
< 13; i
++) {
31 items
.push_back(new Item(i
));
32 refs
.push_back(&items
.back()->xitem
);
35 void TearDown() override
{
36 for (Items::iterator i
= items
.begin(); i
!= items
.end(); ++i
) {
43 TEST_F(XlistTest
, capability
) {
45 ASSERT_TRUE(list
.empty());
46 ASSERT_EQ(list
.size(), 0);
48 std::copy(refs
.begin(), refs
.end(), std::back_inserter(list
));
49 ASSERT_EQ((size_t)list
.size(), refs
.size());
52 ASSERT_TRUE(list
.empty());
53 ASSERT_EQ(list
.size(), 0);
56 TEST_F(XlistTest
, traverse
) {
58 std::copy(refs
.begin(), refs
.end(), std::back_inserter(list
));
60 // advance until iterator::end()
62 for (ItemList::iterator i
= list
.begin(); !i
.end(); ++i
) {
63 ASSERT_EQ(*i
, items
[index
]);
66 // advance until i == v.end()
68 for (ItemList::iterator i
= list
.begin(); i
!= list
.end(); ++i
) {
69 ASSERT_EQ(*i
, items
[index
]);
75 TEST_F(XlistTest
, move_around
) {
76 Item
item1(42), item2(17);
79 // only a single element in the list
80 list
.push_back(&item1
.xitem
);
81 ASSERT_EQ(&item1
, list
.front());
82 ASSERT_EQ(&item1
, list
.back());
84 list
.push_back(&item2
.xitem
);
85 ASSERT_EQ(&item1
, list
.front());
86 ASSERT_EQ(&item2
, list
.back());
88 // move item2 to the front
89 list
.push_front(&item2
.xitem
);
90 ASSERT_EQ(&item2
, list
.front());
91 ASSERT_EQ(&item1
, list
.back());
94 list
.push_back(&item2
.xitem
);
95 ASSERT_EQ(&item1
, list
.front());
96 ASSERT_EQ(&item2
, list
.back());
101 TEST_F(XlistTest
, item_queries
) {
104 list
.push_back(&item
.xitem
);
106 ASSERT_TRUE(item
.xitem
.is_on_list());
107 ASSERT_EQ(&list
, item
.xitem
.get_list());
109 ASSERT_TRUE(item
.xitem
.remove_myself());
110 ASSERT_FALSE(item
.xitem
.is_on_list());
111 ASSERT_TRUE(item
.xitem
.get_list() == NULL
);
115 // compile-command: "cd .. ;
116 // make unittest_xlist &&