Index: base/memory/scoped_ptr_unittest.cc |
diff --git a/base/memory/scoped_ptr_unittest.cc b/base/memory/scoped_ptr_unittest.cc |
index eb5bf000c48596d12ae97c59aad7c7eaf734ea06..de9fc14e5e14ee49eee4694544067b2739975370 100644 |
--- a/base/memory/scoped_ptr_unittest.cc |
+++ b/base/memory/scoped_ptr_unittest.cc |
@@ -4,7 +4,9 @@ |
#include "base/memory/scoped_ptr.h" |
+#include <memory> |
#include <sstream> |
+#include <utility> |
#include "base/basictypes.h" |
#include "base/bind.h" |
@@ -726,3 +728,82 @@ TEST(ScopedPtrTest, ReferenceCycle) { |
a->b->a.reset(a); |
a->~StructA(); |
} |
+ |
+TEST(ScopedPtrTest, UniquePtrToScopedPtr) { |
+ { |
+ std::unique_ptr<int> u(new int(8)); |
+ scoped_ptr<int> s(std::move(u)); |
+ EXPECT_EQ(8, *s); |
+ } |
+ |
+ { |
+ std::unique_ptr<int> u(new int(8)); |
+ scoped_ptr<int> s; |
+ s = std::move(u); |
+ EXPECT_EQ(8, *s); |
+ } |
+} |
+ |
+TEST(ScopedPtrTest, UniquePtrToScopedPtrWithCustomDeleter) { |
+ double dummy, dummy2; |
+ int deletes = 0; |
+ |
+ { |
+ std::unique_ptr<double, CountingDeleterChild> u( |
+ &dummy, CountingDeleterChild(&deletes)); |
+ scoped_ptr<double, CountingDeleter> s(std::move(u)); |
+ EXPECT_EQ(&dummy, s.get()); |
+ } |
+ EXPECT_EQ(1, deletes); |
+ |
+ int deletes2 = 0; |
+ { |
+ std::unique_ptr<double, CountingDeleterChild> u( |
+ &dummy, CountingDeleterChild(&deletes)); |
+ scoped_ptr<double, CountingDeleter> s(&dummy2, CountingDeleter(&deletes2)); |
+ s = std::move(u); |
+ EXPECT_EQ(&dummy, s.get()); |
+ } |
+ EXPECT_EQ(2, deletes); |
+ EXPECT_EQ(1, deletes2); |
+} |
+ |
+TEST(ScopedPtrTest, ScopedPtrToUniquePtr) { |
+ { |
+ scoped_ptr<int> s(new int(9)); |
+ std::unique_ptr<int> u(std::move(s)); |
+ EXPECT_EQ(9, *u); |
+ } |
+ |
+ { |
+ scoped_ptr<int> s(new int(9)); |
+ std::unique_ptr<int> u; |
+ u = std::move(s); |
+ EXPECT_EQ(9, *u); |
+ } |
+} |
+ |
+TEST(ScopedPtrTest, ScopedPtrToUniquePtrWithCustomDeleter) { |
+ double dummy, dummy2; |
+ int deletes = 0; |
+ |
+ { |
+ scoped_ptr<double, CountingDeleterChild> s(&dummy, |
+ CountingDeleterChild(&deletes)); |
+ std::unique_ptr<double, CountingDeleter> u(std::move(s)); |
+ EXPECT_EQ(&dummy, u.get()); |
+ } |
+ EXPECT_EQ(1, deletes); |
+ |
+ int deletes2 = 0; |
+ { |
+ scoped_ptr<double, CountingDeleterChild> s(&dummy, |
+ CountingDeleterChild(&deletes)); |
+ std::unique_ptr<double, CountingDeleter> u(&dummy2, |
+ CountingDeleter(&deletes2)); |
+ u = std::move(s); |
+ EXPECT_EQ(&dummy, u.get()); |
+ } |
+ EXPECT_EQ(2, deletes); |
+ EXPECT_EQ(1, deletes2); |
+} |