TYPE3
[iec.git] / src / type3_AndroidCloud / anbox-master / external / android-emugl / shared / emugl / common / pod_vector_unittest.cpp
1 // Copyright (C) 2014 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "emugl/common/pod_vector.h"
16
17 #include <gtest/gtest.h>
18
19 namespace emugl {
20
21 static int  hashIndex(size_t n) {
22     return static_cast<int>(((n >> 14) * 13773) + (n * 51));
23 }
24
25 TEST(PodVector, Empty) {
26     PodVector<int> v;
27     EXPECT_TRUE(v.empty());
28     EXPECT_EQ(0U, v.size());
29 }
30
31 TEST(PodVector, AppendOneItem) {
32     PodVector<int> v;
33     v.append(10234);
34     EXPECT_FALSE(v.empty());
35     EXPECT_EQ(1U, v.size());
36     EXPECT_EQ(10234, v[0]);
37 }
38
39 TEST(PodVector, AppendLotsOfItems) {
40     PodVector<int> v;
41     const size_t kMaxCount = 10000;
42     for (size_t n = 0; n < kMaxCount; ++n) {
43         v.append(hashIndex(n));
44     }
45     EXPECT_EQ(kMaxCount, v.size());
46     for (size_t n = 0; n < kMaxCount; ++n) {
47         EXPECT_EQ(hashIndex(n), v[n]) << "At index " << n;
48     }
49 }
50
51 TEST(PodVector, RemoveFrontItems) {
52     PodVector<int> v;
53     const size_t kMaxCount = 100;
54     for (size_t n = 0; n < kMaxCount; ++n) {
55         v.append(hashIndex(n));
56     }
57     EXPECT_EQ(kMaxCount, v.size());
58     for (size_t n = 0; n < kMaxCount; ++n) {
59         EXPECT_EQ(hashIndex(n), v[0]) << "At index " << n;
60         v.remove(0U);
61         EXPECT_EQ(kMaxCount - n - 1U, v.size()) << "At index " << n;
62     }
63 }
64
65 TEST(PodVector, PrependItems) {
66     PodVector<int> v;
67     const size_t kMaxCount = 100;
68     for (size_t n = 0; n < kMaxCount; ++n) {
69         v.prepend(hashIndex(n));
70     }
71     EXPECT_EQ(kMaxCount, v.size());
72     for (size_t n = 0; n < kMaxCount; ++n) {
73         EXPECT_EQ(hashIndex(kMaxCount - n - 1), v[n]) << "At index " << n;
74     }
75 }
76
77 TEST(PodVector, ResizeExpands) {
78     PodVector<int> v;
79     const size_t kMaxCount = 100;
80     const size_t kMaxCount2 = 10000;
81     for (size_t n = 0; n < kMaxCount; ++n) {
82         v.append(hashIndex(n));
83     }
84     EXPECT_EQ(kMaxCount, v.size());
85     v.resize(kMaxCount2);
86     EXPECT_EQ(kMaxCount2, v.size());
87     for (size_t n = 0; n < kMaxCount; ++n) {
88         EXPECT_EQ(hashIndex(n), v[n]) << "At index " << n;
89     }
90 }
91
92 TEST(PodVector, ResizeTruncates) {
93     PodVector<int> v;
94     const size_t kMaxCount = 10000;
95     const size_t kMaxCount2 = 10;
96     for (size_t n = 0; n < kMaxCount; ++n) {
97         v.append(hashIndex(n));
98     }
99     EXPECT_EQ(kMaxCount, v.size());
100     v.resize(kMaxCount2);
101     EXPECT_EQ(kMaxCount2, v.size());
102     for (size_t n = 0; n < kMaxCount2; ++n) {
103         EXPECT_EQ(hashIndex(n), v[n]) << "At index " << n;
104     }
105 }
106
107
108 TEST(PodVector, AssignmentOperator) {
109     PodVector<int> v1;
110     const size_t kMaxCount = 10000;
111     for (size_t n = 0; n < kMaxCount; ++n) {
112         v1.append(hashIndex(n));
113     }
114     EXPECT_EQ(kMaxCount, v1.size());
115
116     PodVector<int> v2;
117     v2 = v1;
118
119     v1.reserve(0);
120
121     EXPECT_EQ(kMaxCount, v2.size());
122     for (size_t n = 0; n < kMaxCount; ++n) {
123         EXPECT_EQ(hashIndex(n), v2[n]) << "At index " << n;
124     }
125 }
126
127 }  // namespace emugl