// Copyright (c) 2015 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 "base/move.h"

#include <gtest/gtest.h>

namespace {

class MoveOnly {
  MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(MoveOnly)

 public:
  MoveOnly() {}

  MoveOnly(MoveOnly&& other) {}
  MoveOnly& operator=(MoveOnly&& other) { return *this; }
};

class Container {
 public:
  Container() = default;
  Container(const Container& other) = default;
  Container& operator=(const Container& other) = default;

  Container(Container&& other) { value_ = other.value_.Pass(); }

  Container& operator=(Container&& other) {
    value_ = other.value_.Pass();
    return *this;
  }

 private:
  MoveOnly value_;
};

Container GetContainerRvalue() {
  Container x;
  return x;
}

TEST(MoveTest, CopyableContainerCanBeMoved) {
  // Container should be move-constructible and move-assignable.
  Container y = GetContainerRvalue();
  y = GetContainerRvalue();
}

}  // namespace
