diff --git a/AK/Optional.h b/AK/Optional.h index ee6320925e4..a73db53bcc0 100644 --- a/AK/Optional.h +++ b/AK/Optional.h @@ -104,6 +104,7 @@ public: ASSERT(m_has_value); T released_value = move(value()); value().~T(); + m_has_value = false; return released_value; } diff --git a/AK/Tests/Makefile b/AK/Tests/Makefile index dc9837e9158..30e940dc3ad 100644 --- a/AK/Tests/Makefile +++ b/AK/Tests/Makefile @@ -48,6 +48,9 @@ TestNonnullRefPtr: TestNonnullRefPtr.o $(SHARED_TEST_OBJS) TestRefPtr: TestRefPtr.o $(SHARED_TEST_OBJS) $(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestRefPtr.o $(SHARED_TEST_OBJS) +TestOptional: TestOptional.o $(SHARED_TEST_OBJS) + $(PRE_CXX) $(CXX) $(CXXFLAGS) -o $@ TestOptional.o $(SHARED_TEST_OBJS) + clean: rm -f $(SHARED_TEST_OBJS) rm -f $(PROGRAMS) diff --git a/AK/Tests/TestOptional.cpp b/AK/Tests/TestOptional.cpp new file mode 100644 index 00000000000..02db877ceaa --- /dev/null +++ b/AK/Tests/TestOptional.cpp @@ -0,0 +1,30 @@ +#include + +#include +#include + +TEST_CASE(basic_optional) +{ + Optional x; + EXPECT_EQ(x.has_value(), false); + x = 3; + EXPECT_EQ(x.has_value(), true); + EXPECT_EQ(x.value(), 3); +} + +TEST_CASE(move_optional) +{ + Optional x; + EXPECT_EQ(x.has_value(), false); + x = 3; + EXPECT_EQ(x.has_value(), true); + EXPECT_EQ(x.value(), 3); + + Optional y; + y = move(x); + EXPECT_EQ(y.has_value(), true); + EXPECT_EQ(y.value(), 3); + EXPECT_EQ(x.has_value(), false); +} + +TEST_MAIN(Optional)