forked from OSchip/llvm-project
[ADT] Enable set_difference() to be used on StringSet
Summary: Re-land r362766 after it was reverted in r362823. Reviewers: jhenderson, dsanders, aaron.ballman, MatzeB, lhames, dblaikie Reviewed By: dblaikie Subscribers: smeenai, mgrang, mgorny, dexonsmith, kristina, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D62369 llvm-svn: 362835
This commit is contained in:
parent
97204a6788
commit
31650eaa02
|
@ -359,6 +359,11 @@ public:
|
|||
return find(Key) == end() ? 0 : 1;
|
||||
}
|
||||
|
||||
template <typename InputTy>
|
||||
size_type count(const StringMapEntry<InputTy> &MapEntry) const {
|
||||
return count(MapEntry.getKey());
|
||||
}
|
||||
|
||||
/// insert - Insert the specified key/value pair into the map. If the key
|
||||
/// already exists in the map, return false and ignore the request, otherwise
|
||||
/// insert it and return true.
|
||||
|
|
|
@ -45,6 +45,12 @@ namespace llvm {
|
|||
for (auto It = Begin; It != End; ++It)
|
||||
base::insert(std::make_pair(*It, '\0'));
|
||||
}
|
||||
|
||||
template <typename ValueTy>
|
||||
std::pair<typename base::iterator, bool>
|
||||
insert(const StringMapEntry<ValueTy> &MapEntry) {
|
||||
return insert(MapEntry.getKey());
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -65,6 +65,7 @@ add_llvm_unittest(ADTTests
|
|||
StringExtrasTest.cpp
|
||||
StringMapTest.cpp
|
||||
StringRefTest.cpp
|
||||
StringSetTest.cpp
|
||||
StringSwitchTest.cpp
|
||||
TinyPtrVectorTest.cpp
|
||||
TripleTest.cpp
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include "llvm/ADT/Twine.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
@ -284,20 +283,6 @@ TEST_F(StringMapTest, IterMapKeys) {
|
|||
EXPECT_EQ(Expected, Keys);
|
||||
}
|
||||
|
||||
TEST_F(StringMapTest, IterSetKeys) {
|
||||
StringSet<> Set;
|
||||
Set.insert("A");
|
||||
Set.insert("B");
|
||||
Set.insert("C");
|
||||
Set.insert("D");
|
||||
|
||||
auto Keys = to_vector<4>(Set.keys());
|
||||
llvm::sort(Keys);
|
||||
|
||||
SmallVector<StringRef, 4> Expected = {"A", "B", "C", "D"};
|
||||
EXPECT_EQ(Expected, Keys);
|
||||
}
|
||||
|
||||
// Create a non-default constructable value
|
||||
struct StringMapTestStruct {
|
||||
StringMapTestStruct(int i) : i(i) {}
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
//===- llvm/unittest/ADT/StringSetTest.cpp - StringSet unit tests ----------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include "gtest/gtest.h"
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
|
||||
// Test fixture
|
||||
class StringSetTest : public testing::Test {};
|
||||
|
||||
TEST_F(StringSetTest, IterSetKeys) {
|
||||
StringSet<> Set;
|
||||
Set.insert("A");
|
||||
Set.insert("B");
|
||||
Set.insert("C");
|
||||
Set.insert("D");
|
||||
|
||||
auto Keys = to_vector<4>(Set.keys());
|
||||
llvm::sort(Keys);
|
||||
|
||||
SmallVector<StringRef, 4> Expected = {"A", "B", "C", "D"};
|
||||
EXPECT_EQ(Expected, Keys);
|
||||
}
|
||||
|
||||
TEST_F(StringSetTest, InsertAndCountStringMapEntry) {
|
||||
// Test insert(StringMapEntry) and count(StringMapEntry)
|
||||
// which are required for set_difference(StringSet, StringSet).
|
||||
StringSet<> Set;
|
||||
StringMapEntry<StringRef> *Element = StringMapEntry<StringRef>::Create("A");
|
||||
Set.insert(*Element);
|
||||
size_t Count = Set.count(*Element);
|
||||
size_t Expected = 1;
|
||||
EXPECT_EQ(Expected, Count);
|
||||
Element->Destroy();
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
Loading…
Reference in New Issue