143f2507fSBenjamin Kramer //===----------- ImmutableMapTest.cpp - ImmutableMap unit tests ------------===//
243f2507fSBenjamin Kramer //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
643f2507fSBenjamin Kramer //
743f2507fSBenjamin Kramer //===----------------------------------------------------------------------===//
843f2507fSBenjamin Kramer 
943f2507fSBenjamin Kramer #include "llvm/ADT/ImmutableMap.h"
109a67b073SChandler Carruth #include "gtest/gtest.h"
1143f2507fSBenjamin Kramer 
1243f2507fSBenjamin Kramer using namespace llvm;
1343f2507fSBenjamin Kramer 
1443f2507fSBenjamin Kramer namespace {
1543f2507fSBenjamin Kramer 
TEST(ImmutableMapTest,EmptyIntMapTest)1643f2507fSBenjamin Kramer TEST(ImmutableMapTest, EmptyIntMapTest) {
1743f2507fSBenjamin Kramer   ImmutableMap<int, int>::Factory f;
1843f2507fSBenjamin Kramer 
1943f2507fSBenjamin Kramer   EXPECT_TRUE(f.getEmptyMap() == f.getEmptyMap());
2043f2507fSBenjamin Kramer   EXPECT_FALSE(f.getEmptyMap() != f.getEmptyMap());
2143f2507fSBenjamin Kramer   EXPECT_TRUE(f.getEmptyMap().isEmpty());
2243f2507fSBenjamin Kramer 
2343f2507fSBenjamin Kramer   ImmutableMap<int, int> S = f.getEmptyMap();
2443f2507fSBenjamin Kramer   EXPECT_EQ(0u, S.getHeight());
2543f2507fSBenjamin Kramer   EXPECT_TRUE(S.begin() == S.end());
2643f2507fSBenjamin Kramer   EXPECT_FALSE(S.begin() != S.end());
2743f2507fSBenjamin Kramer }
2843f2507fSBenjamin Kramer 
TEST(ImmutableMapTest,MultiElemIntMapTest)2943f2507fSBenjamin Kramer TEST(ImmutableMapTest, MultiElemIntMapTest) {
3043f2507fSBenjamin Kramer   ImmutableMap<int, int>::Factory f;
3143f2507fSBenjamin Kramer   ImmutableMap<int, int> S = f.getEmptyMap();
3243f2507fSBenjamin Kramer 
3343f2507fSBenjamin Kramer   ImmutableMap<int, int> S2 = f.add(f.add(f.add(S, 3, 10), 4, 11), 5, 12);
3443f2507fSBenjamin Kramer 
3543f2507fSBenjamin Kramer   EXPECT_TRUE(S.isEmpty());
3643f2507fSBenjamin Kramer   EXPECT_FALSE(S2.isEmpty());
3743f2507fSBenjamin Kramer 
3866f09ad0SCraig Topper   EXPECT_EQ(nullptr, S.lookup(3));
3966f09ad0SCraig Topper   EXPECT_EQ(nullptr, S.lookup(9));
4043f2507fSBenjamin Kramer 
4143f2507fSBenjamin Kramer   EXPECT_EQ(10, *S2.lookup(3));
4243f2507fSBenjamin Kramer   EXPECT_EQ(11, *S2.lookup(4));
4343f2507fSBenjamin Kramer   EXPECT_EQ(12, *S2.lookup(5));
4443f2507fSBenjamin Kramer 
4543f2507fSBenjamin Kramer   EXPECT_EQ(5, S2.getMaxElement()->first);
4643f2507fSBenjamin Kramer   EXPECT_EQ(3U, S2.getHeight());
4743f2507fSBenjamin Kramer }
4843f2507fSBenjamin Kramer 
TEST(ImmutableMapTest,EmptyIntMapRefTest)49*184eb4faSAdam Balogh TEST(ImmutableMapTest, EmptyIntMapRefTest) {
50*184eb4faSAdam Balogh   using int_int_map = ImmutableMapRef<int, int>;
51*184eb4faSAdam Balogh   ImmutableMapRef<int, int>::FactoryTy f;
52*184eb4faSAdam Balogh 
53*184eb4faSAdam Balogh   EXPECT_TRUE(int_int_map::getEmptyMap(&f) == int_int_map::getEmptyMap(&f));
54*184eb4faSAdam Balogh   EXPECT_FALSE(int_int_map::getEmptyMap(&f) != int_int_map::getEmptyMap(&f));
55*184eb4faSAdam Balogh   EXPECT_TRUE(int_int_map::getEmptyMap(&f).isEmpty());
56*184eb4faSAdam Balogh 
57*184eb4faSAdam Balogh   int_int_map S = int_int_map::getEmptyMap(&f);
58*184eb4faSAdam Balogh   EXPECT_EQ(0u, S.getHeight());
59*184eb4faSAdam Balogh   EXPECT_TRUE(S.begin() == S.end());
60*184eb4faSAdam Balogh   EXPECT_FALSE(S.begin() != S.end());
61*184eb4faSAdam Balogh }
62*184eb4faSAdam Balogh 
TEST(ImmutableMapTest,MultiElemIntMapRefTest)63*184eb4faSAdam Balogh TEST(ImmutableMapTest, MultiElemIntMapRefTest) {
64*184eb4faSAdam Balogh   ImmutableMapRef<int, int>::FactoryTy f;
65*184eb4faSAdam Balogh 
66*184eb4faSAdam Balogh   ImmutableMapRef<int, int> S = ImmutableMapRef<int, int>::getEmptyMap(&f);
67*184eb4faSAdam Balogh 
68*184eb4faSAdam Balogh   ImmutableMapRef<int, int> S2 = S.add(3, 10).add(4, 11).add(5, 12);
69*184eb4faSAdam Balogh 
70*184eb4faSAdam Balogh   EXPECT_TRUE(S.isEmpty());
71*184eb4faSAdam Balogh   EXPECT_FALSE(S2.isEmpty());
72*184eb4faSAdam Balogh 
73*184eb4faSAdam Balogh   EXPECT_EQ(nullptr, S.lookup(3));
74*184eb4faSAdam Balogh   EXPECT_EQ(nullptr, S.lookup(9));
75*184eb4faSAdam Balogh 
76*184eb4faSAdam Balogh   EXPECT_EQ(10, *S2.lookup(3));
77*184eb4faSAdam Balogh   EXPECT_EQ(11, *S2.lookup(4));
78*184eb4faSAdam Balogh   EXPECT_EQ(12, *S2.lookup(5));
79*184eb4faSAdam Balogh 
80*184eb4faSAdam Balogh   EXPECT_EQ(5, S2.getMaxElement()->first);
81*184eb4faSAdam Balogh   EXPECT_EQ(3U, S2.getHeight());
82*184eb4faSAdam Balogh }
83*184eb4faSAdam Balogh 
TEST(ImmutableMapTest,MapOfMapRefsTest)84*184eb4faSAdam Balogh   TEST(ImmutableMapTest, MapOfMapRefsTest) {
85*184eb4faSAdam Balogh   ImmutableMap<int, ImmutableMapRef<int, int>>::Factory f;
86*184eb4faSAdam Balogh 
87*184eb4faSAdam Balogh   EXPECT_TRUE(f.getEmptyMap() == f.getEmptyMap());
88*184eb4faSAdam Balogh   }
89*184eb4faSAdam Balogh 
9043f2507fSBenjamin Kramer }
91