// Copyright (c) 2012 The Chromium 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 <string>

#include "base/memory/linked_ptr.h"
#include "base/strings/stringprintf.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

int num = 0;

std::string history;

// Class which tracks allocation/deallocation
struct A {
  A(): mynum(num++) { history += base::StringPrintf("A%d ctor\n", mynum); }
  virtual ~A() { history += base::StringPrintf("A%d dtor\n", mynum); }
  virtual void Use() { history += base::StringPrintf("A%d use\n", mynum); }
  int mynum;
};

// Subclass
struct B: public A {
  B() { history += base::StringPrintf("B%d ctor\n", mynum); }
  ~B() override { history += base::StringPrintf("B%d dtor\n", mynum); }
  void Use() override { history += base::StringPrintf("B%d use\n", mynum); }
};

}  // namespace

TEST(LinkedPtrTest, Test) {
  {
    linked_ptr<A> a0, a1, a2;
    a0 = *&a0;  // The *& defeats Clang's -Wself-assign warning.
    a1 = a2;
    ASSERT_EQ(a0.get(), static_cast<A*>(nullptr));
    ASSERT_EQ(a1.get(), static_cast<A*>(nullptr));
    ASSERT_EQ(a2.get(), static_cast<A*>(nullptr));
    ASSERT_TRUE(a0 == nullptr);
    ASSERT_TRUE(a1 == nullptr);
    ASSERT_TRUE(a2 == nullptr);

    {
      linked_ptr<A> a3(new A);
      a0 = a3;
      ASSERT_TRUE(a0 == a3);
      ASSERT_TRUE(a0 != nullptr);
      ASSERT_TRUE(a0.get() == a3);
      ASSERT_TRUE(a0 == a3.get());
      linked_ptr<A> a4(a0);
      a1 = a4;
      linked_ptr<A> a5(new A);
      ASSERT_TRUE(a5.get() != a3);
      ASSERT_TRUE(a5 != a3.get());
      a2 = a5;
      linked_ptr<B> b0(new B);
      linked_ptr<A> a6(b0);
      ASSERT_TRUE(b0 == a6);
      ASSERT_TRUE(a6 == b0);
      ASSERT_TRUE(b0 != nullptr);
      a5 = b0;
      a5 = b0;
      a3->Use();
      a4->Use();
      a5->Use();
      a6->Use();
      b0->Use();
      (*b0).Use();
      b0.get()->Use();
    }

    a0->Use();
    a1->Use();
    a2->Use();

    a1 = a2;
    a2.reset(new A);
    a0.reset();

    linked_ptr<A> a7;
  }

  ASSERT_EQ(history,
    "A0 ctor\n"
    "A1 ctor\n"
    "A2 ctor\n"
    "B2 ctor\n"
    "A0 use\n"
    "A0 use\n"
    "B2 use\n"
    "B2 use\n"
    "B2 use\n"
    "B2 use\n"
    "B2 use\n"
    "B2 dtor\n"
    "A2 dtor\n"
    "A0 use\n"
    "A0 use\n"
    "A1 use\n"
    "A3 ctor\n"
    "A0 dtor\n"
    "A3 dtor\n"
    "A1 dtor\n"
  );
}
