#include "BLI_optional.h" #include "testing/testing.h" #include using namespace BLI; TEST(optional, DefaultConstructor) { Optional a; EXPECT_FALSE(a.has_value()); } TEST(optional, ValueConstructor) { Optional a(5); EXPECT_TRUE(a.has_value()); EXPECT_EQ(a.value(), 5); } TEST(optional, CopyConstructor) { Optional a("Hello"); Optional b = a; EXPECT_TRUE(a.has_value()); EXPECT_TRUE(b.has_value()); b.value()[0] = 'T'; EXPECT_EQ(a.value(), "Hello"); EXPECT_EQ(b.value(), "Tello"); } TEST(optional, Reset) { Optional a(4); EXPECT_TRUE(a.has_value()); a.reset(); EXPECT_FALSE(a.has_value()); } TEST(optional, FromNullPointer) { Optional a = Optional::FromPointer(nullptr); EXPECT_FALSE(a.has_value()); } TEST(optional, FromNonNullPointer) { int value = 42; Optional a = Optional::FromPointer(&value); EXPECT_TRUE(a.has_value()); EXPECT_EQ(a.value(), 42); } TEST(optional, Extract) { Optional a(32); EXPECT_TRUE(a.has_value()); EXPECT_EQ(a.extract(), 32); EXPECT_FALSE(a.has_value()); } TEST(optional, ArrowOperator) { Optional value = std::string("Hello"); EXPECT_TRUE(value.has_value()); EXPECT_EQ(value->size(), 5); } TEST(optional, StarOperator) { Optional value = std::string("Hello"); EXPECT_TRUE(value.has_value()); std::string &s = *value; EXPECT_EQ(s.size(), 5); }