//===--- status_test.cpp - Tests for the Status and Expected classes ------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "status.h" #include "gtest/gtest.h" #include namespace { struct RefCounter { static int Count; RefCounter() { ++Count; } ~RefCounter() { --Count; } RefCounter(const RefCounter &) = delete; RefCounter &operator=(const RefCounter &) = delete; }; int RefCounter::Count; TEST(Expected, RefCounter) { RefCounter::Count = 0; using uptr = std::unique_ptr; acxxel::Expected E0(uptr(new RefCounter)); EXPECT_FALSE(E0.isError()); EXPECT_EQ(1, RefCounter::Count); acxxel::Expected E1(std::move(E0)); EXPECT_FALSE(E1.isError()); EXPECT_EQ(1, RefCounter::Count); acxxel::Expected E2(acxxel::Status("nothing in here yet")); EXPECT_TRUE(E2.isError()); EXPECT_EQ(1, RefCounter::Count); E2 = std::move(E1); EXPECT_FALSE(E2.isError()); EXPECT_EQ(1, RefCounter::Count); EXPECT_EQ(1, E2.getValue()->Count); EXPECT_FALSE(E2.isError()); EXPECT_EQ(1, RefCounter::Count); EXPECT_EQ(1, E2.takeValue()->Count); EXPECT_EQ(0, RefCounter::Count); } } // namespace