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