|
8 | 8 |
|
9 | 9 | #include "llvm/ADT/SetOperations.h"
|
10 | 10 | #include "llvm/ADT/SetVector.h"
|
| 11 | +#include "llvm/ADT/SmallPtrSet.h" |
| 12 | +#include "llvm/ADT/SmallVector.h" |
11 | 13 | #include "gmock/gmock.h"
|
12 | 14 | #include "gtest/gtest.h"
|
13 | 15 |
|
|
16 | 18 | using namespace llvm;
|
17 | 19 |
|
18 | 20 | using testing::IsEmpty;
|
| 21 | +using testing::UnorderedElementsAre; |
19 | 22 |
|
20 | 23 | namespace {
|
21 | 24 |
|
@@ -199,6 +202,38 @@ TEST(SetOperationsTest, SetSubtract) {
|
199 | 202 | EXPECT_EQ(ExpectedSet2, Set2);
|
200 | 203 | }
|
201 | 204 |
|
| 205 | +TEST(SetOperationsTest, SetSubtractSmallPtrSet) { |
| 206 | + int A[4]; |
| 207 | + |
| 208 | + // Set1.size() < Set2.size() |
| 209 | + SmallPtrSet<int *, 4> Set1 = {&A[0], &A[1]}; |
| 210 | + SmallPtrSet<int *, 4> Set2 = {&A[1], &A[2], &A[3]}; |
| 211 | + set_subtract(Set1, Set2); |
| 212 | + EXPECT_THAT(Set1, UnorderedElementsAre(&A[0])); |
| 213 | + |
| 214 | + // Set1.size() > Set2.size() |
| 215 | + Set1 = {&A[0], &A[1], &A[2]}; |
| 216 | + Set2 = {&A[0], &A[2]}; |
| 217 | + set_subtract(Set1, Set2); |
| 218 | + EXPECT_THAT(Set1, UnorderedElementsAre(&A[1])); |
| 219 | +} |
| 220 | + |
| 221 | +TEST(SetOperationsTest, SetSubtractSmallVector) { |
| 222 | + int A[4]; |
| 223 | + |
| 224 | + // Set1.size() < Set2.size() |
| 225 | + SmallPtrSet<int *, 4> Set1 = {&A[0], &A[1]}; |
| 226 | + SmallVector<int *> Set2 = {&A[1], &A[2], &A[3]}; |
| 227 | + set_subtract(Set1, Set2); |
| 228 | + EXPECT_THAT(Set1, UnorderedElementsAre(&A[0])); |
| 229 | + |
| 230 | + // Set1.size() > Set2.size() |
| 231 | + Set1 = {&A[0], &A[1], &A[2]}; |
| 232 | + Set2 = {&A[0], &A[2]}; |
| 233 | + set_subtract(Set1, Set2); |
| 234 | + EXPECT_THAT(Set1, UnorderedElementsAre(&A[1])); |
| 235 | +} |
| 236 | + |
202 | 237 | TEST(SetOperationsTest, SetSubtractRemovedRemaining) {
|
203 | 238 | std::set<int> Removed, Remaining;
|
204 | 239 |
|
|
0 commit comments