xref: /aosp_15_r20/external/libgav1/src/utils/queue_test.cc (revision 095378508e87ed692bf8dfeb34008b65b3735891)
1*09537850SAkhilesh Sanikop // Copyright 2021 The libgav1 Authors
2*09537850SAkhilesh Sanikop //
3*09537850SAkhilesh Sanikop // Licensed under the Apache License, Version 2.0 (the "License");
4*09537850SAkhilesh Sanikop // you may not use this file except in compliance with the License.
5*09537850SAkhilesh Sanikop // You may obtain a copy of the License at
6*09537850SAkhilesh Sanikop //
7*09537850SAkhilesh Sanikop //      http://www.apache.org/licenses/LICENSE-2.0
8*09537850SAkhilesh Sanikop //
9*09537850SAkhilesh Sanikop // Unless required by applicable law or agreed to in writing, software
10*09537850SAkhilesh Sanikop // distributed under the License is distributed on an "AS IS" BASIS,
11*09537850SAkhilesh Sanikop // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*09537850SAkhilesh Sanikop // See the License for the specific language governing permissions and
13*09537850SAkhilesh Sanikop // limitations under the License.
14*09537850SAkhilesh Sanikop 
15*09537850SAkhilesh Sanikop #include "src/utils/queue.h"
16*09537850SAkhilesh Sanikop 
17*09537850SAkhilesh Sanikop #include <utility>
18*09537850SAkhilesh Sanikop #include <vector>
19*09537850SAkhilesh Sanikop 
20*09537850SAkhilesh Sanikop #include "gtest/gtest.h"
21*09537850SAkhilesh Sanikop 
22*09537850SAkhilesh Sanikop namespace libgav1 {
23*09537850SAkhilesh Sanikop namespace {
24*09537850SAkhilesh Sanikop 
25*09537850SAkhilesh Sanikop struct TestClass {
26*09537850SAkhilesh Sanikop   TestClass() = default;
TestClasslibgav1::__anon3748340b0111::TestClass27*09537850SAkhilesh Sanikop   explicit TestClass(int i) : i(i) {}
28*09537850SAkhilesh Sanikop   int i;
29*09537850SAkhilesh Sanikop   // The vector exists simply so that the class is not trivially copyable.
30*09537850SAkhilesh Sanikop   std::vector<int> dummy;
31*09537850SAkhilesh Sanikop };
32*09537850SAkhilesh Sanikop 
TEST(QueueTest,Basic)33*09537850SAkhilesh Sanikop TEST(QueueTest, Basic) {
34*09537850SAkhilesh Sanikop   Queue<TestClass> queue;
35*09537850SAkhilesh Sanikop   ASSERT_TRUE(queue.Init(8));
36*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Empty());
37*09537850SAkhilesh Sanikop 
38*09537850SAkhilesh Sanikop   for (int i = 0; i < 8; ++i) {
39*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Full());
40*09537850SAkhilesh Sanikop     TestClass test(i);
41*09537850SAkhilesh Sanikop     queue.Push(std::move(test));
42*09537850SAkhilesh Sanikop     EXPECT_EQ(queue.Back().i, i);
43*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Empty());
44*09537850SAkhilesh Sanikop   }
45*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Full());
46*09537850SAkhilesh Sanikop 
47*09537850SAkhilesh Sanikop   for (int i = 0; i < 8; ++i) {
48*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Empty());
49*09537850SAkhilesh Sanikop     EXPECT_EQ(queue.Front().i, i);
50*09537850SAkhilesh Sanikop     queue.Pop();
51*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Full());
52*09537850SAkhilesh Sanikop   }
53*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Empty());
54*09537850SAkhilesh Sanikop 
55*09537850SAkhilesh Sanikop   for (int i = 0; i < 8; ++i) {
56*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Full());
57*09537850SAkhilesh Sanikop     TestClass test(i);
58*09537850SAkhilesh Sanikop     queue.Push(std::move(test));
59*09537850SAkhilesh Sanikop     EXPECT_EQ(queue.Back().i, i);
60*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Empty());
61*09537850SAkhilesh Sanikop   }
62*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Full());
63*09537850SAkhilesh Sanikop   queue.Clear();
64*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Empty());
65*09537850SAkhilesh Sanikop   EXPECT_FALSE(queue.Full());
66*09537850SAkhilesh Sanikop }
67*09537850SAkhilesh Sanikop 
TEST(QueueTest,WrapAround)68*09537850SAkhilesh Sanikop TEST(QueueTest, WrapAround) {
69*09537850SAkhilesh Sanikop   Queue<TestClass> queue;
70*09537850SAkhilesh Sanikop   ASSERT_TRUE(queue.Init(8));
71*09537850SAkhilesh Sanikop   EXPECT_TRUE(queue.Empty());
72*09537850SAkhilesh Sanikop 
73*09537850SAkhilesh Sanikop   for (int i = 0; i < 100; ++i) {
74*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Full());
75*09537850SAkhilesh Sanikop     TestClass test(i);
76*09537850SAkhilesh Sanikop     queue.Push(std::move(test));
77*09537850SAkhilesh Sanikop     EXPECT_EQ(queue.Back().i, i);
78*09537850SAkhilesh Sanikop     EXPECT_FALSE(queue.Empty());
79*09537850SAkhilesh Sanikop     EXPECT_EQ(queue.Front().i, i);
80*09537850SAkhilesh Sanikop     queue.Pop();
81*09537850SAkhilesh Sanikop     EXPECT_TRUE(queue.Empty());
82*09537850SAkhilesh Sanikop   }
83*09537850SAkhilesh Sanikop }
84*09537850SAkhilesh Sanikop 
85*09537850SAkhilesh Sanikop }  // namespace
86*09537850SAkhilesh Sanikop }  // namespace libgav1
87