1 // Copyright (c) 2012 The Chromium 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.
5 #include "net/base/priority_queue.h"
9 #include "testing/gtest/include/gtest/gtest.h"
15 typedef PriorityQueue
<int>::Priority Priority
;
16 const Priority kPriorities
[] = { 2, 1, 2, 0, 4, 3, 1, 4, 0 };
17 const Priority kNumPriorities
= 5; // max(kPriorities) + 1
18 const size_t kNumElements
= arraysize(kPriorities
);
19 const int kFirstMinOrder
[kNumElements
] = { 3, 8, 1, 6, 0, 2, 5, 4, 7 };
20 const int kLastMaxOrderErase
[kNumElements
] = { 7, 4, 5, 2, 0, 6, 1, 8, 3 };
21 const int kFirstMaxOrder
[kNumElements
] = { 4, 7, 5, 0, 2, 1, 6, 3, 8 };
22 const int kLastMinOrder
[kNumElements
] = { 8, 3, 6, 1, 2, 0, 5, 7, 4 };
24 class PriorityQueueTest
: public testing::Test
{
26 PriorityQueueTest() : queue_(kNumPriorities
) {}
28 virtual void SetUp() OVERRIDE
{
30 for (size_t i
= 0; i
< kNumElements
; ++i
) {
31 EXPECT_EQ(i
, queue_
.size());
32 pointers_
[i
] = queue_
.Insert(static_cast<int>(i
), kPriorities
[i
]);
33 EXPECT_FALSE(queue_
.empty());
35 EXPECT_EQ(kNumElements
, queue_
.size());
39 EXPECT_TRUE(queue_
.empty());
40 EXPECT_EQ(0u, queue_
.size());
41 EXPECT_TRUE(queue_
.FirstMin().is_null());
42 EXPECT_TRUE(queue_
.LastMin().is_null());
43 EXPECT_TRUE(queue_
.FirstMax().is_null());
44 EXPECT_TRUE(queue_
.LastMax().is_null());
47 PriorityQueue
<int> queue_
;
48 PriorityQueue
<int>::Pointer pointers_
[kNumElements
];
51 TEST_F(PriorityQueueTest
, AddAndClear
) {
52 for (size_t i
= 0; i
< kNumElements
; ++i
) {
53 EXPECT_EQ(kPriorities
[i
], pointers_
[i
].priority());
54 EXPECT_EQ(static_cast<int>(i
), pointers_
[i
].value());
60 TEST_F(PriorityQueueTest
, FirstMinOrder
) {
61 for (size_t i
= 0; i
< kNumElements
; ++i
) {
62 EXPECT_EQ(kNumElements
- i
, queue_
.size());
64 EXPECT_TRUE(queue_
.FirstMin().Equals(pointers_
[kFirstMinOrder
[i
]]));
65 EXPECT_EQ(kFirstMinOrder
[i
], queue_
.FirstMin().value());
66 queue_
.Erase(queue_
.FirstMin());
71 TEST_F(PriorityQueueTest
, LastMinOrder
) {
72 for (size_t i
= 0; i
< kNumElements
; ++i
) {
73 EXPECT_EQ(kLastMinOrder
[i
], queue_
.LastMin().value());
74 queue_
.Erase(queue_
.LastMin());
79 TEST_F(PriorityQueueTest
, FirstMaxOrder
) {
80 PriorityQueue
<int>::Pointer p
= queue_
.FirstMax();
82 for (; !p
.is_null() && i
< kNumElements
;
83 p
= queue_
.GetNextTowardsLastMin(p
), ++i
) {
84 EXPECT_EQ(kFirstMaxOrder
[i
], p
.value());
86 EXPECT_TRUE(p
.is_null());
87 EXPECT_EQ(kNumElements
, i
);
92 TEST_F(PriorityQueueTest
, GetNextTowardsLastMinAndErase
) {
93 PriorityQueue
<int>::Pointer current
= queue_
.FirstMax();
94 for (size_t i
= 0; i
< kNumElements
; ++i
) {
95 EXPECT_FALSE(current
.is_null());
96 EXPECT_EQ(kFirstMaxOrder
[i
], current
.value());
97 PriorityQueue
<int>::Pointer next
= queue_
.GetNextTowardsLastMin(current
);
98 queue_
.Erase(current
);
101 EXPECT_TRUE(current
.is_null());
105 TEST_F(PriorityQueueTest
, FirstMaxOrderErase
) {
106 for (size_t i
= 0; i
< kNumElements
; ++i
) {
107 EXPECT_EQ(kFirstMaxOrder
[i
], queue_
.FirstMax().value());
108 queue_
.Erase(queue_
.FirstMax());
113 TEST_F(PriorityQueueTest
, LastMaxOrderErase
) {
114 for (size_t i
= 0; i
< kNumElements
; ++i
) {
115 EXPECT_EQ(kLastMaxOrderErase
[i
], queue_
.LastMax().value());
116 queue_
.Erase(queue_
.LastMax());
121 TEST_F(PriorityQueueTest
, EraseFromMiddle
) {
122 queue_
.Erase(pointers_
[2]);
123 queue_
.Erase(pointers_
[3]);
125 const int expected_order
[] = { 8, 1, 6, 0, 5, 4, 7 };
127 for (size_t i
= 0; i
< arraysize(expected_order
); ++i
) {
128 EXPECT_EQ(expected_order
[i
], queue_
.FirstMin().value());
129 queue_
.Erase(queue_
.FirstMin());
134 TEST_F(PriorityQueueTest
, InsertAtFront
) {
135 queue_
.InsertAtFront(9, 2);
136 queue_
.InsertAtFront(10, 0);
137 queue_
.InsertAtFront(11, 1);
138 queue_
.InsertAtFront(12, 1);
140 const int expected_order
[] = { 10, 3, 8, 12, 11, 1, 6, 9, 0, 2, 5, 4, 7 };
142 for (size_t i
= 0; i
< arraysize(expected_order
); ++i
) {
143 EXPECT_EQ(expected_order
[i
], queue_
.FirstMin().value());
144 queue_
.Erase(queue_
.FirstMin());