1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker *
4*84e33947SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker *
8*84e33947SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker *
10*84e33947SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker */
16*84e33947SAndroid Build Coastguard Worker
17*84e33947SAndroid Build Coastguard Worker #include "chre/util/array_queue.h"
18*84e33947SAndroid Build Coastguard Worker #include "gtest/gtest.h"
19*84e33947SAndroid Build Coastguard Worker
20*84e33947SAndroid Build Coastguard Worker #include <algorithm>
21*84e33947SAndroid Build Coastguard Worker #include <memory>
22*84e33947SAndroid Build Coastguard Worker #include <type_traits>
23*84e33947SAndroid Build Coastguard Worker #include <utility>
24*84e33947SAndroid Build Coastguard Worker #include <vector>
25*84e33947SAndroid Build Coastguard Worker
26*84e33947SAndroid Build Coastguard Worker using chre::ArrayQueue;
27*84e33947SAndroid Build Coastguard Worker using chre::ArrayQueueExt;
28*84e33947SAndroid Build Coastguard Worker
29*84e33947SAndroid Build Coastguard Worker namespace {
30*84e33947SAndroid Build Coastguard Worker constexpr int kMaxTestCapacity = 10;
31*84e33947SAndroid Build Coastguard Worker int destructor_count[kMaxTestCapacity];
32*84e33947SAndroid Build Coastguard Worker int constructor_count;
33*84e33947SAndroid Build Coastguard Worker int total_destructor_count;
34*84e33947SAndroid Build Coastguard Worker
35*84e33947SAndroid Build Coastguard Worker class FakeElement {
36*84e33947SAndroid Build Coastguard Worker public:
FakeElement()37*84e33947SAndroid Build Coastguard Worker FakeElement() {
38*84e33947SAndroid Build Coastguard Worker constructor_count++;
39*84e33947SAndroid Build Coastguard Worker }
40*84e33947SAndroid Build Coastguard Worker
FakeElement(int i)41*84e33947SAndroid Build Coastguard Worker FakeElement(int i) {
42*84e33947SAndroid Build Coastguard Worker val_ = i;
43*84e33947SAndroid Build Coastguard Worker constructor_count++;
44*84e33947SAndroid Build Coastguard Worker }
45*84e33947SAndroid Build Coastguard Worker
~FakeElement()46*84e33947SAndroid Build Coastguard Worker ~FakeElement() {
47*84e33947SAndroid Build Coastguard Worker total_destructor_count++;
48*84e33947SAndroid Build Coastguard Worker if (val_ >= 0 && val_ < kMaxTestCapacity) {
49*84e33947SAndroid Build Coastguard Worker destructor_count[val_]++;
50*84e33947SAndroid Build Coastguard Worker }
51*84e33947SAndroid Build Coastguard Worker }
52*84e33947SAndroid Build Coastguard Worker
setValue(int i)53*84e33947SAndroid Build Coastguard Worker void setValue(int i) {
54*84e33947SAndroid Build Coastguard Worker val_ = i;
55*84e33947SAndroid Build Coastguard Worker }
56*84e33947SAndroid Build Coastguard Worker
57*84e33947SAndroid Build Coastguard Worker private:
58*84e33947SAndroid Build Coastguard Worker int val_ = kMaxTestCapacity - 1;
59*84e33947SAndroid Build Coastguard Worker };
60*84e33947SAndroid Build Coastguard Worker } // namespace
61*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IsEmptyInitially)62*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IsEmptyInitially) {
63*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
64*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.empty());
65*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q.size());
66*84e33947SAndroid Build Coastguard Worker }
67*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,SimplePushPop)68*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, SimplePushPop) {
69*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 3> q;
70*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(1));
71*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(2));
72*84e33947SAndroid Build Coastguard Worker q.pop();
73*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(3));
74*84e33947SAndroid Build Coastguard Worker }
75*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,SimplePushPopBackPush)76*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, SimplePushPopBackPush) {
77*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 3> q;
78*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(0));
79*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(1));
80*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(2));
81*84e33947SAndroid Build Coastguard Worker q.pop_back();
82*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
83*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q[0]);
84*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q[1]);
85*84e33947SAndroid Build Coastguard Worker
86*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(3));
87*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.size());
88*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q[0]);
89*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q[1]);
90*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q[2]);
91*84e33947SAndroid Build Coastguard Worker
92*84e33947SAndroid Build Coastguard Worker q.pop_back();
93*84e33947SAndroid Build Coastguard Worker q.pop_back();
94*84e33947SAndroid Build Coastguard Worker q.pop_back();
95*84e33947SAndroid Build Coastguard Worker
96*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q.size());
97*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(4));
98*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(5));
99*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(6));
100*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.size());
101*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(4, q[0]);
102*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(5, q[1]);
103*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(6, q[2]);
104*84e33947SAndroid Build Coastguard Worker
105*84e33947SAndroid Build Coastguard Worker q.pop();
106*84e33947SAndroid Build Coastguard Worker
107*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.push(7));
108*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(5, q[0]);
109*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(6, q[1]);
110*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(7, q[2]);
111*84e33947SAndroid Build Coastguard Worker
112*84e33947SAndroid Build Coastguard Worker q.pop_back();
113*84e33947SAndroid Build Coastguard Worker
114*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(5, q[0]);
115*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(6, q[1]);
116*84e33947SAndroid Build Coastguard Worker
117*84e33947SAndroid Build Coastguard Worker q.pop();
118*84e33947SAndroid Build Coastguard Worker
119*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(6, q[0]);
120*84e33947SAndroid Build Coastguard Worker }
121*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,TestSize)122*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, TestSize) {
123*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
124*84e33947SAndroid Build Coastguard Worker q.push(1);
125*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.size());
126*84e33947SAndroid Build Coastguard Worker q.push(2);
127*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
128*84e33947SAndroid Build Coastguard Worker q.pop();
129*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.size());
130*84e33947SAndroid Build Coastguard Worker q.pop();
131*84e33947SAndroid Build Coastguard Worker }
132*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,TestEmpty)133*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, TestEmpty) {
134*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
135*84e33947SAndroid Build Coastguard Worker q.push(1);
136*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.empty());
137*84e33947SAndroid Build Coastguard Worker q.push(2);
138*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.empty());
139*84e33947SAndroid Build Coastguard Worker q.pop();
140*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.empty());
141*84e33947SAndroid Build Coastguard Worker q.pop();
142*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.empty());
143*84e33947SAndroid Build Coastguard Worker }
144*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,KickPushWhenNotFull)145*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, KickPushWhenNotFull) {
146*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
147*84e33947SAndroid Build Coastguard Worker q.kick_push(1);
148*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.size());
149*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q[0]);
150*84e33947SAndroid Build Coastguard Worker q.kick_push(2);
151*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
152*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q[1]);
153*84e33947SAndroid Build Coastguard Worker }
154*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,KickPushWhenFull)155*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, KickPushWhenFull) {
156*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
157*84e33947SAndroid Build Coastguard Worker q.kick_push(1);
158*84e33947SAndroid Build Coastguard Worker q.push(2);
159*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
160*84e33947SAndroid Build Coastguard Worker q.kick_push(3);
161*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
162*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q[0]);
163*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q[1]);
164*84e33947SAndroid Build Coastguard Worker }
165*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,PopWhenEmpty)166*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, PopWhenEmpty) {
167*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
168*84e33947SAndroid Build Coastguard Worker q.pop();
169*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q.size());
170*84e33947SAndroid Build Coastguard Worker }
171*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,PopBackWhenEmpty)172*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, PopBackWhenEmpty) {
173*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
174*84e33947SAndroid Build Coastguard Worker q.pop_back();
175*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, q.size());
176*84e33947SAndroid Build Coastguard Worker }
177*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,PushWhenFull)178*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, PushWhenFull) {
179*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
180*84e33947SAndroid Build Coastguard Worker q.push(1);
181*84e33947SAndroid Build Coastguard Worker q.push(2);
182*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.push(3));
183*84e33947SAndroid Build Coastguard Worker }
184*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueDeathTest,FrontWhenEmpty)185*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueDeathTest, FrontWhenEmpty) {
186*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
187*84e33947SAndroid Build Coastguard Worker EXPECT_DEATH(q.front(), "");
188*84e33947SAndroid Build Coastguard Worker }
189*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueDeathTest,BackWhenEmpty)190*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueDeathTest, BackWhenEmpty) {
191*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
192*84e33947SAndroid Build Coastguard Worker EXPECT_DEATH(q.back(), "");
193*84e33947SAndroid Build Coastguard Worker }
194*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,TestFront)195*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, TestFront) {
196*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 3> q;
197*84e33947SAndroid Build Coastguard Worker q.push(1);
198*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.front());
199*84e33947SAndroid Build Coastguard Worker q.pop();
200*84e33947SAndroid Build Coastguard Worker q.push(2);
201*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.front());
202*84e33947SAndroid Build Coastguard Worker q.push(3);
203*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.front());
204*84e33947SAndroid Build Coastguard Worker }
205*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,TestBack)206*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, TestBack) {
207*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 3> q;
208*84e33947SAndroid Build Coastguard Worker q.push(1);
209*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.back()); // 1 x x
210*84e33947SAndroid Build Coastguard Worker q.push(2);
211*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.back()); // 1 2 x
212*84e33947SAndroid Build Coastguard Worker q.pop();
213*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.back()); // x 2 x
214*84e33947SAndroid Build Coastguard Worker q.push(3);
215*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.back()); // x 2 3
216*84e33947SAndroid Build Coastguard Worker q.push(4);
217*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(4, q.back()); // 4 2 3 (forward wrap-around)
218*84e33947SAndroid Build Coastguard Worker q.pop_back();
219*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.back()); // x 2 3 (backwards wrap-around)
220*84e33947SAndroid Build Coastguard Worker q.pop();
221*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.back()); // x x 3
222*84e33947SAndroid Build Coastguard Worker }
223*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueDeathTest,InvalidSubscript)224*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueDeathTest, InvalidSubscript) {
225*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
226*84e33947SAndroid Build Coastguard Worker EXPECT_DEATH(q[0], "");
227*84e33947SAndroid Build Coastguard Worker }
228*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,Subscript)229*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, Subscript) {
230*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
231*84e33947SAndroid Build Coastguard Worker q.push(1);
232*84e33947SAndroid Build Coastguard Worker q.push(2);
233*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q[0]);
234*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q[1]);
235*84e33947SAndroid Build Coastguard Worker q.pop();
236*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q[0]);
237*84e33947SAndroid Build Coastguard Worker }
238*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,RemoveWithInvalidIndex)239*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, RemoveWithInvalidIndex) {
240*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 3> q;
241*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.remove(0));
242*84e33947SAndroid Build Coastguard Worker }
243*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,RemoveWithIndex)244*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, RemoveWithIndex) {
245*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 5> q;
246*84e33947SAndroid Build Coastguard Worker q.push(1);
247*84e33947SAndroid Build Coastguard Worker q.push(2);
248*84e33947SAndroid Build Coastguard Worker q.remove(0);
249*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.front());
250*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.size());
251*84e33947SAndroid Build Coastguard Worker q.push(3);
252*84e33947SAndroid Build Coastguard Worker q.push(4);
253*84e33947SAndroid Build Coastguard Worker q.push(5);
254*84e33947SAndroid Build Coastguard Worker q.remove(3);
255*84e33947SAndroid Build Coastguard Worker int sampleArray[] = {2, 3, 5};
256*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, q.size());
257*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < q.size(); ++i) {
258*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(sampleArray[i], q.front());
259*84e33947SAndroid Build Coastguard Worker q.remove(0);
260*84e33947SAndroid Build Coastguard Worker }
261*84e33947SAndroid Build Coastguard Worker }
262*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,DestructorCalledOnPop)263*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, DestructorCalledOnPop) {
264*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < kMaxTestCapacity; ++i) {
265*84e33947SAndroid Build Coastguard Worker destructor_count[i] = 0;
266*84e33947SAndroid Build Coastguard Worker }
267*84e33947SAndroid Build Coastguard Worker
268*84e33947SAndroid Build Coastguard Worker ArrayQueue<FakeElement, 3> q;
269*84e33947SAndroid Build Coastguard Worker FakeElement e;
270*84e33947SAndroid Build Coastguard Worker q.push(e);
271*84e33947SAndroid Build Coastguard Worker q.push(e);
272*84e33947SAndroid Build Coastguard Worker
273*84e33947SAndroid Build Coastguard Worker q.front().setValue(0);
274*84e33947SAndroid Build Coastguard Worker q.pop();
275*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, destructor_count[0]);
276*84e33947SAndroid Build Coastguard Worker
277*84e33947SAndroid Build Coastguard Worker q.front().setValue(1);
278*84e33947SAndroid Build Coastguard Worker q.pop();
279*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, destructor_count[1]);
280*84e33947SAndroid Build Coastguard Worker }
281*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,ElementsDestructedWhenQueueDestructed)282*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, ElementsDestructedWhenQueueDestructed) {
283*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < kMaxTestCapacity; ++i) {
284*84e33947SAndroid Build Coastguard Worker destructor_count[i] = 0;
285*84e33947SAndroid Build Coastguard Worker }
286*84e33947SAndroid Build Coastguard Worker
287*84e33947SAndroid Build Coastguard Worker // Put q and e in the scope so their destructor will be called going
288*84e33947SAndroid Build Coastguard Worker // out of scope.
289*84e33947SAndroid Build Coastguard Worker {
290*84e33947SAndroid Build Coastguard Worker ArrayQueue<FakeElement, 4> q;
291*84e33947SAndroid Build Coastguard Worker FakeElement e;
292*84e33947SAndroid Build Coastguard Worker
293*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
294*84e33947SAndroid Build Coastguard Worker q.push(e);
295*84e33947SAndroid Build Coastguard Worker q[i].setValue(i);
296*84e33947SAndroid Build Coastguard Worker }
297*84e33947SAndroid Build Coastguard Worker }
298*84e33947SAndroid Build Coastguard Worker
299*84e33947SAndroid Build Coastguard Worker // q should now be destroyed - check destructor count.
300*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
301*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, destructor_count[i]);
302*84e33947SAndroid Build Coastguard Worker }
303*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(0, destructor_count[3]);
304*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, destructor_count[kMaxTestCapacity - 1]);
305*84e33947SAndroid Build Coastguard Worker }
306*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,EmplaceTest)307*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, EmplaceTest) {
308*84e33947SAndroid Build Coastguard Worker constructor_count = 0;
309*84e33947SAndroid Build Coastguard Worker ArrayQueue<FakeElement, 2> q;
310*84e33947SAndroid Build Coastguard Worker
311*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.emplace(0));
312*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, constructor_count);
313*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, q.size());
314*84e33947SAndroid Build Coastguard Worker
315*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.emplace(1));
316*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, constructor_count);
317*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
318*84e33947SAndroid Build Coastguard Worker
319*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.emplace(2));
320*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, constructor_count);
321*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(2, q.size());
322*84e33947SAndroid Build Coastguard Worker }
323*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,EmptyQueueIterator)324*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, EmptyQueueIterator) {
325*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
326*84e33947SAndroid Build Coastguard Worker
327*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it = q.begin();
328*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(it == q.end());
329*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(it != q.end());
330*84e33947SAndroid Build Coastguard Worker }
331*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,SimpleIterator)332*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, SimpleIterator) {
333*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
334*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
335*84e33947SAndroid Build Coastguard Worker q.push(i);
336*84e33947SAndroid Build Coastguard Worker }
337*84e33947SAndroid Build Coastguard Worker EXPECT_NE(q.begin(), q.end());
338*84e33947SAndroid Build Coastguard Worker
339*84e33947SAndroid Build Coastguard Worker size_t index = 0;
340*84e33947SAndroid Build Coastguard Worker for (ArrayQueue<int, 4>::iterator it = q.begin(); it != q.end(); ++it) {
341*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it);
342*84e33947SAndroid Build Coastguard Worker }
343*84e33947SAndroid Build Coastguard Worker index = 0;
344*84e33947SAndroid Build Coastguard Worker for (ArrayQueue<int, 4>::iterator it = q.begin(); it != q.end(); it++) {
345*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it);
346*84e33947SAndroid Build Coastguard Worker }
347*84e33947SAndroid Build Coastguard Worker
348*84e33947SAndroid Build Coastguard Worker index = 0;
349*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it = q.begin();
350*84e33947SAndroid Build Coastguard Worker while (it != q.end()) {
351*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it++);
352*84e33947SAndroid Build Coastguard Worker }
353*84e33947SAndroid Build Coastguard Worker
354*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
355*84e33947SAndroid Build Coastguard Worker q.pop();
356*84e33947SAndroid Build Coastguard Worker q.push(i + 3);
357*84e33947SAndroid Build Coastguard Worker }
358*84e33947SAndroid Build Coastguard Worker
359*84e33947SAndroid Build Coastguard Worker index = 0;
360*84e33947SAndroid Build Coastguard Worker it = q.begin();
361*84e33947SAndroid Build Coastguard Worker while (it != q.end()) {
362*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it++);
363*84e33947SAndroid Build Coastguard Worker }
364*84e33947SAndroid Build Coastguard Worker
365*84e33947SAndroid Build Coastguard Worker // Iterator concept checks: default constructible, copy assignable, copy
366*84e33947SAndroid Build Coastguard Worker // constructible
367*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it2;
368*84e33947SAndroid Build Coastguard Worker it2 = it;
369*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(it, it2);
370*84e33947SAndroid Build Coastguard Worker
371*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it3(it);
372*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(it, it3);
373*84e33947SAndroid Build Coastguard Worker }
374*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorSwap)375*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorSwap) {
376*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
377*84e33947SAndroid Build Coastguard Worker q.push(1);
378*84e33947SAndroid Build Coastguard Worker q.push(2);
379*84e33947SAndroid Build Coastguard Worker
380*84e33947SAndroid Build Coastguard Worker auto it1 = q.begin(), it2 = q.end();
381*84e33947SAndroid Build Coastguard Worker std::swap(it1, it2);
382*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(it1, q.end());
383*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(it2, q.begin());
384*84e33947SAndroid Build Coastguard Worker }
385*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorAndPush)386*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorAndPush) {
387*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
388*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 2; ++i) {
389*84e33947SAndroid Build Coastguard Worker q.push(i);
390*84e33947SAndroid Build Coastguard Worker }
391*84e33947SAndroid Build Coastguard Worker
392*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_b = q.begin();
393*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_e = q.end();
394*84e33947SAndroid Build Coastguard Worker q.push(3);
395*84e33947SAndroid Build Coastguard Worker
396*84e33947SAndroid Build Coastguard Worker size_t index = 0;
397*84e33947SAndroid Build Coastguard Worker while (it_b != it_e) {
398*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it_b++);
399*84e33947SAndroid Build Coastguard Worker }
400*84e33947SAndroid Build Coastguard Worker }
401*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorAndPop)402*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorAndPop) {
403*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
404*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
405*84e33947SAndroid Build Coastguard Worker q.push(i);
406*84e33947SAndroid Build Coastguard Worker }
407*84e33947SAndroid Build Coastguard Worker
408*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_b = q.begin();
409*84e33947SAndroid Build Coastguard Worker q.pop();
410*84e33947SAndroid Build Coastguard Worker it_b++;
411*84e33947SAndroid Build Coastguard Worker
412*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 2; ++i) {
413*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[i], *it_b++);
414*84e33947SAndroid Build Coastguard Worker }
415*84e33947SAndroid Build Coastguard Worker }
416*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorAndRemove)417*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorAndRemove) {
418*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
419*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 2; ++i) {
420*84e33947SAndroid Build Coastguard Worker q.push(i);
421*84e33947SAndroid Build Coastguard Worker }
422*84e33947SAndroid Build Coastguard Worker
423*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_b = q.begin();
424*84e33947SAndroid Build Coastguard Worker q.remove(1);
425*84e33947SAndroid Build Coastguard Worker
426*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[0], *it_b);
427*84e33947SAndroid Build Coastguard Worker }
428*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorAndEmplace)429*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorAndEmplace) {
430*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
431*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 2; ++i) {
432*84e33947SAndroid Build Coastguard Worker q.push(i);
433*84e33947SAndroid Build Coastguard Worker }
434*84e33947SAndroid Build Coastguard Worker
435*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_b = q.begin();
436*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::iterator it_e = q.end();
437*84e33947SAndroid Build Coastguard Worker q.emplace(3);
438*84e33947SAndroid Build Coastguard Worker
439*84e33947SAndroid Build Coastguard Worker size_t index = 0;
440*84e33947SAndroid Build Coastguard Worker while (it_b != it_e) {
441*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *it_b++);
442*84e33947SAndroid Build Coastguard Worker }
443*84e33947SAndroid Build Coastguard Worker }
444*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,SimpleConstIterator)445*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, SimpleConstIterator) {
446*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4> q;
447*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
448*84e33947SAndroid Build Coastguard Worker q.push(i);
449*84e33947SAndroid Build Coastguard Worker }
450*84e33947SAndroid Build Coastguard Worker
451*84e33947SAndroid Build Coastguard Worker size_t index = 0;
452*84e33947SAndroid Build Coastguard Worker for (ArrayQueue<int, 4>::const_iterator cit = q.cbegin(); cit != q.cend();
453*84e33947SAndroid Build Coastguard Worker ++cit) {
454*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *cit);
455*84e33947SAndroid Build Coastguard Worker }
456*84e33947SAndroid Build Coastguard Worker
457*84e33947SAndroid Build Coastguard Worker index = 0;
458*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 4>::const_iterator cit = q.cbegin();
459*84e33947SAndroid Build Coastguard Worker while (cit != q.cend()) {
460*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *cit++);
461*84e33947SAndroid Build Coastguard Worker }
462*84e33947SAndroid Build Coastguard Worker
463*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
464*84e33947SAndroid Build Coastguard Worker q.pop();
465*84e33947SAndroid Build Coastguard Worker q.push(i + 3);
466*84e33947SAndroid Build Coastguard Worker }
467*84e33947SAndroid Build Coastguard Worker
468*84e33947SAndroid Build Coastguard Worker index = 0;
469*84e33947SAndroid Build Coastguard Worker cit = q.cbegin();
470*84e33947SAndroid Build Coastguard Worker while (cit != q.cend()) {
471*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[index++], *cit++);
472*84e33947SAndroid Build Coastguard Worker }
473*84e33947SAndroid Build Coastguard Worker }
474*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,Full)475*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, Full) {
476*84e33947SAndroid Build Coastguard Worker ArrayQueue<size_t, 4> q;
477*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 4; i++) {
478*84e33947SAndroid Build Coastguard Worker EXPECT_FALSE(q.full());
479*84e33947SAndroid Build Coastguard Worker q.push(i);
480*84e33947SAndroid Build Coastguard Worker }
481*84e33947SAndroid Build Coastguard Worker
482*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.full());
483*84e33947SAndroid Build Coastguard Worker }
484*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,ArrayCopy)485*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, ArrayCopy) {
486*84e33947SAndroid Build Coastguard Worker constexpr size_t kSize = 8;
487*84e33947SAndroid Build Coastguard Worker ArrayQueue<size_t, kSize> q;
488*84e33947SAndroid Build Coastguard Worker std::vector<size_t> v;
489*84e33947SAndroid Build Coastguard Worker v.resize(kSize);
490*84e33947SAndroid Build Coastguard Worker
491*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < kSize; i++) {
492*84e33947SAndroid Build Coastguard Worker q.push(i);
493*84e33947SAndroid Build Coastguard Worker
494*84e33947SAndroid Build Coastguard Worker v.assign(kSize, 0xdeadbeef);
495*84e33947SAndroid Build Coastguard Worker std::copy(q.begin(), q.end(), v.begin());
496*84e33947SAndroid Build Coastguard Worker
497*84e33947SAndroid Build Coastguard Worker for (size_t j = 0; j < i; j++) {
498*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[j], v[j]);
499*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*std::next(q.begin(), j), v[j]);
500*84e33947SAndroid Build Coastguard Worker }
501*84e33947SAndroid Build Coastguard Worker }
502*84e33947SAndroid Build Coastguard Worker }
503*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,IteratorTraits)504*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, IteratorTraits) {
505*84e33947SAndroid Build Coastguard Worker ArrayQueue<int, 2> q;
506*84e33947SAndroid Build Coastguard Worker q.push(1234);
507*84e33947SAndroid Build Coastguard Worker q.push(5678);
508*84e33947SAndroid Build Coastguard Worker
509*84e33947SAndroid Build Coastguard Worker using traits = std::iterator_traits<decltype(q)::iterator>;
510*84e33947SAndroid Build Coastguard Worker typename traits::difference_type diff = std::distance(q.begin(), q.end());
511*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(diff, q.size());
512*84e33947SAndroid Build Coastguard Worker
513*84e33947SAndroid Build Coastguard Worker typename traits::value_type v = *q.begin();
514*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(v, q[0]);
515*84e33947SAndroid Build Coastguard Worker
516*84e33947SAndroid Build Coastguard Worker typename traits::reference r = *q.begin();
517*84e33947SAndroid Build Coastguard Worker r = 999;
518*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(r, q[0]);
519*84e33947SAndroid Build Coastguard Worker
520*84e33947SAndroid Build Coastguard Worker typename traits::pointer p = &r;
521*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*p, q[0]);
522*84e33947SAndroid Build Coastguard Worker
523*84e33947SAndroid Build Coastguard Worker // Note: if the implementation is upgraded to another category like random
524*84e33947SAndroid Build Coastguard Worker // access, then this static assert should be updated. It exists primarily to
525*84e33947SAndroid Build Coastguard Worker // confirm that we are declaring an iterator_category
526*84e33947SAndroid Build Coastguard Worker static_assert(
527*84e33947SAndroid Build Coastguard Worker std::is_same<traits::iterator_category, std::forward_iterator_tag>::value,
528*84e33947SAndroid Build Coastguard Worker "ArrayQueueIterator should be a forward iterator");
529*84e33947SAndroid Build Coastguard Worker }
530*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,ArrayClear)531*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, ArrayClear) {
532*84e33947SAndroid Build Coastguard Worker ArrayQueue<size_t, 4> q;
533*84e33947SAndroid Build Coastguard Worker
534*84e33947SAndroid Build Coastguard Worker q.clear();
535*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.empty());
536*84e33947SAndroid Build Coastguard Worker
537*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 4; i++) {
538*84e33947SAndroid Build Coastguard Worker q.push(i);
539*84e33947SAndroid Build Coastguard Worker }
540*84e33947SAndroid Build Coastguard Worker
541*84e33947SAndroid Build Coastguard Worker q.clear();
542*84e33947SAndroid Build Coastguard Worker EXPECT_TRUE(q.empty());
543*84e33947SAndroid Build Coastguard Worker
544*84e33947SAndroid Build Coastguard Worker // Make sure that insertion/access still work after a clear.
545*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 4; i++) {
546*84e33947SAndroid Build Coastguard Worker q.push(i);
547*84e33947SAndroid Build Coastguard Worker }
548*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 4; i++) {
549*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q[i], i);
550*84e33947SAndroid Build Coastguard Worker }
551*84e33947SAndroid Build Coastguard Worker }
552*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,ElementsDestructedArrayClear)553*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, ElementsDestructedArrayClear) {
554*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < kMaxTestCapacity; ++i) {
555*84e33947SAndroid Build Coastguard Worker destructor_count[i] = 0;
556*84e33947SAndroid Build Coastguard Worker }
557*84e33947SAndroid Build Coastguard Worker total_destructor_count = 0;
558*84e33947SAndroid Build Coastguard Worker
559*84e33947SAndroid Build Coastguard Worker ArrayQueue<FakeElement, 4> q;
560*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
561*84e33947SAndroid Build Coastguard Worker q.emplace(i);
562*84e33947SAndroid Build Coastguard Worker }
563*84e33947SAndroid Build Coastguard Worker
564*84e33947SAndroid Build Coastguard Worker q.clear();
565*84e33947SAndroid Build Coastguard Worker
566*84e33947SAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
567*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(1, destructor_count[i]);
568*84e33947SAndroid Build Coastguard Worker }
569*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(3, total_destructor_count);
570*84e33947SAndroid Build Coastguard Worker }
571*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueExtTest,BasicTest)572*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueExtTest, BasicTest) {
573*84e33947SAndroid Build Coastguard Worker constexpr size_t kNumElements = 32;
574*84e33947SAndroid Build Coastguard Worker int32_t array[kNumElements];
575*84e33947SAndroid Build Coastguard Worker ArrayQueueExt<int32_t> q(array, kNumElements);
576*84e33947SAndroid Build Coastguard Worker
577*84e33947SAndroid Build Coastguard Worker ASSERT_EQ(q.data(), array);
578*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q.capacity(), kNumElements);
579*84e33947SAndroid Build Coastguard Worker
580*84e33947SAndroid Build Coastguard Worker for (int i = 0; i < kNumElements; i++) {
581*84e33947SAndroid Build Coastguard Worker q.push(i);
582*84e33947SAndroid Build Coastguard Worker }
583*84e33947SAndroid Build Coastguard Worker
584*84e33947SAndroid Build Coastguard Worker for (int i = 0; i < kNumElements; i++) {
585*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(array[i], q[i]);
586*84e33947SAndroid Build Coastguard Worker }
587*84e33947SAndroid Build Coastguard Worker }
588*84e33947SAndroid Build Coastguard Worker
TEST(ArrayQueueTest,KickPushNonCopyable)589*84e33947SAndroid Build Coastguard Worker TEST(ArrayQueueTest, KickPushNonCopyable) {
590*84e33947SAndroid Build Coastguard Worker ArrayQueue<std::unique_ptr<int>, 2> q;
591*84e33947SAndroid Build Coastguard Worker auto p1 = std::make_unique<int>(42);
592*84e33947SAndroid Build Coastguard Worker auto p2 = std::make_unique<int>(43);
593*84e33947SAndroid Build Coastguard Worker auto p3 = std::make_unique<int>(44);
594*84e33947SAndroid Build Coastguard Worker
595*84e33947SAndroid Build Coastguard Worker q.kick_push(std::move(p1));
596*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q.size(), 1);
597*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.front(), 42);
598*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.back(), 42);
599*84e33947SAndroid Build Coastguard Worker
600*84e33947SAndroid Build Coastguard Worker q.kick_push(std::move(p2));
601*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q.size(), 2);
602*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.front(), 42);
603*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.back(), 43);
604*84e33947SAndroid Build Coastguard Worker
605*84e33947SAndroid Build Coastguard Worker q.kick_push(std::move(p3));
606*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(q.size(), 2);
607*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.front(), 43);
608*84e33947SAndroid Build Coastguard Worker EXPECT_EQ(*q.back(), 44);
609*84e33947SAndroid Build Coastguard Worker }
610