xref: /aosp_15_r20/external/libgav1/src/utils/stack_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/stack.h"
16*09537850SAkhilesh Sanikop 
17*09537850SAkhilesh Sanikop #include <cstdint>
18*09537850SAkhilesh Sanikop #include <utility>
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 constexpr int kStackSize = 8;
26*09537850SAkhilesh Sanikop 
TEST(StackTest,SimpleType)27*09537850SAkhilesh Sanikop TEST(StackTest, SimpleType) {
28*09537850SAkhilesh Sanikop   Stack<int, kStackSize> stack;
29*09537850SAkhilesh Sanikop   EXPECT_TRUE(stack.Empty());
30*09537850SAkhilesh Sanikop 
31*09537850SAkhilesh Sanikop   for (int i = 0; i < kStackSize; ++i) {
32*09537850SAkhilesh Sanikop     stack.Push(i);
33*09537850SAkhilesh Sanikop     EXPECT_FALSE(stack.Empty());
34*09537850SAkhilesh Sanikop   }
35*09537850SAkhilesh Sanikop 
36*09537850SAkhilesh Sanikop   for (int i = kStackSize - 1; i >= 0; --i) {
37*09537850SAkhilesh Sanikop     EXPECT_EQ(stack.Pop(), i);
38*09537850SAkhilesh Sanikop   }
39*09537850SAkhilesh Sanikop   EXPECT_TRUE(stack.Empty());
40*09537850SAkhilesh Sanikop }
41*09537850SAkhilesh Sanikop 
TEST(StackTest,LargeStruct)42*09537850SAkhilesh Sanikop TEST(StackTest, LargeStruct) {
43*09537850SAkhilesh Sanikop   struct LargeMoveOnlyStruct {
44*09537850SAkhilesh Sanikop     LargeMoveOnlyStruct() = default;
45*09537850SAkhilesh Sanikop     // Move only.
46*09537850SAkhilesh Sanikop     LargeMoveOnlyStruct(LargeMoveOnlyStruct&& other) = default;
47*09537850SAkhilesh Sanikop     LargeMoveOnlyStruct& operator=(LargeMoveOnlyStruct&& other) = default;
48*09537850SAkhilesh Sanikop 
49*09537850SAkhilesh Sanikop     int32_t array1[1000];
50*09537850SAkhilesh Sanikop     uint64_t array2[2000];
51*09537850SAkhilesh Sanikop   };
52*09537850SAkhilesh Sanikop 
53*09537850SAkhilesh Sanikop   Stack<LargeMoveOnlyStruct, kStackSize> stack;
54*09537850SAkhilesh Sanikop   EXPECT_TRUE(stack.Empty());
55*09537850SAkhilesh Sanikop 
56*09537850SAkhilesh Sanikop   LargeMoveOnlyStruct large_move_only_struct[kStackSize];
57*09537850SAkhilesh Sanikop   for (int i = 0; i < kStackSize; ++i) {
58*09537850SAkhilesh Sanikop     LargeMoveOnlyStruct& l = large_move_only_struct[i];
59*09537850SAkhilesh Sanikop     l.array1[0] = i;
60*09537850SAkhilesh Sanikop     l.array2[0] = i;
61*09537850SAkhilesh Sanikop     stack.Push(std::move(l));
62*09537850SAkhilesh Sanikop     EXPECT_FALSE(stack.Empty());
63*09537850SAkhilesh Sanikop   }
64*09537850SAkhilesh Sanikop 
65*09537850SAkhilesh Sanikop   for (int i = kStackSize - 1; i >= 0; --i) {
66*09537850SAkhilesh Sanikop     LargeMoveOnlyStruct l = stack.Pop();
67*09537850SAkhilesh Sanikop     EXPECT_EQ(l.array1[0], i);
68*09537850SAkhilesh Sanikop     EXPECT_EQ(l.array2[0], i);
69*09537850SAkhilesh Sanikop   }
70*09537850SAkhilesh Sanikop   EXPECT_TRUE(stack.Empty());
71*09537850SAkhilesh Sanikop }
72*09537850SAkhilesh Sanikop 
73*09537850SAkhilesh Sanikop }  // namespace
74*09537850SAkhilesh Sanikop }  // namespace libgav1
75