aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/StringMapTest.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2024-11-02 20:34:52 -0700
committerGitHub <noreply@github.com>2024-11-02 20:34:52 -0700
commitbf099f4682bf088aaa49b2c72fb1ef3250213fbb (patch)
tree46dfadca3ea8c73e856cf73e9e2470d5eae65f9a /llvm/unittests/ADT/StringMapTest.cpp
parent5091a359d9807db8f7d62375696f93fc34226969 (diff)
downloadllvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.zip
llvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.tar.gz
llvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.tar.bz2
[llvm][ADT] Structured bindings for move-only types in `StringMap` (#114676)
This PR implements destructuring of `StringMapEntry<T>` where `T` is a move-only type. Also adds the non-const version.
Diffstat (limited to 'llvm/unittests/ADT/StringMapTest.cpp')
-rw-r--r--llvm/unittests/ADT/StringMapTest.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/StringMapTest.cpp b/llvm/unittests/ADT/StringMapTest.cpp
index c9ef3f8a..35135cd 100644
--- a/llvm/unittests/ADT/StringMapTest.cpp
+++ b/llvm/unittests/ADT/StringMapTest.cpp
@@ -381,6 +381,9 @@ struct MoveOnly {
return *this;
}
+ bool operator==(const MoveOnly &RHS) const { return i == RHS.i; }
+ bool operator!=(const MoveOnly &RHS) const { return i != RHS.i; }
+
private:
MoveOnly(const MoveOnly &) = delete;
MoveOnly &operator=(const MoveOnly &) = delete;
@@ -550,6 +553,26 @@ TEST_F(StringMapTest, StructuredBindings) {
EXPECT_EQ("a", Key);
EXPECT_EQ(42, Value);
}
+
+ for (const auto &[Key, Value] : A) {
+ EXPECT_EQ("a", Key);
+ EXPECT_EQ(42, Value);
+ }
+}
+
+TEST_F(StringMapTest, StructuredBindingsMoveOnly) {
+ StringMap<MoveOnly> A;
+ A.insert(std::make_pair("a", MoveOnly(42)));
+
+ for (auto &[Key, Value] : A) {
+ EXPECT_EQ("a", Key);
+ EXPECT_EQ(MoveOnly(42), Value);
+ }
+
+ for (const auto &[Key, Value] : A) {
+ EXPECT_EQ("a", Key);
+ EXPECT_EQ(MoveOnly(42), Value);
+ }
}
namespace {