Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Side by Side Diff: base/task_scheduler/scheduler_stack_unittest.cc

Issue 1892033003: TaskScheduler [10] SchedulerWorkerThreadStack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@9_single_thread
Patch Set: use bitfield to determine whether an element is on the stack Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/task_scheduler/scheduler_stack.h"
6
7 #include "base/task_scheduler/test_utils.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace base {
11 namespace internal {
12
13 // Verify that Push() and Pop() add/remove values in FIFO order.
14 TEST(TaskSchedulerStackTest, PushPop) {
15 SchedulerStack stack;
16 EXPECT_TRUE(stack.Empty());
17 EXPECT_EQ(0U, stack.Size());
18
19 stack.Push(1);
20 EXPECT_FALSE(stack.Empty());
21 EXPECT_EQ(1U, stack.Size());
22
23 stack.Push(2);
24 EXPECT_FALSE(stack.Empty());
25 EXPECT_EQ(2U, stack.Size());
26
27 stack.Push(3);
28 EXPECT_FALSE(stack.Empty());
29 EXPECT_EQ(3U, stack.Size());
30
31 EXPECT_EQ(3, stack.Pop());
32 EXPECT_FALSE(stack.Empty());
33 EXPECT_EQ(2U, stack.Size());
34
35 stack.Push(3);
36 EXPECT_FALSE(stack.Empty());
37 EXPECT_EQ(3U, stack.Size());
38
39 EXPECT_EQ(3, stack.Pop());
40 EXPECT_FALSE(stack.Empty());
41 EXPECT_EQ(2U, stack.Size());
42
43 EXPECT_EQ(2, stack.Pop());
44 EXPECT_FALSE(stack.Empty());
45 EXPECT_EQ(1U, stack.Size());
46
47 EXPECT_EQ(1, stack.Pop());
48 EXPECT_TRUE(stack.Empty());
49 EXPECT_EQ(0U, stack.Size());
50 }
51
52 // Verify that all elements in [0, 63] can be pushed and popped from the stack.
53 TEST(TaskSchedulerStackTest, PushPopAllRange) {
54 SchedulerStack stack;
55 EXPECT_EQ(0, stack.Size());
56
57 for (int i = 0; i <= 63; ++i) {
58 stack.Push(i);
59 EXPECT_EQ(i + 1, stack.Size());
60 }
61
62 for (int i = 63; i >= 0; --i) {
63 EXPECT_EQ(i, stack.Pop());
64 EXPECT_EQ(i, stack.Size());
65 }
66 }
67
68 // Verify that a value can be removed by Remove().
69 TEST(TaskSchedulerStackTest, Remove) {
70 SchedulerStack stack;
71 EXPECT_TRUE(stack.Empty());
72 EXPECT_EQ(0U, stack.Size());
73
74 stack.Push(1);
75 EXPECT_FALSE(stack.Empty());
76 EXPECT_EQ(1U, stack.Size());
77
78 stack.Push(2);
79 EXPECT_FALSE(stack.Empty());
80 EXPECT_EQ(2U, stack.Size());
81
82 stack.Push(3);
83 EXPECT_FALSE(stack.Empty());
84 EXPECT_EQ(3U, stack.Size());
85
86 stack.Remove(2);
87 EXPECT_FALSE(stack.Empty());
88 EXPECT_EQ(2U, stack.Size());
89
90 EXPECT_EQ(3, stack.Pop());
91 EXPECT_FALSE(stack.Empty());
92 EXPECT_EQ(1U, stack.Size());
93
94 EXPECT_EQ(1, stack.Pop());
95 EXPECT_TRUE(stack.Empty());
96 EXPECT_EQ(0U, stack.Size());
97 }
98
99 // Verify that all elements in [0, 63] can be pushed and removed from the stack.
100 TEST(TaskSchedulerStackTest, PushRemoveAllRange) {
101 SchedulerStack stack;
102 EXPECT_EQ(0, stack.Size());
103
104 for (int i = 0; i <= 63; ++i) {
105 stack.Push(i);
106 EXPECT_EQ(i + 1, stack.Size());
107 }
108
109 for (int i = 63; i >= 0; --i) {
gab 2016/04/18 18:35:40 Remove in increasing order to test that it works i
fdoray 2016/04/18 20:33:12 Done.
110 stack.Remove(i);
111 EXPECT_EQ(i, stack.Size());
112 }
113 }
114
115 // Verify that a value can be pushed again after it has been removed.
116 TEST(TaskSchedulerStackTest, PushAfterRemove) {
117 SchedulerStack stack;
118 EXPECT_EQ(0U, stack.Size());
119 EXPECT_TRUE(stack.Empty());
120
121 stack.Push(5);
122 EXPECT_EQ(1U, stack.Size());
123 EXPECT_FALSE(stack.Empty());
124
125 stack.Remove(5);
126 EXPECT_EQ(0U, stack.Size());
127 EXPECT_TRUE(stack.Empty());
128
129 stack.Push(5);
130 EXPECT_EQ(1U, stack.Size());
131 EXPECT_FALSE(stack.Empty());
132 }
133
134 // Verify that Push() DCHECKs when a value under the allowed range is inserted.
135 TEST(TaskSchedulerStackTest, PushUnderAllowedRange) {
136 SchedulerStack stack;
137 EXPECT_DCHECK_DEATH({ stack.Push(-1); }, "");
138 }
139
140 // Verify that Push() DCHECKs when a value above the allowed range is inserted.
141 TEST(TaskSchedulerStackTest, PushAboveAllowedRange) {
142 SchedulerStack stack;
143 EXPECT_DCHECK_DEATH({ stack.Push(64); }, "");
144 }
145
146 // Verify that Push() DCHECKs when a value is inserted twice.
147 TEST(TaskSchedulerStackTest, PushTwice) {
148 SchedulerStack stack;
149 stack.Push(5);
150 EXPECT_DCHECK_DEATH({ stack.Push(5); }, "");
151 }
152
153 } // namespace internal
154 } // namespace base
OLDNEW
« base/task_scheduler/scheduler_stack.cc ('K') | « base/task_scheduler/scheduler_stack.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698