xref: /llvm-project/llvm/unittests/ADT/PagedVectorTest.cpp (revision 8580010672e9ff37b0744927296ca00dbcbef5be)
14ae51570SGiulio Eulisse //===- llvm/unittest/ADT/PagedVectorTest.cpp ------------------------------===//
24ae51570SGiulio Eulisse //
34ae51570SGiulio Eulisse // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44ae51570SGiulio Eulisse // See https://llvm.org/LICENSE.txt for license information.
54ae51570SGiulio Eulisse // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
64ae51570SGiulio Eulisse //
74ae51570SGiulio Eulisse //===----------------------------------------------------------------------===//
84ae51570SGiulio Eulisse //
94ae51570SGiulio Eulisse // PagedVector unit tests.
104ae51570SGiulio Eulisse //
114ae51570SGiulio Eulisse //===----------------------------------------------------------------------===//
124ae51570SGiulio Eulisse 
134ae51570SGiulio Eulisse #include "llvm/ADT/PagedVector.h"
144ae51570SGiulio Eulisse #include "gtest/gtest.h"
154ae51570SGiulio Eulisse #include <iterator>
164ae51570SGiulio Eulisse 
174ae51570SGiulio Eulisse namespace llvm {
TEST(PagedVectorTest,EmptyTest)184ae51570SGiulio Eulisse TEST(PagedVectorTest, EmptyTest) {
194ae51570SGiulio Eulisse   PagedVector<int, 10> V;
204ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), true);
214ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 0ULL);
224ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 0ULL);
234ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_begin().getIndex(), 0ULL);
244ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_end().getIndex(), 0ULL);
254ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
264ae51570SGiulio Eulisse 
27*85800106SJakub Kuderski #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
284ae51570SGiulio Eulisse   EXPECT_DEATH(V[0], "Index < Size");
294ae51570SGiulio Eulisse   EXPECT_DEATH(PagedVector<int>(nullptr), "Allocator cannot be null");
30*85800106SJakub Kuderski #endif
314ae51570SGiulio Eulisse }
324ae51570SGiulio Eulisse 
TEST(PagedVectorTest,ExpandTest)334ae51570SGiulio Eulisse TEST(PagedVectorTest, ExpandTest) {
344ae51570SGiulio Eulisse   PagedVector<int, 10> V;
354ae51570SGiulio Eulisse   V.resize(2);
364ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
374ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 2ULL);
384ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
394ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_begin().getIndex(), 2ULL);
404ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_end().getIndex(), 2ULL);
414ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
424ae51570SGiulio Eulisse }
434ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FullPageFillingTest)444ae51570SGiulio Eulisse TEST(PagedVectorTest, FullPageFillingTest) {
454ae51570SGiulio Eulisse   PagedVector<int, 10> V;
464ae51570SGiulio Eulisse   V.resize(10);
474ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
484ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 10ULL);
494ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
504ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
514ae51570SGiulio Eulisse     V[I] = I;
524ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
534ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 10ULL);
544ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
554ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_begin().getIndex(), 0ULL);
564ae51570SGiulio Eulisse   EXPECT_EQ(V.materialized_end().getIndex(), 10ULL);
574ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 10LL);
584ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
594ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
604ae51570SGiulio Eulisse }
614ae51570SGiulio Eulisse 
TEST(PagedVectorTest,HalfPageFillingTest)624ae51570SGiulio Eulisse TEST(PagedVectorTest, HalfPageFillingTest) {
634ae51570SGiulio Eulisse   PagedVector<int, 10> V;
644ae51570SGiulio Eulisse   V.resize(5);
654ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
664ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 5ULL);
674ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
684ae51570SGiulio Eulisse   for (int I = 0; I < 5; ++I)
694ae51570SGiulio Eulisse     V[I] = I;
704ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 5LL);
714ae51570SGiulio Eulisse   for (int I = 0; I < 5; ++I)
724ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
73*85800106SJakub Kuderski 
74*85800106SJakub Kuderski #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
754ae51570SGiulio Eulisse   for (int I = 5; I < 10; ++I)
764ae51570SGiulio Eulisse     EXPECT_DEATH(V[I], "Index < Size");
77*85800106SJakub Kuderski #endif
784ae51570SGiulio Eulisse }
794ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FillFullMultiPageTest)804ae51570SGiulio Eulisse TEST(PagedVectorTest, FillFullMultiPageTest) {
814ae51570SGiulio Eulisse   PagedVector<int, 10> V;
824ae51570SGiulio Eulisse   V.resize(20);
834ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
844ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 20ULL);
854ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 20ULL);
864ae51570SGiulio Eulisse   for (int I = 0; I < 20; ++I)
874ae51570SGiulio Eulisse     V[I] = I;
884ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 20LL);
894ae51570SGiulio Eulisse   for (auto MI = V.materialized_begin(), ME = V.materialized_end(); MI != ME;
904ae51570SGiulio Eulisse        ++MI)
914ae51570SGiulio Eulisse     EXPECT_EQ(*MI, std::distance(V.materialized_begin(), MI));
924ae51570SGiulio Eulisse }
934ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FillHalfMultiPageTest)944ae51570SGiulio Eulisse TEST(PagedVectorTest, FillHalfMultiPageTest) {
954ae51570SGiulio Eulisse   PagedVector<int, 10> V;
964ae51570SGiulio Eulisse   V.resize(20);
974ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
984ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 20ULL);
994ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 20ULL);
1004ae51570SGiulio Eulisse   for (int I = 0; I < 5; ++I)
1014ae51570SGiulio Eulisse     V[I] = I;
1024ae51570SGiulio Eulisse   for (int I = 10; I < 15; ++I)
1034ae51570SGiulio Eulisse     V[I] = I;
1044ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 20LL);
1054ae51570SGiulio Eulisse   for (int I = 0; I < 5; ++I)
1064ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
1074ae51570SGiulio Eulisse   for (int I = 10; I < 15; ++I)
1084ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
1094ae51570SGiulio Eulisse }
1104ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FillLastMultiPageTest)1114ae51570SGiulio Eulisse TEST(PagedVectorTest, FillLastMultiPageTest) {
1124ae51570SGiulio Eulisse   PagedVector<int, 10> V;
1134ae51570SGiulio Eulisse   V.resize(20);
1144ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
1154ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 20ULL);
1164ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 20ULL);
1174ae51570SGiulio Eulisse   for (int I = 10; I < 15; ++I)
1184ae51570SGiulio Eulisse     V[I] = I;
1194ae51570SGiulio Eulisse   for (int I = 10; I < 15; ++I)
1204ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
1214ae51570SGiulio Eulisse 
1224ae51570SGiulio Eulisse   // Since we fill the last page only, the materialized vector
1234ae51570SGiulio Eulisse   // should contain only the last page.
1244ae51570SGiulio Eulisse   int J = 10;
1254ae51570SGiulio Eulisse   for (auto MI = V.materialized_begin(), ME = V.materialized_end(); MI != ME;
1264ae51570SGiulio Eulisse        ++MI) {
1274ae51570SGiulio Eulisse     if (J < 15)
1284ae51570SGiulio Eulisse       EXPECT_EQ(*MI, J);
1294ae51570SGiulio Eulisse     else
1304ae51570SGiulio Eulisse       EXPECT_EQ(*MI, 0);
1314ae51570SGiulio Eulisse     ++J;
1324ae51570SGiulio Eulisse   }
1334ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 10LL);
1344ae51570SGiulio Eulisse }
1354ae51570SGiulio Eulisse 
1364ae51570SGiulio Eulisse // Filling the first element of all the pages
1374ae51570SGiulio Eulisse // will allocate all of them
TEST(PagedVectorTest,FillSparseMultiPageTest)1384ae51570SGiulio Eulisse TEST(PagedVectorTest, FillSparseMultiPageTest) {
1394ae51570SGiulio Eulisse   PagedVector<int, 10> V;
1404ae51570SGiulio Eulisse   V.resize(100);
1414ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
1424ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 100ULL);
1434ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 100ULL);
1444ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
1454ae51570SGiulio Eulisse     V[I * 10] = I;
1464ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 100LL);
1474ae51570SGiulio Eulisse   for (int I = 0; I < 100; ++I)
1484ae51570SGiulio Eulisse     if (I % 10 == 0)
1494ae51570SGiulio Eulisse       EXPECT_EQ(V[I], I / 10);
1504ae51570SGiulio Eulisse     else
1514ae51570SGiulio Eulisse       EXPECT_EQ(V[I], 0);
1524ae51570SGiulio Eulisse }
1534ae51570SGiulio Eulisse 
1544ae51570SGiulio Eulisse struct TestHelper {
1554ae51570SGiulio Eulisse   int A = -1;
1564ae51570SGiulio Eulisse };
1574ae51570SGiulio Eulisse 
1584ae51570SGiulio Eulisse // Use this to count how many times the constructor / destructor are called
1594ae51570SGiulio Eulisse struct TestHelper2 {
1604ae51570SGiulio Eulisse   int A = -1;
1614ae51570SGiulio Eulisse   static int constructed;
1624ae51570SGiulio Eulisse   static int destroyed;
1634ae51570SGiulio Eulisse 
TestHelper2llvm::TestHelper21644ae51570SGiulio Eulisse   TestHelper2() { constructed++; }
~TestHelper2llvm::TestHelper21654ae51570SGiulio Eulisse   ~TestHelper2() { destroyed++; }
1664ae51570SGiulio Eulisse };
1674ae51570SGiulio Eulisse 
1684ae51570SGiulio Eulisse int TestHelper2::constructed = 0;
1694ae51570SGiulio Eulisse int TestHelper2::destroyed = 0;
1704ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FillNonTrivialConstructor)1714ae51570SGiulio Eulisse TEST(PagedVectorTest, FillNonTrivialConstructor) {
1724ae51570SGiulio Eulisse   PagedVector<TestHelper, 10> V;
1734ae51570SGiulio Eulisse   V.resize(10);
1744ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
1754ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 10ULL);
1764ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
1774ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
1784ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
1794ae51570SGiulio Eulisse     EXPECT_EQ(V[I].A, -1);
1804ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 10LL);
1814ae51570SGiulio Eulisse }
1824ae51570SGiulio Eulisse 
1834ae51570SGiulio Eulisse // Elements are constructed, destructed in pages, so we expect
1844ae51570SGiulio Eulisse // the number of constructed / destructed elements to be a multiple of the
1854ae51570SGiulio Eulisse // page size and the constructor is invoked when the page is actually accessed
1864ae51570SGiulio Eulisse // the first time.
TEST(PagedVectorTest,FillNonTrivialConstructorDestructor)1874ae51570SGiulio Eulisse TEST(PagedVectorTest, FillNonTrivialConstructorDestructor) {
1884ae51570SGiulio Eulisse   PagedVector<TestHelper2, 10> V;
1894ae51570SGiulio Eulisse   V.resize(19);
1904ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::constructed, 0);
1914ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
1924ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 19ULL);
1934ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 20ULL);
1944ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
1954ae51570SGiulio Eulisse   EXPECT_EQ(V[0].A, -1);
1964ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::constructed, 10);
1974ae51570SGiulio Eulisse 
1984ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I) {
1994ae51570SGiulio Eulisse     EXPECT_EQ(V[I].A, -1);
2004ae51570SGiulio Eulisse     EXPECT_EQ(TestHelper2::constructed, 10);
2014ae51570SGiulio Eulisse   }
2024ae51570SGiulio Eulisse   for (int I = 10; I < 11; ++I) {
2034ae51570SGiulio Eulisse     EXPECT_EQ(V[I].A, -1);
2044ae51570SGiulio Eulisse     EXPECT_EQ(TestHelper2::constructed, 20);
2054ae51570SGiulio Eulisse   }
2064ae51570SGiulio Eulisse   for (int I = 0; I < 19; ++I) {
2074ae51570SGiulio Eulisse     EXPECT_EQ(V[I].A, -1);
2084ae51570SGiulio Eulisse     EXPECT_EQ(TestHelper2::constructed, 20);
2094ae51570SGiulio Eulisse   }
2104ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 19LL);
2114ae51570SGiulio Eulisse   // We initialize the whole page, not just the materialized part
2124ae51570SGiulio Eulisse   // EXPECT_EQ(TestHelper2::constructed, 20);
2134ae51570SGiulio Eulisse   V.resize(18);
2144ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::destroyed, 0);
2154ae51570SGiulio Eulisse   V.resize(1);
2164ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::destroyed, 10);
2174ae51570SGiulio Eulisse   V.resize(0);
2184ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::destroyed, 20);
2194ae51570SGiulio Eulisse 
2204ae51570SGiulio Eulisse   // Add a few empty pages so that we can test that the destructor
2214ae51570SGiulio Eulisse   // is called only for the materialized pages
2224ae51570SGiulio Eulisse   V.resize(50);
2234ae51570SGiulio Eulisse   V[49].A = 0;
2244ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::constructed, 30);
2254ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::destroyed, 20);
2264ae51570SGiulio Eulisse   EXPECT_EQ(V[49].A, 0);
2274ae51570SGiulio Eulisse   V.resize(0);
2284ae51570SGiulio Eulisse   EXPECT_EQ(TestHelper2::destroyed, 30);
2294ae51570SGiulio Eulisse }
2304ae51570SGiulio Eulisse 
TEST(PagedVectorTest,ShrinkTest)2314ae51570SGiulio Eulisse TEST(PagedVectorTest, ShrinkTest) {
2324ae51570SGiulio Eulisse   PagedVector<int, 10> V;
2334ae51570SGiulio Eulisse   V.resize(20);
2344ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
2354ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 20ULL);
2364ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 20ULL);
2374ae51570SGiulio Eulisse   for (int I = 0; I < 20; ++I)
2384ae51570SGiulio Eulisse     V[I] = I;
2394ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 20LL);
2404ae51570SGiulio Eulisse   V.resize(9);
2414ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
2424ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 9ULL);
2434ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 10ULL);
2444ae51570SGiulio Eulisse   for (int I = 0; I < 9; ++I)
2454ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
2464ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 9LL);
2474ae51570SGiulio Eulisse   V.resize(0);
2484ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), true);
2494ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 0ULL);
2504ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 0ULL);
2514ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
252*85800106SJakub Kuderski 
253*85800106SJakub Kuderski #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
2544ae51570SGiulio Eulisse   EXPECT_DEATH(V[0], "Index < Size");
255*85800106SJakub Kuderski #endif
2564ae51570SGiulio Eulisse }
2574ae51570SGiulio Eulisse 
TEST(PagedVectorTest,FunctionalityTest)2584ae51570SGiulio Eulisse TEST(PagedVectorTest, FunctionalityTest) {
2594ae51570SGiulio Eulisse   PagedVector<int, 10> V;
2604ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), true);
2614ae51570SGiulio Eulisse 
2624ae51570SGiulio Eulisse   // Next ten numbers are 10..19
2634ae51570SGiulio Eulisse   V.resize(2);
2644ae51570SGiulio Eulisse   EXPECT_EQ(V.empty(), false);
2654ae51570SGiulio Eulisse   V.resize(10);
2664ae51570SGiulio Eulisse   V.resize(20);
2674ae51570SGiulio Eulisse   V.resize(30);
2684ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 0LL);
2694ae51570SGiulio Eulisse 
2704ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 30ULL);
2714ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
2724ae51570SGiulio Eulisse     V[I] = I;
2734ae51570SGiulio Eulisse   for (int I = 0; I < 10; ++I)
2744ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
2754ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 10LL);
2764ae51570SGiulio Eulisse   for (int I = 20; I < 30; ++I)
2774ae51570SGiulio Eulisse     V[I] = I;
2784ae51570SGiulio Eulisse   for (int I = 20; I < 30; ++I)
2794ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
2804ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 20LL);
2814ae51570SGiulio Eulisse 
2824ae51570SGiulio Eulisse   for (int I = 10; I < 20; ++I)
2834ae51570SGiulio Eulisse     V[I] = I;
2844ae51570SGiulio Eulisse   for (int I = 10; I < 20; ++I)
2854ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
2864ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 30LL);
2874ae51570SGiulio Eulisse   V.resize(35);
2884ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 30LL);
2894ae51570SGiulio Eulisse   for (int I = 30; I < 35; ++I)
2904ae51570SGiulio Eulisse     V[I] = I;
2914ae51570SGiulio Eulisse   EXPECT_EQ(std::distance(V.materialized_begin(), V.materialized_end()), 35LL);
2924ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 35ULL);
2934ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 40ULL);
2944ae51570SGiulio Eulisse   V.resize(37);
2954ae51570SGiulio Eulisse   for (int I = 30; I < 37; ++I)
2964ae51570SGiulio Eulisse     V[I] = I;
2974ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 37ULL);
2984ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 40ULL);
2994ae51570SGiulio Eulisse   for (int I = 0; I < 37; ++I)
3004ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
3014ae51570SGiulio Eulisse 
3024ae51570SGiulio Eulisse   V.resize(41);
3034ae51570SGiulio Eulisse   V[40] = 40;
3044ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 41ULL);
3054ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 50ULL);
3064ae51570SGiulio Eulisse   for (int I = 0; I < 36; ++I)
3074ae51570SGiulio Eulisse     EXPECT_EQ(V[I], I);
3084ae51570SGiulio Eulisse 
3094ae51570SGiulio Eulisse   for (int I = 37; I < 40; ++I)
3104ae51570SGiulio Eulisse     EXPECT_EQ(V[I], 0);
3114ae51570SGiulio Eulisse 
3124ae51570SGiulio Eulisse   V.resize(50);
3134ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 50ULL);
3144ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 50ULL);
3154ae51570SGiulio Eulisse   EXPECT_EQ(V[40], 40);
3164ae51570SGiulio Eulisse   V.resize(50ULL);
3174ae51570SGiulio Eulisse   V.clear();
3184ae51570SGiulio Eulisse   EXPECT_EQ(V.size(), 0ULL);
3194ae51570SGiulio Eulisse   EXPECT_EQ(V.capacity(), 0ULL);
3204ae51570SGiulio Eulisse }
3214ae51570SGiulio Eulisse } // namespace llvm
322