From 8ae8fd08ff91bfc21dba480e13eb18729a438296 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Thu, 8 May 2014 21:52:29 +0000 Subject: StringMap: Move assignment and move construction. llvm-svn: 208361 --- llvm/unittests/ADT/StringMapTest.cpp | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'llvm/unittests/ADT/StringMapTest.cpp') diff --git a/llvm/unittests/ADT/StringMapTest.cpp b/llvm/unittests/ADT/StringMapTest.cpp index 42a03886180..be166b15a90 100644 --- a/llvm/unittests/ADT/StringMapTest.cpp +++ b/llvm/unittests/ADT/StringMapTest.cpp @@ -234,4 +234,71 @@ TEST_F(StringMapTest, MoveOnlyKey) { StringMapEntry::Create(Key.begin(), Key.end(), MoveOnly(42))->Destroy(); } +TEST_F(StringMapTest, MoveConstruct) { + StringMap A; + A.GetOrCreateValue("x", 42); + StringMap B = std::move(A); + ASSERT_EQ(A.size(), 0u); + ASSERT_EQ(B.size(), 1u); + ASSERT_EQ(B["x"], 42); + ASSERT_EQ(B.count("y"), 0u); +} + +TEST_F(StringMapTest, MoveAssignment) { + StringMap A; + A["x"] = 42; + StringMap B; + B["y"] = 117; + A = std::move(B); + ASSERT_EQ(A.size(), 1u); + ASSERT_EQ(B.size(), 0u); + ASSERT_EQ(A["y"], 117); + ASSERT_EQ(B.count("x"), 0u); +} + +struct Countable { + int &InstanceCount; + int Number; + Countable(int Number, int &InstanceCount) :InstanceCount(InstanceCount), Number(Number) { + ++InstanceCount; + } + Countable(Countable &&C) : InstanceCount(C.InstanceCount), Number(C.Number) { + ++InstanceCount; + C.Number = -1; + } + Countable(const Countable &C) : InstanceCount(C.InstanceCount), Number(C.Number) { + ++InstanceCount; + } + Countable &operator=(Countable C) { + Number = C.Number; + return *this; + } + ~Countable() { + --InstanceCount; + } + +}; + +TEST_F(StringMapTest, MoveDtor) { + int InstanceCount = 0; + StringMap A; + A.GetOrCreateValue("x", Countable(42, InstanceCount)); + ASSERT_EQ(InstanceCount, 1); + auto I = A.find("x"); + ASSERT_NE(I, A.end()); + ASSERT_EQ(I->second.Number, 42); + + StringMap B; + B = std::move(A); + ASSERT_EQ(InstanceCount, 1); + ASSERT_TRUE(A.empty()); + I = B.find("x"); + ASSERT_NE(I, B.end()); + ASSERT_EQ(I->second.Number, 42); + + B = StringMap(); + ASSERT_EQ(InstanceCount, 0); + ASSERT_TRUE(B.empty()); +} + } // end anonymous namespace -- cgit v1.2.3