#include "BLI_optional.hh" #include "BLI_strict_flags.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, 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); }