1 //===----------- ImmutableSetTest.cpp - ImmutableSet unit tests ------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/ADT/ImmutableSet.h"
10 #include "gtest/gtest.h"
15 class ImmutableSetTest
: public testing::Test
{
18 static char buffer
[10];
24 MyIter() : counter(0), ptr(buffer
) {
25 for (unsigned i
=0; i
<sizeof(buffer
);++i
) buffer
[i
]='\0';
27 void operator()(char c
) {
33 char ImmutableSetTest::buffer
[10];
36 TEST_F(ImmutableSetTest
, EmptyIntSetTest
) {
37 ImmutableSet
<int>::Factory f
;
39 EXPECT_TRUE(f
.getEmptySet() == f
.getEmptySet());
40 EXPECT_FALSE(f
.getEmptySet() != f
.getEmptySet());
41 EXPECT_TRUE(f
.getEmptySet().isEmpty());
43 ImmutableSet
<int> S
= f
.getEmptySet();
44 EXPECT_EQ(0u, S
.getHeight());
45 EXPECT_TRUE(S
.begin() == S
.end());
46 EXPECT_FALSE(S
.begin() != S
.end());
50 TEST_F(ImmutableSetTest
, OneElemIntSetTest
) {
51 ImmutableSet
<int>::Factory f
;
52 ImmutableSet
<int> S
= f
.getEmptySet();
54 ImmutableSet
<int> S2
= f
.add(S
, 3);
55 EXPECT_TRUE(S
.isEmpty());
56 EXPECT_FALSE(S2
.isEmpty());
57 EXPECT_FALSE(S
== S2
);
59 EXPECT_FALSE(S
.contains(3));
60 EXPECT_TRUE(S2
.contains(3));
61 EXPECT_FALSE(S2
.begin() == S2
.end());
62 EXPECT_TRUE(S2
.begin() != S2
.end());
64 ImmutableSet
<int> S3
= f
.add(S
, 2);
65 EXPECT_TRUE(S
.isEmpty());
66 EXPECT_FALSE(S3
.isEmpty());
67 EXPECT_FALSE(S
== S3
);
69 EXPECT_FALSE(S
.contains(2));
70 EXPECT_TRUE(S3
.contains(2));
72 EXPECT_FALSE(S2
== S3
);
73 EXPECT_TRUE(S2
!= S3
);
74 EXPECT_FALSE(S2
.contains(2));
75 EXPECT_FALSE(S3
.contains(3));
78 TEST_F(ImmutableSetTest
, MultiElemIntSetTest
) {
79 ImmutableSet
<int>::Factory f
;
80 ImmutableSet
<int> S
= f
.getEmptySet();
82 ImmutableSet
<int> S2
= f
.add(f
.add(f
.add(S
, 3), 4), 5);
83 ImmutableSet
<int> S3
= f
.add(f
.add(f
.add(S2
, 9), 20), 43);
84 ImmutableSet
<int> S4
= f
.add(S2
, 9);
86 EXPECT_TRUE(S
.isEmpty());
87 EXPECT_FALSE(S2
.isEmpty());
88 EXPECT_FALSE(S3
.isEmpty());
89 EXPECT_FALSE(S4
.isEmpty());
91 EXPECT_FALSE(S
.contains(3));
92 EXPECT_FALSE(S
.contains(9));
94 EXPECT_TRUE(S2
.contains(3));
95 EXPECT_TRUE(S2
.contains(4));
96 EXPECT_TRUE(S2
.contains(5));
97 EXPECT_FALSE(S2
.contains(9));
98 EXPECT_FALSE(S2
.contains(0));
100 EXPECT_TRUE(S3
.contains(43));
101 EXPECT_TRUE(S3
.contains(20));
102 EXPECT_TRUE(S3
.contains(9));
103 EXPECT_TRUE(S3
.contains(3));
104 EXPECT_TRUE(S3
.contains(4));
105 EXPECT_TRUE(S3
.contains(5));
106 EXPECT_FALSE(S3
.contains(0));
108 EXPECT_TRUE(S4
.contains(9));
109 EXPECT_TRUE(S4
.contains(3));
110 EXPECT_TRUE(S4
.contains(4));
111 EXPECT_TRUE(S4
.contains(5));
112 EXPECT_FALSE(S4
.contains(20));
113 EXPECT_FALSE(S4
.contains(43));
116 TEST_F(ImmutableSetTest
, RemoveIntSetTest
) {
117 ImmutableSet
<int>::Factory f
;
118 ImmutableSet
<int> S
= f
.getEmptySet();
120 ImmutableSet
<int> S2
= f
.add(f
.add(S
, 4), 5);
121 ImmutableSet
<int> S3
= f
.add(S2
, 3);
122 ImmutableSet
<int> S4
= f
.remove(S3
, 3);
124 EXPECT_TRUE(S3
.contains(3));
125 EXPECT_FALSE(S2
.contains(3));
126 EXPECT_FALSE(S4
.contains(3));
128 EXPECT_TRUE(S2
== S4
);
129 EXPECT_TRUE(S3
!= S2
);
130 EXPECT_TRUE(S3
!= S4
);
132 EXPECT_TRUE(S3
.contains(4));
133 EXPECT_TRUE(S3
.contains(5));
135 EXPECT_TRUE(S4
.contains(4));
136 EXPECT_TRUE(S4
.contains(5));
139 TEST_F(ImmutableSetTest
, IterLongSetTest
) {
140 ImmutableSet
<long>::Factory f
;
141 ImmutableSet
<long> S
= f
.getEmptySet();
143 ImmutableSet
<long> S2
= f
.add(f
.add(f
.add(S
, 0), 1), 2);
144 ImmutableSet
<long> S3
= f
.add(f
.add(f
.add(S2
, 3), 4), 5);
147 for (ImmutableSet
<long>::iterator I
= S
.begin(), E
= S
.end(); I
!= E
; ++I
) {
153 for (ImmutableSet
<long>::iterator I
= S2
.begin(), E
= S2
.end(); I
!= E
; ++I
) {
160 for (ImmutableSet
<long>::iterator I
= S3
.begin(), E
= S3
.end(); I
!= E
; I
++) {