0580580977e6ae95d0abebd18eaba689e04fb08c
[oota-llvm.git] / unittests / ADT / MapVectorTest.cpp
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 <utility>
13
14 using namespace llvm;
15
16 TEST(MapVectorTest, insert_pop) {
17   MapVector<int, int> MV;
18   std::pair<MapVector<int, int>::iterator, bool> R;
19
20   R = MV.insert(std::make_pair(1, 2));
21   ASSERT_EQ(R.first, MV.begin());
22   EXPECT_EQ(R.first->first, 1);
23   EXPECT_EQ(R.first->second, 2);
24   EXPECT_TRUE(R.second);
25
26   R = MV.insert(std::make_pair(1, 3));
27   ASSERT_EQ(R.first, MV.begin());
28   EXPECT_EQ(R.first->first, 1);
29   EXPECT_EQ(R.first->second, 2);
30   EXPECT_FALSE(R.second);
31
32   R = MV.insert(std::make_pair(4, 5));
33   ASSERT_NE(R.first, MV.end());
34   EXPECT_EQ(R.first->first, 4);
35   EXPECT_EQ(R.first->second, 5);
36   EXPECT_TRUE(R.second);
37
38   EXPECT_EQ(MV.size(), 2u);
39   EXPECT_EQ(MV[1], 2);
40   EXPECT_EQ(MV[4], 5);
41
42   MV.pop_back();
43   EXPECT_EQ(MV.size(), 1u);
44   EXPECT_EQ(MV[1], 2);
45
46   R = MV.insert(std::make_pair(4, 7));
47   ASSERT_NE(R.first, MV.end());
48   EXPECT_EQ(R.first->first, 4);
49   EXPECT_EQ(R.first->second, 7);
50   EXPECT_TRUE(R.second);  
51
52   EXPECT_EQ(MV.size(), 2u);
53   EXPECT_EQ(MV[1], 2);
54   EXPECT_EQ(MV[4], 7);
55 }
56
57 TEST(MapVectorTest, erase) {
58   MapVector<int, int> MV;
59
60   MV.insert(std::make_pair(1, 2));
61   MV.insert(std::make_pair(3, 4));
62   MV.insert(std::make_pair(5, 6));
63   ASSERT_EQ(MV.size(), 3u);
64
65   MV.erase(MV.find(1));
66   ASSERT_EQ(MV.size(), 2u);
67   ASSERT_EQ(MV.find(1), MV.end());
68   ASSERT_EQ(MV[3], 4);
69   ASSERT_EQ(MV[5], 6);
70
71   MV.erase(3);
72   ASSERT_EQ(MV.size(), 1u);
73   ASSERT_EQ(MV.find(3), MV.end());
74   ASSERT_EQ(MV[5], 6);
75 }
76
77 TEST(MapVectorTest, remove_if) {
78   MapVector<int, int> MV;
79
80   MV.insert(std::make_pair(1, 11));
81   MV.insert(std::make_pair(2, 12));
82   MV.insert(std::make_pair(3, 13));
83   MV.insert(std::make_pair(4, 14));
84   MV.insert(std::make_pair(5, 15));
85   MV.insert(std::make_pair(6, 16));
86   ASSERT_EQ(MV.size(), 6u);
87
88   MV.remove_if([](const std::pair<int, int> &Val) { return Val.second % 2; });
89   ASSERT_EQ(MV.size(), 3u);
90   ASSERT_EQ(MV.find(1), MV.end());
91   ASSERT_EQ(MV.find(3), MV.end());
92   ASSERT_EQ(MV.find(5), MV.end());
93   ASSERT_EQ(MV[2], 12);
94   ASSERT_EQ(MV[4], 14);
95   ASSERT_EQ(MV[6], 16);
96 }