1736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol/*
2736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * Copyright (C) 2016 The Android Open Source Project
3736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol *
4736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
5736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * you may not use this file except in compliance with the License.
6736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * You may obtain a copy of the License at
7736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol *
8736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
9736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol *
10736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * Unless required by applicable law or agreed to in writing, software
11736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
12736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * See the License for the specific language governing permissions and
14736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol * limitations under the License.
15736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol */
16736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
17736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol#include "gtest/gtest.h"
18736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
19736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol#include "chre/util/fixed_size_vector.h"
20736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
21736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignolusing chre::FixedSizeVector;
22736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
2312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chungnamespace {
2412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chungconstexpr int kMaxTestCapacity = 10;
2512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chungint destructor_count[kMaxTestCapacity];
2612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
2712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chungclass Foo {
2812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung public:
2912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ~Foo() {
3012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung    if (mValue >= 0) {
3112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung      destructor_count[mValue]++;
3212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung    }
3312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  };
3412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  void setValue(int value) {
3512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung    mValue = value;
3612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  }
3712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
3812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung private:
3912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  int mValue = -1;
4012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung};
4112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
4212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
43736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew RossignolTEST(FixedSizeVector, EmptyWithCapacityWithDefault) {
44736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  FixedSizeVector<int, 8> testVector;
45736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_NE(testVector.data(), nullptr);
46736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.size(), 0);
47736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.capacity(), 8);
48736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_TRUE(testVector.empty());
49736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_FALSE(testVector.full());
50736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol}
51736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
52736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew RossignolTEST(FixedSizeVector, PushBackOneAndRead) {
53736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  FixedSizeVector<int, 8> testVector;
54736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  testVector.push_back(0x1337);
55736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_NE(testVector.data(), nullptr);
56736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.size(), 1);
57736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.capacity(), 8);
58736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_FALSE(testVector.empty());
59736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_FALSE(testVector.full());
60736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector[0], 0x1337);
61736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol}
62736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
63736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew RossignolTEST(FixedSizeVector, PushBackUntilFullAndRead) {
64736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  FixedSizeVector<int, 4> testVector;
65736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  testVector.push_back(1000);
66736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  testVector.push_back(2000);
67736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  testVector.push_back(3000);
68736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  testVector.push_back(4000);
69736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
70736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_NE(testVector.data(), nullptr);
71736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_TRUE(testVector.full());
72736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_FALSE(testVector.empty());
73736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.size(), 4);
74736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector[0], 1000);
75736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector[1], 2000);
76736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector[2], 3000);
77736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector[3], 4000);
78736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol
79736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.data()[0], 1000);
80736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.data()[1], 2000);
81736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.data()[2], 3000);
82736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol  ASSERT_EQ(testVector.data()[3], 4000);
83736620171d63e1f0c0be70f9c27e2679fca5eaadAndrew Rossignol}
8412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
8512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan ChungTEST(FixedSizeVector, PushBackAndErase) {
8612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
8712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0x1337);
8812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xcafe);
8912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xbeef);
9012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xface);
9112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
9212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.erase(1);
9312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector[0], 0x1337);
9412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector.data()[0], 0x1337);
9512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector[1], 0xbeef);
9612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector.data()[1], 0xbeef);
9712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector[2], 0xface);
9812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector.data()[2], 0xface);
9912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  ASSERT_EQ(vector.size(), 3);
10012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
10112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
10212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan ChungTEST(FixedSizeVector, EraseDestructorCalled) {
10312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  FixedSizeVector<Foo, 4> vector;
10412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  for (size_t i = 0; i < 4; ++i) {
10512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung    vector.push_back(Foo());
10612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung    vector[i].setValue(i);
10712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  }
10812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
10912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  // last item before erase is '3'.
11012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.erase(1);
11112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[0]);
11212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[1]);
11312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[2]);
11412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(1, destructor_count[3]);
11512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
11612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  // last item before erase is still '3'.
11712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.erase(2);
11812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[0]);
11912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[1]);
12012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[2]);
12112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(2, destructor_count[3]);
12212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
12312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  // last item before erase is now '2'.
12412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.erase(0);
12512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[0]);
12612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(0, destructor_count[1]);
12712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(1, destructor_count[2]);
12812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(2, destructor_count[3]);
12912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
13012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
13112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan ChungTEST(FixedSizeVectorDeathTest, SwapWithInvalidIndex) {
13212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  FixedSizeVector<int, 4> vector;
13312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0x1337);
13412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xcafe);
13512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_DEATH(vector.swap(0, 2), "");
13612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
13712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
13812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan ChungTEST(FixedSizeVectorDeathTest, SwapWithInvalidIndices) {
13912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  FixedSizeVector<int, 4> vector;
14012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0x1337);
14112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xcafe);
14212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_DEATH(vector.swap(2, 3), "");
14312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
14412048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
14512048259ea9203bccb00460b821a40731249f1e2Meng-hsuan ChungTEST(FixedSizeVector, Swap) {
14612048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  FixedSizeVector<int, 4> vector;
14712048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0x1337);
14812048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.push_back(0xcafe);
14912048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung
15012048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  vector.swap(0, 1);
15112048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(vector[0], 0xcafe);
15212048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung  EXPECT_EQ(vector[1], 0x1337);
15312048259ea9203bccb00460b821a40731249f1e2Meng-hsuan Chung}
15490c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung
1557f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew RossignolTEST(FixedSizeVector, ResizeLarger) {
1567f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  FixedSizeVector<int, 4> vector;
1577f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  vector.resize(4);
1587f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  EXPECT_EQ(vector.size(), 4);
1597f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol}
1607f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol
1617f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew RossignolTEST(FixedSizeVector, ResizeSmaller) {
1627f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  destructor_count[0] = 0;
1637f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol
1647f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  FixedSizeVector<Foo, 4> vector;
1657f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  for (size_t i = 0; i < 3; i++) {
1667f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol    vector.push_back(Foo());
1677f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol    vector[i].setValue(0);
1687f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  }
1697f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol
1707f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  EXPECT_EQ(vector.size(), 3);
1717f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  EXPECT_EQ(destructor_count[0], 0);
1727f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  vector.resize(2);
1737f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  EXPECT_EQ(vector.size(), 2);
1747f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  EXPECT_EQ(destructor_count[0], 1);
1757f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol}
1767f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol
17790c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan ChungTEST(FixedSizeVector, Iterator) {
17890c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
17990c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  vector.push_back(0);
18090c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  vector.push_back(1);
18190c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  vector.push_back(2);
18290c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung
18390c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  size_t index = 0;
1847f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol  for (FixedSizeVector<int, 8>::iterator it = vector.begin();
1857f40ab39c4b3eb24327edf2be9e74d521d41532fAndrew Rossignol       it != vector.end(); ++it) {
18690c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung    EXPECT_EQ(vector[index++], *it);
18790c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  }
18890c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung
18990c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it = vector.begin() + vector.size() - 1;
19090c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  EXPECT_EQ(vector[vector.size() - 1], *it);
19190c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung
19290c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  it = vector.begin() + vector.size();
19390c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung  EXPECT_TRUE(it == vector.end());
19490c04ef3564eb228eebb5da5b21bb80e5e46e299Meng-hsuan Chung}
195e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
196e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, ConstIterator) {
197e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
198e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
199e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
200e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
201e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
202e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
203e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  for (FixedSizeVector<int, 8>::const_iterator cit = vector.cbegin();
204e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung       cit != vector.cend(); ++cit) {
205e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    EXPECT_EQ(vector[index++], *cit);
206e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
207e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
208e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::const_iterator cit =
209e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung      vector.cbegin() + vector.size() - 1;
210e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  EXPECT_EQ(vector[vector.size() - 1], *cit);
211e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
212e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  cit = vector.cbegin() + vector.size();
213e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  EXPECT_TRUE(cit == vector.cend());
214e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
215e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
216e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, IteratorAndPushBack) {
217e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
218e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
219e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
220e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
221e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
222e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_b = vector.begin();
223e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_e = vector.end();
224e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
225e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(3);
226e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
227e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
228e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  while (it_b != it_e) {
229e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    EXPECT_EQ(vector[index++], *it_b++);
230e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
231e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
232e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
233e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, IteratorAndEmplaceBack) {
234e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
235e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
236e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
237e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
238e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
239e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_b = vector.begin();
240e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_e = vector.end();
241e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
242e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.emplace_back(3);
243e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
244e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
245e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  while (it_b != it_e) {
246e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    EXPECT_EQ(vector[index++], *it_b++);
247e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
248e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
249e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
250e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, IteratorAndErase) {
251e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
252e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
253e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
254e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
255e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
256e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_b = vector.begin();
257e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
258e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.erase(2);
259e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
260e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
261e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  while (index < 2) {
262e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    EXPECT_EQ(vector[index++], *it_b++);
263e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
264e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
265e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
266e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, IteratorAndSwap) {
267e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
268e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
269e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
270e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
271e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(3);
272e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
273e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_b = vector.begin();
274e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
275e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.swap(1, 3);
276e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
277e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
278e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  while (index < 4) {
279e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    if (index != 1 && index != 3) {
280e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung      EXPECT_EQ(vector[index], *it_b);
281e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    }
282e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    index++;
283e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    it_b++;
284e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
285e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
286e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
287e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan ChungTEST(FixedSizeVector, IteratorAndResize) {
288e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8> vector;
289e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(0);
290e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(1);
291e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(2);
292e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.push_back(3);
293e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
294e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  FixedSizeVector<int, 8>::iterator it_b = vector.begin();
295e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
296e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  vector.resize(2);
297e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung
298e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  size_t index = 0;
299e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  while (index < 2) {
300e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung    EXPECT_EQ(vector[index++], *it_b++);
301e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung  }
302e1129bcc6fb320fd1752cd6c900ead2a0595c761Meng-hsuan Chung}
303