| Index: third_party/base/nonstd_unique_ptr_unittest.cpp
|
| diff --git a/third_party/base/nonstd_unique_ptr_unittest.cpp b/third_party/base/nonstd_unique_ptr_unittest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..49cc901fe26e248f084a194fba34737e1e0f4bfc
|
| --- /dev/null
|
| +++ b/third_party/base/nonstd_unique_ptr_unittest.cpp
|
| @@ -0,0 +1,87 @@
|
| +// Copyright 2015 PDFium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <sstream>
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "macros.h"
|
| +#include "nonstd_unique_ptr.h"
|
| +
|
| +using nonstd::unique_ptr;
|
| +
|
| +namespace {
|
| +
|
| +// Used to test depth subtyping.
|
| +class CtorDtorLoggerParent {
|
| + public:
|
| + virtual ~CtorDtorLoggerParent() {}
|
| +
|
| + virtual void SetPtr(int* ptr) = 0;
|
| +
|
| + virtual int SomeMeth(int x) const = 0;
|
| +};
|
| +
|
| +class CtorDtorLogger : public CtorDtorLoggerParent {
|
| + public:
|
| + CtorDtorLogger() : ptr_(nullptr) {}
|
| + explicit CtorDtorLogger(int* ptr) { SetPtr(ptr); }
|
| + ~CtorDtorLogger() override { --*ptr_; }
|
| +
|
| + void SetPtr(int* ptr) override {
|
| + ptr_ = ptr;
|
| + ++*ptr_;
|
| + }
|
| +
|
| + int SomeMeth(int x) const override { return x; }
|
| +
|
| + private:
|
| + int* ptr_;
|
| +
|
| + // Disallow evil constructors.
|
| + CtorDtorLogger(const CtorDtorLogger&) = delete;
|
| + void operator=(const CtorDtorLogger&) = delete;
|
| +};
|
| +
|
| +struct CountingDeleter {
|
| + explicit CountingDeleter(int* count) : count_(count) {}
|
| + inline void operator()(double* ptr) const { (*count_)++; }
|
| + int* count_;
|
| +};
|
| +
|
| +// Do not delete this function! It's existence is to test that you can
|
| +// return a temporarily constructed version of the scoper.
|
| +unique_ptr<CtorDtorLogger> TestReturnOfType(int* constructed) {
|
| + return unique_ptr<CtorDtorLogger>(new CtorDtorLogger(constructed));
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +TEST(UniquePtrTest, MoveTest) {
|
| + int constructed = 0;
|
| + int constructed4 = 0;
|
| + {
|
| + unique_ptr<CtorDtorLogger> ptr1(new CtorDtorLogger(&constructed));
|
| + EXPECT_EQ(1, constructed);
|
| + EXPECT_TRUE(ptr1);
|
| +
|
| + unique_ptr<CtorDtorLogger> ptr2(nonstd::move(ptr1));
|
| + EXPECT_EQ(1, constructed);
|
| + EXPECT_FALSE(ptr1);
|
| + EXPECT_TRUE(ptr2);
|
| +
|
| + unique_ptr<CtorDtorLogger> ptr3;
|
| + ptr3 = nonstd::move(ptr2);
|
| + EXPECT_EQ(1, constructed);
|
| + EXPECT_FALSE(ptr2);
|
| + EXPECT_TRUE(ptr3);
|
| +
|
| + unique_ptr<CtorDtorLogger> ptr4(new CtorDtorLogger(&constructed4));
|
| + EXPECT_EQ(1, constructed4);
|
| + ptr4 = nonstd::move(ptr3);
|
| + EXPECT_EQ(0, constructed4);
|
| + EXPECT_FALSE(ptr3);
|
| + EXPECT_TRUE(ptr4);
|
| + }
|
| + EXPECT_EQ(0, constructed);
|
| +}
|
|
|