1 //===- unittest/ADT/MapVectorTest.cpp - MapVector unit tests ----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "gtest/gtest.h" 11 #include "llvm/ADT/MapVector.h" 12 #include "llvm/ADT/iterator_range.h" 13 #include <utility> 14 15 using namespace llvm; 16 17 TEST(MapVectorTest, insert_pop) { 18 MapVector<int, int> MV; 19 std::pair<MapVector<int, int>::iterator, bool> R; 20 21 R = MV.insert(std::make_pair(1, 2)); 22 ASSERT_EQ(R.first, MV.begin()); 23 EXPECT_EQ(R.first->first, 1); 24 EXPECT_EQ(R.first->second, 2); 25 EXPECT_TRUE(R.second); 26 27 R = MV.insert(std::make_pair(1, 3)); 28 ASSERT_EQ(R.first, MV.begin()); 29 EXPECT_EQ(R.first->first, 1); 30 EXPECT_EQ(R.first->second, 2); 31 EXPECT_FALSE(R.second); 32 33 R = MV.insert(std::make_pair(4, 5)); 34 ASSERT_NE(R.first, MV.end()); 35 EXPECT_EQ(R.first->first, 4); 36 EXPECT_EQ(R.first->second, 5); 37 EXPECT_TRUE(R.second); 38 39 EXPECT_EQ(MV.size(), 2u); 40 EXPECT_EQ(MV[1], 2); 41 EXPECT_EQ(MV[4], 5); 42 43 MV.pop_back(); 44 EXPECT_EQ(MV.size(), 1u); 45 EXPECT_EQ(MV[1], 2); 46 47 R = MV.insert(std::make_pair(4, 7)); 48 ASSERT_NE(R.first, MV.end()); 49 EXPECT_EQ(R.first->first, 4); 50 EXPECT_EQ(R.first->second, 7); 51 EXPECT_TRUE(R.second); 52 53 EXPECT_EQ(MV.size(), 2u); 54 EXPECT_EQ(MV[1], 2); 55 EXPECT_EQ(MV[4], 7); 56 } 57 58 TEST(MapVectorTest, erase) { 59 MapVector<int, int> MV; 60 61 MV.insert(std::make_pair(1, 2)); 62 MV.insert(std::make_pair(3, 4)); 63 MV.insert(std::make_pair(5, 6)); 64 ASSERT_EQ(MV.size(), 3u); 65 66 MV.erase(MV.find(1)); 67 ASSERT_EQ(MV.size(), 2u); 68 ASSERT_EQ(MV.find(1), MV.end()); 69 ASSERT_EQ(MV[3], 4); 70 ASSERT_EQ(MV[5], 6); 71 72 ASSERT_EQ(MV.erase(3), 1u); 73 ASSERT_EQ(MV.size(), 1u); 74 ASSERT_EQ(MV.find(3), MV.end()); 75 ASSERT_EQ(MV[5], 6); 76 77 ASSERT_EQ(MV.erase(79), 0u); 78 ASSERT_EQ(MV.size(), 1u); 79 } 80 81 TEST(MapVectorTest, remove_if) { 82 MapVector<int, int> MV; 83 84 MV.insert(std::make_pair(1, 11)); 85 MV.insert(std::make_pair(2, 12)); 86 MV.insert(std::make_pair(3, 13)); 87 MV.insert(std::make_pair(4, 14)); 88 MV.insert(std::make_pair(5, 15)); 89 MV.insert(std::make_pair(6, 16)); 90 ASSERT_EQ(MV.size(), 6u); 91 92 MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; }); 93 ASSERT_EQ(MV.size(), 3u); 94 ASSERT_EQ(MV.find(1), MV.end()); 95 ASSERT_EQ(MV.find(3), MV.end()); 96 ASSERT_EQ(MV.find(5), MV.end()); 97 ASSERT_EQ(MV[2], 12); 98 ASSERT_EQ(MV[4], 14); 99 ASSERT_EQ(MV[6], 16); 100 } 101 102 TEST(MapVectorTest, iteration_test) { 103 MapVector<int, int> MV; 104 105 MV.insert(std::make_pair(1, 11)); 106 MV.insert(std::make_pair(2, 12)); 107 MV.insert(std::make_pair(3, 13)); 108 MV.insert(std::make_pair(4, 14)); 109 MV.insert(std::make_pair(5, 15)); 110 MV.insert(std::make_pair(6, 16)); 111 ASSERT_EQ(MV.size(), 6u); 112 113 int count = 1; 114 for (auto P : make_range(MV.begin(), MV.end())) { 115 ASSERT_EQ(P.first, count); 116 count++; 117 } 118 119 count = 6; 120 for (auto P : make_range(MV.rbegin(), MV.rend())) { 121 ASSERT_EQ(P.first, count); 122 count--; 123 } 124 } 125