summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/OwningPtrTest.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-03-02 03:38:32 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-03-02 03:38:32 +0000
commit871171a25beb46d128e0a5713d8fff18516191e7 (patch)
tree84f3e4dab15d7ada28bdc79e3bbbe74f74a61cfd /llvm/unittests/ADT/OwningPtrTest.cpp
parent337bd07978c0675af5488d775b8ad4d7df69c47d (diff)
downloadbcm5719-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.cpp78
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
}
OpenPOWER on IntegriCloud