diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-03-02 03:38:32 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-03-02 03:38:32 +0000 |
commit | 871171a25beb46d128e0a5713d8fff18516191e7 (patch) | |
tree | 84f3e4dab15d7ada28bdc79e3bbbe74f74a61cfd /llvm/unittests/ADT/OwningPtrTest.cpp | |
parent | 337bd07978c0675af5488d775b8ad4d7df69c47d (diff) | |
download | bcm5719-llvm-871171a25beb46d128e0a5713d8fff18516191e7.tar.gz bcm5719-llvm-871171a25beb46d128e0a5713d8fff18516191e7.zip |
[C++11] Add support for OwningPtr<T> to be converted to and from
std::unique_ptr<T>.
Patch by Ahmed Charles!
llvm-svn: 202609
Diffstat (limited to 'llvm/unittests/ADT/OwningPtrTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/OwningPtrTest.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/OwningPtrTest.cpp b/llvm/unittests/ADT/OwningPtrTest.cpp index 75db2ba20be..aef4d97bd66 100644 --- a/llvm/unittests/ADT/OwningPtrTest.cpp +++ b/llvm/unittests/ADT/OwningPtrTest.cpp @@ -174,4 +174,82 @@ TEST_F(OwningPtrTest, Swap) { EXPECT_EQ(2u, TrackDestructor::Destructions); } +TEST_F(OwningPtrTest, UniqueToOwningConstruction) { + TrackDestructor::ResetCounts(); + { + std::unique_ptr<TrackDestructor> A(new TrackDestructor(3)); + OwningPtr<TrackDestructor> B = std::move(A); + EXPECT_FALSE(A); + EXPECT_TRUE(!A); + EXPECT_FALSE(A.get()); + EXPECT_TRUE((bool)B); + EXPECT_FALSE(!B); + EXPECT_TRUE(B.get()); + EXPECT_TRUE(B.isValid()); + EXPECT_EQ(3, (*B).val); + EXPECT_EQ(3, B->val); + EXPECT_EQ(0u, TrackDestructor::Destructions); + } + EXPECT_EQ(1u, TrackDestructor::Destructions); +} + +TEST_F(OwningPtrTest, UniqueToOwningAssignment) { + TrackDestructor::ResetCounts(); + { + std::unique_ptr<TrackDestructor> A(new TrackDestructor(3)); + OwningPtr<TrackDestructor> B(new TrackDestructor(4)); + B = std::move(A); + EXPECT_FALSE(A); + EXPECT_TRUE(!A); + EXPECT_FALSE(A.get()); + EXPECT_TRUE((bool)B); + EXPECT_FALSE(!B); + EXPECT_TRUE(B.get()); + EXPECT_TRUE(B.isValid()); + EXPECT_EQ(3, (*B).val); + EXPECT_EQ(3, B->val); + EXPECT_EQ(1u, TrackDestructor::Destructions); + } + EXPECT_EQ(2u, TrackDestructor::Destructions); +} + +TEST_F(OwningPtrTest, TakeUniqueConstruction) { + TrackDestructor::ResetCounts(); + { + OwningPtr<TrackDestructor> A(new TrackDestructor(3)); + std::unique_ptr<TrackDestructor> B = A.take_unique(); + EXPECT_FALSE(A); + EXPECT_TRUE(!A); + EXPECT_FALSE(A.get()); + EXPECT_FALSE(A.isValid()); + EXPECT_TRUE((bool)B); + EXPECT_FALSE(!B); + EXPECT_TRUE(B.get()); + EXPECT_EQ(3, (*B).val); + EXPECT_EQ(3, B->val); + EXPECT_EQ(0u, TrackDestructor::Destructions); + } + EXPECT_EQ(1u, TrackDestructor::Destructions); +} + +#if LLVM_HAS_RVALUE_REFERENCE_THIS +TEST_F(OwningPtrTest, OwningToUniqueConstruction) { + TrackDestructor::ResetCounts(); + { + OwningPtr<TrackDestructor> A(new TrackDestructor(3)); + std::unique_ptr<TrackDestructor> B = std::move(A); + EXPECT_FALSE(A); + EXPECT_TRUE(!A); + EXPECT_FALSE(A.get()); + EXPECT_FALSE(A.isValid()); + EXPECT_TRUE((bool)B); + EXPECT_FALSE(!B); + EXPECT_TRUE(B.get()); + EXPECT_EQ(3, (*B).val); + EXPECT_EQ(3, B->val); + EXPECT_EQ(0u, TrackDestructor::Destructions); + } + EXPECT_EQ(1u, TrackDestructor::Destructions); +} +#endif } |