| // Copyright 2019 The Fuchsia 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 <io-scheduler/io-scheduler.h> |
| #include <zxtest/zxtest.h> |
| |
| namespace ioscheduler { |
| |
| TEST(UniqueOpTest, CreateNull) { |
| UniqueOp ref; // Null object. |
| ASSERT_TRUE(!ref, "Expected false"); |
| ASSERT_TRUE(ref == nullptr, "Expected null reference"); |
| StreamOp* op = ref.get(); |
| ASSERT_EQ(op, nullptr, "Expected null returned from reference"); |
| op = ref.release(); |
| ASSERT_EQ(op, nullptr, "Expected null returned from reference"); |
| |
| // Move construction. |
| UniqueOp moved(std::move(ref)); |
| ASSERT_TRUE(moved == nullptr, "Expected null reference from moved"); |
| |
| // Move assignment. |
| UniqueOp assigned = std::move(moved); |
| ASSERT_TRUE(assigned == nullptr, "Expected null reference from assigned"); |
| } |
| |
| TEST(UniqueOpTest, CreateAllocated) { |
| StreamOp* op = new StreamOp; |
| UniqueOp ref(op); |
| ASSERT_TRUE(ref, "Expected true"); |
| ASSERT_TRUE(ref != nullptr, "Expected non-null reference"); |
| ASSERT_EQ(ref.get(), op, "Expected op"); |
| |
| // Move construction. |
| UniqueOp moved(std::move(ref)); |
| ASSERT_EQ(moved.get(), op, "Expected op from moved"); |
| |
| // Move assignment. |
| UniqueOp assigned = std::move(moved); |
| ASSERT_EQ(assigned.get(), op, "Expected op from assigned"); |
| |
| // Release. |
| StreamOp* released = assigned.release(); |
| ASSERT_EQ(released, op, "Expected op from assigned"); |
| ASSERT_TRUE(assigned == nullptr, "Expected null reference from assigned"); |
| |
| delete op; |
| } |
| |
| } // namespace ioscheduler |