From 7686d724ef0dcd23ab80d0104609992b4bba19d5 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 18 Mar 2025 15:58:28 -0700 Subject: [PATCH] [ADT] Add StringSet::insert_range This pach adds StringSet::insert_range for consistency with DenseSet::insert_range and std::set::insert_range from C++23. In the unit test, I'm using contains instead of testing::UnorderedElementsAre because the latter doesn't seem to work with char *. --- llvm/include/llvm/ADT/StringSet.h | 5 +++++ llvm/unittests/ADT/StringSetTest.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/llvm/include/llvm/ADT/StringSet.h b/llvm/include/llvm/ADT/StringSet.h index bf2f04f424d13..454af55172d66 100644 --- a/llvm/include/llvm/ADT/StringSet.h +++ b/llvm/include/llvm/ADT/StringSet.h @@ -14,6 +14,7 @@ #ifndef LLVM_ADT_STRINGSET_H #define LLVM_ADT_STRINGSET_H +#include "llvm/ADT/ADL.h" #include "llvm/ADT/StringMap.h" namespace llvm { @@ -45,6 +46,10 @@ class StringSet : public StringMap { insert(*it); } + template void insert_range(Range &&R) { + insert(adl_begin(R), adl_end(R)); + } + template std::pair insert(const StringMapEntry &mapEntry) { diff --git a/llvm/unittests/ADT/StringSetTest.cpp b/llvm/unittests/ADT/StringSetTest.cpp index a804c1f17d1ce..8de05a2fe79d4 100644 --- a/llvm/unittests/ADT/StringSetTest.cpp +++ b/llvm/unittests/ADT/StringSetTest.cpp @@ -81,4 +81,14 @@ TEST_F(StringSetTest, Equal) { ASSERT_TRUE(A == A); } +TEST_F(StringSetTest, InsertRange) { + StringSet<> Set; + const char *Args[] = {"chair", "desk", "bed"}; + Set.insert_range(Args); + EXPECT_EQ(Set.size(), 3U); + EXPECT_TRUE(Set.contains("bed")); + EXPECT_TRUE(Set.contains("chair")); + EXPECT_TRUE(Set.contains("desk")); +} + } // end anonymous namespace