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