Jason Henline | ac232dd | 2016-10-25 20:18:56 +0000 | [diff] [blame] | 1 | //===--- status_test.cpp - Tests for the Status and Expected classes ------===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #include "status.h" |
| 11 | |
| 12 | #include "gtest/gtest.h" |
| 13 | |
| 14 | #include <memory> |
| 15 | |
| 16 | namespace { |
| 17 | |
| 18 | struct RefCounter { |
| 19 | static int Count; |
| 20 | |
| 21 | RefCounter() { ++Count; } |
| 22 | ~RefCounter() { --Count; } |
| 23 | RefCounter(const RefCounter &) = delete; |
| 24 | RefCounter &operator=(const RefCounter &) = delete; |
| 25 | }; |
| 26 | |
| 27 | int RefCounter::Count; |
| 28 | |
| 29 | TEST(Expected, RefCounter) { |
| 30 | RefCounter::Count = 0; |
| 31 | using uptr = std::unique_ptr<RefCounter>; |
| 32 | |
| 33 | acxxel::Expected<uptr> E0(uptr(new RefCounter)); |
| 34 | EXPECT_FALSE(E0.isError()); |
| 35 | EXPECT_EQ(1, RefCounter::Count); |
| 36 | |
| 37 | acxxel::Expected<uptr> E1(std::move(E0)); |
| 38 | EXPECT_FALSE(E1.isError()); |
| 39 | EXPECT_EQ(1, RefCounter::Count); |
| 40 | |
| 41 | acxxel::Expected<uptr> E2(acxxel::Status("nothing in here yet")); |
| 42 | EXPECT_TRUE(E2.isError()); |
| 43 | EXPECT_EQ(1, RefCounter::Count); |
| 44 | E2 = std::move(E1); |
| 45 | EXPECT_FALSE(E2.isError()); |
| 46 | EXPECT_EQ(1, RefCounter::Count); |
| 47 | |
| 48 | EXPECT_EQ(1, E2.getValue()->Count); |
| 49 | EXPECT_FALSE(E2.isError()); |
| 50 | EXPECT_EQ(1, RefCounter::Count); |
| 51 | |
| 52 | EXPECT_EQ(1, E2.takeValue()->Count); |
| 53 | EXPECT_EQ(0, RefCounter::Count); |
| 54 | } |
| 55 | |
| 56 | } // namespace |