1 //
2 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // FixedVector_unittest:
7 // Tests of the FixedVector class
8 //
9
10 #include <gtest/gtest.h>
11
12 #include "common/FixedVector.h"
13
14 namespace angle
15 {
16 // Make sure the various constructors compile and do basic checks
TEST(FixedVector,Constructors)17 TEST(FixedVector, Constructors)
18 {
19 FixedVector<int, 5> defaultContructor;
20 EXPECT_EQ(0u, defaultContructor.size());
21
22 FixedVector<int, 5> count(3);
23 EXPECT_EQ(3u, count.size());
24
25 FixedVector<int, 5> countAndValue(3, 2);
26 EXPECT_EQ(3u, countAndValue.size());
27 EXPECT_EQ(2, countAndValue[1]);
28
29 FixedVector<int, 5> copy(countAndValue);
30 EXPECT_EQ(copy, countAndValue);
31
32 FixedVector<int, 5> copyRValue(std::move(count));
33 EXPECT_EQ(3u, copyRValue.size());
34
35 FixedVector<int, 5> initializerList{1, 2, 3, 4, 5};
36 EXPECT_EQ(5u, initializerList.size());
37 EXPECT_EQ(3, initializerList[2]);
38
39 FixedVector<int, 5> assignCopy(copyRValue);
40 EXPECT_EQ(3u, assignCopy.size());
41
42 FixedVector<int, 5> assignRValue(std::move(assignCopy));
43 EXPECT_EQ(3u, assignRValue.size());
44
45 FixedVector<int, 5> assignmentInitializerList = {1, 2, 3, 4, 5};
46 EXPECT_EQ(5u, assignmentInitializerList.size());
47 EXPECT_EQ(3, assignmentInitializerList[2]);
48 }
49
50 // Test indexing operations (at, operator[])
TEST(FixedVector,Indexing)51 TEST(FixedVector, Indexing)
52 {
53 FixedVector<int, 5> vec = {0, 1, 2, 3, 4};
54 EXPECT_EQ(0, vec.at(0));
55 EXPECT_EQ(vec[0], vec.at(0));
56 }
57
58 // Test the push_back functions
TEST(FixedVector,PushBack)59 TEST(FixedVector, PushBack)
60 {
61 FixedVector<int, 5> vec;
62 vec.push_back(1);
63 EXPECT_EQ(1, vec[0]);
64 vec.push_back(1);
65 vec.push_back(1);
66 vec.push_back(1);
67 vec.push_back(1);
68 EXPECT_EQ(vec.size(), vec.max_size());
69 }
70
71 // Test the pop_back function
TEST(FixedVector,PopBack)72 TEST(FixedVector, PopBack)
73 {
74 FixedVector<int, 5> vec;
75 vec.push_back(1);
76 EXPECT_EQ(1, (int)vec.size());
77 vec.pop_back();
78 EXPECT_EQ(0, (int)vec.size());
79 }
80
81 // Test the back function
TEST(FixedVector,Back)82 TEST(FixedVector, Back)
83 {
84 FixedVector<int, 5> vec;
85 vec.push_back(1);
86 vec.push_back(2);
87 EXPECT_EQ(2, vec.back());
88 }
89
90 // Test the sizing operations
TEST(FixedVector,Size)91 TEST(FixedVector, Size)
92 {
93 FixedVector<int, 5> vec;
94 EXPECT_TRUE(vec.empty());
95 EXPECT_EQ(0u, vec.size());
96 EXPECT_EQ(5u, vec.max_size());
97
98 vec.push_back(1);
99 EXPECT_FALSE(vec.empty());
100 EXPECT_EQ(1u, vec.size());
101 }
102
103 // Test clearing the vector
TEST(FixedVector,Clear)104 TEST(FixedVector, Clear)
105 {
106 FixedVector<int, 5> vec = {0, 1, 2, 3, 4};
107 vec.clear();
108 EXPECT_TRUE(vec.empty());
109 }
110
111 // Test resizing the vector
TEST(FixedVector,Resize)112 TEST(FixedVector, Resize)
113 {
114 FixedVector<int, 5> vec;
115 vec.resize(5u, 1);
116 EXPECT_EQ(5u, vec.size());
117 EXPECT_EQ(1, vec[4]);
118
119 vec.resize(2u);
120 EXPECT_EQ(2u, vec.size());
121 }
122
123 // Test iterating over the vector
TEST(FixedVector,Iteration)124 TEST(FixedVector, Iteration)
125 {
126 FixedVector<int, 5> vec = {0, 1, 2, 3};
127
128 int vistedCount = 0;
129 for (int value : vec)
130 {
131 EXPECT_EQ(vistedCount, value);
132 vistedCount++;
133 }
134 EXPECT_EQ(4, vistedCount);
135 }
136
137 // Test the "full" method.
TEST(FixedVector,Full)138 TEST(FixedVector, Full)
139 {
140 FixedVector<int, 2> vec;
141
142 EXPECT_FALSE(vec.full());
143 vec.push_back(0);
144 EXPECT_FALSE(vec.full());
145 vec.push_back(1);
146 EXPECT_TRUE(vec.full());
147 }
148 } // namespace angle
149