OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/task_scheduler/scheduler_worker_stack.h" | 5 #include "base/task_scheduler/scheduler_worker_stack.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/task_scheduler/scheduler_worker.h" | 10 #include "base/task_scheduler/scheduler_worker.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 | 69 |
70 private: | 70 private: |
71 TaskTracker task_tracker_; | 71 TaskTracker task_tracker_; |
72 }; | 72 }; |
73 | 73 |
74 } // namespace | 74 } // namespace |
75 | 75 |
76 // Verify that Push() and Pop() add/remove values in FIFO order. | 76 // Verify that Push() and Pop() add/remove values in FIFO order. |
77 TEST_F(TaskSchedulerWorkerStackTest, PushPop) { | 77 TEST_F(TaskSchedulerWorkerStackTest, PushPop) { |
78 SchedulerWorkerStack stack; | 78 SchedulerWorkerStack stack; |
| 79 EXPECT_EQ(nullptr, stack.Pop()); |
| 80 |
79 EXPECT_TRUE(stack.IsEmpty()); | 81 EXPECT_TRUE(stack.IsEmpty()); |
80 EXPECT_EQ(0U, stack.Size()); | 82 EXPECT_EQ(0U, stack.Size()); |
81 | 83 |
82 stack.Push(worker_a_.get()); | 84 stack.Push(worker_a_.get()); |
83 EXPECT_FALSE(stack.IsEmpty()); | 85 EXPECT_FALSE(stack.IsEmpty()); |
84 EXPECT_EQ(1U, stack.Size()); | 86 EXPECT_EQ(1U, stack.Size()); |
85 | 87 |
86 stack.Push(worker_b_.get()); | 88 stack.Push(worker_b_.get()); |
87 EXPECT_FALSE(stack.IsEmpty()); | 89 EXPECT_FALSE(stack.IsEmpty()); |
88 EXPECT_EQ(2U, stack.Size()); | 90 EXPECT_EQ(2U, stack.Size()); |
(...skipping 14 matching lines...) Expand all Loading... |
103 EXPECT_FALSE(stack.IsEmpty()); | 105 EXPECT_FALSE(stack.IsEmpty()); |
104 EXPECT_EQ(2U, stack.Size()); | 106 EXPECT_EQ(2U, stack.Size()); |
105 | 107 |
106 EXPECT_EQ(worker_b_.get(), stack.Pop()); | 108 EXPECT_EQ(worker_b_.get(), stack.Pop()); |
107 EXPECT_FALSE(stack.IsEmpty()); | 109 EXPECT_FALSE(stack.IsEmpty()); |
108 EXPECT_EQ(1U, stack.Size()); | 110 EXPECT_EQ(1U, stack.Size()); |
109 | 111 |
110 EXPECT_EQ(worker_a_.get(), stack.Pop()); | 112 EXPECT_EQ(worker_a_.get(), stack.Pop()); |
111 EXPECT_TRUE(stack.IsEmpty()); | 113 EXPECT_TRUE(stack.IsEmpty()); |
112 EXPECT_EQ(0U, stack.Size()); | 114 EXPECT_EQ(0U, stack.Size()); |
| 115 |
| 116 EXPECT_EQ(nullptr, stack.Pop()); |
| 117 } |
| 118 |
| 119 // Verify that Peek() returns the correct values in FIFO order. |
| 120 TEST_F(TaskSchedulerWorkerStackTest, PeekPop) { |
| 121 SchedulerWorkerStack stack; |
| 122 EXPECT_EQ(nullptr, stack.Peek()); |
| 123 |
| 124 EXPECT_TRUE(stack.IsEmpty()); |
| 125 EXPECT_EQ(0U, stack.Size()); |
| 126 |
| 127 stack.Push(worker_a_.get()); |
| 128 EXPECT_EQ(worker_a_.get(), stack.Peek()); |
| 129 EXPECT_FALSE(stack.IsEmpty()); |
| 130 EXPECT_EQ(1U, stack.Size()); |
| 131 |
| 132 stack.Push(worker_b_.get()); |
| 133 EXPECT_EQ(worker_b_.get(), stack.Peek()); |
| 134 EXPECT_FALSE(stack.IsEmpty()); |
| 135 EXPECT_EQ(2U, stack.Size()); |
| 136 |
| 137 stack.Push(worker_c_.get()); |
| 138 EXPECT_EQ(worker_c_.get(), stack.Peek()); |
| 139 EXPECT_FALSE(stack.IsEmpty()); |
| 140 EXPECT_EQ(3U, stack.Size()); |
| 141 |
| 142 EXPECT_EQ(worker_c_.get(), stack.Pop()); |
| 143 EXPECT_EQ(worker_b_.get(), stack.Peek()); |
| 144 EXPECT_FALSE(stack.IsEmpty()); |
| 145 EXPECT_EQ(2U, stack.Size()); |
| 146 |
| 147 EXPECT_EQ(worker_b_.get(), stack.Pop()); |
| 148 EXPECT_EQ(worker_a_.get(), stack.Peek()); |
| 149 EXPECT_FALSE(stack.IsEmpty()); |
| 150 EXPECT_EQ(1U, stack.Size()); |
| 151 |
| 152 EXPECT_EQ(worker_a_.get(), stack.Pop()); |
| 153 EXPECT_TRUE(stack.IsEmpty()); |
| 154 EXPECT_EQ(0U, stack.Size()); |
| 155 |
| 156 EXPECT_EQ(nullptr, stack.Peek()); |
| 157 } |
| 158 |
| 159 // Verify that Contains() returns true for workers on the stack. |
| 160 TEST_F(TaskSchedulerWorkerStackTest, Contains) { |
| 161 SchedulerWorkerStack stack; |
| 162 EXPECT_FALSE(stack.Contains(worker_a_.get())); |
| 163 EXPECT_FALSE(stack.Contains(worker_b_.get())); |
| 164 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
| 165 |
| 166 stack.Push(worker_a_.get()); |
| 167 EXPECT_TRUE(stack.Contains(worker_a_.get())); |
| 168 EXPECT_FALSE(stack.Contains(worker_b_.get())); |
| 169 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
| 170 |
| 171 stack.Push(worker_b_.get()); |
| 172 EXPECT_TRUE(stack.Contains(worker_a_.get())); |
| 173 EXPECT_TRUE(stack.Contains(worker_b_.get())); |
| 174 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
| 175 |
| 176 stack.Push(worker_c_.get()); |
| 177 EXPECT_TRUE(stack.Contains(worker_a_.get())); |
| 178 EXPECT_TRUE(stack.Contains(worker_b_.get())); |
| 179 EXPECT_TRUE(stack.Contains(worker_c_.get())); |
| 180 |
| 181 stack.Pop(); |
| 182 EXPECT_TRUE(stack.Contains(worker_a_.get())); |
| 183 EXPECT_TRUE(stack.Contains(worker_b_.get())); |
| 184 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
| 185 |
| 186 stack.Pop(); |
| 187 EXPECT_TRUE(stack.Contains(worker_a_.get())); |
| 188 EXPECT_FALSE(stack.Contains(worker_b_.get())); |
| 189 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
| 190 |
| 191 stack.Pop(); |
| 192 EXPECT_FALSE(stack.Contains(worker_a_.get())); |
| 193 EXPECT_FALSE(stack.Contains(worker_b_.get())); |
| 194 EXPECT_FALSE(stack.Contains(worker_c_.get())); |
113 } | 195 } |
114 | 196 |
115 // Verify that a value can be removed by Remove(). | 197 // Verify that a value can be removed by Remove(). |
116 TEST_F(TaskSchedulerWorkerStackTest, Remove) { | 198 TEST_F(TaskSchedulerWorkerStackTest, Remove) { |
117 SchedulerWorkerStack stack; | 199 SchedulerWorkerStack stack; |
118 EXPECT_TRUE(stack.IsEmpty()); | 200 EXPECT_TRUE(stack.IsEmpty()); |
119 EXPECT_EQ(0U, stack.Size()); | 201 EXPECT_EQ(0U, stack.Size()); |
120 | 202 |
121 stack.Push(worker_a_.get()); | 203 stack.Push(worker_a_.get()); |
122 EXPECT_FALSE(stack.IsEmpty()); | 204 EXPECT_FALSE(stack.IsEmpty()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 246 |
165 // Verify that Push() DCHECKs when a value is inserted twice. | 247 // Verify that Push() DCHECKs when a value is inserted twice. |
166 TEST_F(TaskSchedulerWorkerStackTest, PushTwice) { | 248 TEST_F(TaskSchedulerWorkerStackTest, PushTwice) { |
167 SchedulerWorkerStack stack; | 249 SchedulerWorkerStack stack; |
168 stack.Push(worker_a_.get()); | 250 stack.Push(worker_a_.get()); |
169 EXPECT_DCHECK_DEATH({ stack.Push(worker_a_.get()); }, ""); | 251 EXPECT_DCHECK_DEATH({ stack.Push(worker_a_.get()); }, ""); |
170 } | 252 } |
171 | 253 |
172 } // namespace internal | 254 } // namespace internal |
173 } // namespace base | 255 } // namespace base |
OLD | NEW |