Index: net/base/priority_queue_unittest.cc |
diff --git a/net/base/priority_queue_unittest.cc b/net/base/priority_queue_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..39127ba0811a9bb2b6a4e5a18eecc8d30e6afbd5 |
--- /dev/null |
+++ b/net/base/priority_queue_unittest.cc |
@@ -0,0 +1,120 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "net/base/priority_queue.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net { |
+ |
+namespace { |
+ |
+const RequestPriority kPriorities[] = { |
+ LOW, |
+ MEDIUM, |
+ LOW, |
+ HIGHEST, |
+ IDLE, |
+ LOWEST, |
+ MEDIUM, |
+ IDLE, |
+ HIGHEST, |
+}; |
+const size_t kNumElements = arraysize(kPriorities); |
+const size_t kExpectedOrder[kNumElements] = { 3, 8, 1, 6, 0, 2, 5, 4, 7 }; |
+const size_t kOldestLowest[kNumElements] = { 4, 7, 5, 0, 2, 1, 6, 3, 8 }; |
+ |
+void CheckEmpty(PriorityQueue<size_t>* queue) { |
+ EXPECT_EQ(0u, queue->size()); |
+ EXPECT_TRUE(queue->First().is_null()); |
+ EXPECT_TRUE(queue->Last().is_null()); |
+ EXPECT_TRUE(queue->OldestLowest().is_null()); |
+} |
+ |
+TEST(PriorityQueueTest, AddAndClear) { |
+ PriorityQueue<size_t> queue; |
+ PriorityQueue<size_t>::Pointer pointers[kNumElements]; |
+ |
+ CheckEmpty(&queue); |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ EXPECT_EQ(i, queue.size()); |
+ pointers[i] = queue.Insert(i, kPriorities[i]); |
+ } |
+ EXPECT_EQ(kNumElements, queue.size()); |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ EXPECT_EQ(kPriorities[i], pointers[i].priority()); |
+ EXPECT_EQ(i, pointers[i].value()); |
+ } |
+ |
+ queue.Clear(); |
+ CheckEmpty(&queue); |
+} |
+ |
+TEST(PriorityQueueTest, FirstOrder) { |
+ PriorityQueue<size_t> queue; |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ queue.Insert(i, kPriorities[i]); |
+ } |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ EXPECT_EQ(kExpectedOrder[i], queue.First().value()); |
+ EXPECT_EQ(kNumElements - i, queue.size()); |
+ queue.Erase(queue.First()); |
+ } |
+ CheckEmpty(&queue); |
+} |
+ |
+TEST(PriorityQueueTest, LastOrder) { |
+ PriorityQueue<size_t> queue; |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ queue.Insert(i, kPriorities[i]); |
+ } |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ EXPECT_EQ(kExpectedOrder[kNumElements - i - 1], queue.Last().value()); |
+ queue.Erase(queue.Last()); |
+ } |
+ CheckEmpty(&queue); |
+} |
+ |
+TEST(PriorityQueueTest, OldestLowestOrder) { |
+ PriorityQueue<size_t> queue; |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ queue.Insert(i, kPriorities[i]); |
+ } |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ EXPECT_EQ(kOldestLowest[i], queue.OldestLowest().value()); |
+ queue.Erase(queue.OldestLowest()); |
+ } |
+ CheckEmpty(&queue); |
+} |
+ |
+TEST(PriorityQueueTest, EraseFromMiddle) { |
+ PriorityQueue<size_t> queue; |
+ PriorityQueue<size_t>::Pointer pointers[kNumElements]; |
+ |
+ for (size_t i = 0; i < kNumElements; ++i) { |
+ pointers[i] = queue.Insert(i, kPriorities[i]); |
+ } |
+ |
+ queue.Erase(pointers[2]); |
+ queue.Erase(pointers[3]); |
+ |
+ size_t expected_order[] = { 8, 1, 6, 0, 5, 4, 7 }; |
+ |
+ for (size_t i = 0; i < arraysize(expected_order); ++i) { |
+ EXPECT_EQ(expected_order[i], queue.First().value()); |
+ queue.Erase(queue.First()); |
+ } |
+ CheckEmpty(&queue); |
+} |
+ |
+} // namespace |
+ |
+} // namespace net |
+ |