1 // Copyright (C) 2014 The Android Open Source Project
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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.
15 #include "emugl/common/pod_vector.h"
17 #include <gtest/gtest.h>
21 static int hashIndex(size_t n) {
22 return static_cast<int>(((n >> 14) * 13773) + (n * 51));
25 TEST(PodVector, Empty) {
27 EXPECT_TRUE(v.empty());
28 EXPECT_EQ(0U, v.size());
31 TEST(PodVector, AppendOneItem) {
34 EXPECT_FALSE(v.empty());
35 EXPECT_EQ(1U, v.size());
36 EXPECT_EQ(10234, v[0]);
39 TEST(PodVector, AppendLotsOfItems) {
41 const size_t kMaxCount = 10000;
42 for (size_t n = 0; n < kMaxCount; ++n) {
43 v.append(hashIndex(n));
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;
51 TEST(PodVector, RemoveFrontItems) {
53 const size_t kMaxCount = 100;
54 for (size_t n = 0; n < kMaxCount; ++n) {
55 v.append(hashIndex(n));
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;
61 EXPECT_EQ(kMaxCount - n - 1U, v.size()) << "At index " << n;
65 TEST(PodVector, PrependItems) {
67 const size_t kMaxCount = 100;
68 for (size_t n = 0; n < kMaxCount; ++n) {
69 v.prepend(hashIndex(n));
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;
77 TEST(PodVector, ResizeExpands) {
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));
84 EXPECT_EQ(kMaxCount, v.size());
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;
92 TEST(PodVector, ResizeTruncates) {
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));
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;
108 TEST(PodVector, AssignmentOperator) {
110 const size_t kMaxCount = 10000;
111 for (size_t n = 0; n < kMaxCount; ++n) {
112 v1.append(hashIndex(n));
114 EXPECT_EQ(kMaxCount, v1.size());
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;