#include "StarVariant.hpp" #include "StarMaybe.hpp" #include "gtest/gtest.h" using namespace Star; TEST(VariantTest, All) { struct VariantTester { shared_ptr intptr; }; MVariant a, b; EXPECT_EQ(a.typeIndex(), 0); a = 'c'; EXPECT_EQ(a.typeIndex(), 3u); EXPECT_TRUE(a.is()); a.makeType(1); EXPECT_EQ(a.get(), 0); EXPECT_TRUE(a.is()); a = b; EXPECT_TRUE(a.empty()); shared_ptr intptr = make_shared(42); a = VariantTester{intptr}; b = VariantTester{intptr}; a = b; a = a; b = std::move(a); a = std::move(b); EXPECT_EQ(intptr.use_count(), 2); a.reset(); EXPECT_EQ(intptr.use_count(), 1); Variant v(1.0); MVariant mv(v); EXPECT_EQ(mv, 1.0); v = 2; mv = v; EXPECT_EQ(mv, 2); mv = '3'; v = mv.takeValue(); EXPECT_EQ(v, '3'); EXPECT_TRUE(mv.empty()); } TEST(MaybeTest, All) { struct MaybeTester { shared_ptr intptr; }; Maybe a, b; EXPECT_FALSE(a.isValid()); shared_ptr intptr = make_shared(42); a = MaybeTester{intptr}; b = MaybeTester{intptr}; EXPECT_TRUE(a.isValid()); a = b; a = a; b = std::move(a); a = std::move(b); EXPECT_EQ(intptr.use_count(), 2); a = {}; EXPECT_FALSE(a.isValid()); EXPECT_EQ(intptr.use_count(), 1); }