diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index aeb6025..d76df00 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,6 +2,7 @@ SET(CLI_TESTS test_pointrect test_rwops + test_optional ) # tests which test graphics functionality and thus requre working diff --git a/tests/test_optional.cc b/tests/test_optional.cc new file mode 100644 index 0000000..4b405ea --- /dev/null +++ b/tests/test_optional.cc @@ -0,0 +1,83 @@ +#include + +#include + +#include "testing.h" + +using namespace SDL2pp; + +BEGIN_TEST() + // Engage/disengage + { + Optional o; + int i; + + // disengaged + EXPECT_TRUE((bool)!o); + + // accessing disengaged fails + EXPECT_EXCEPTION(i = o.value(), BadOptionalAccess); + EXPECT_EXCEPTION(i = o.value(), std::logic_error); + + // value_or test + EXPECT_EQUAL(i = o.value_or(234), 234); + + // engage + o = 123; + + // engaged + EXPECT_TRUE((bool)o); + + // accessing value + EXPECT_EQUAL(o.value(), 123); + + // disengage + o = NullOpt; + + EXPECT_TRUE((bool)!o); + } + + // Equality + { + Optional o1, o2; + + EXPECT_TRUE(o1 == o2); + EXPECT_TRUE(o1 == NullOpt); + EXPECT_TRUE(NullOpt == o1); + + o1 = 123; + + EXPECT_TRUE(!(o1 == o2)); + + o2 = 124; + + EXPECT_TRUE(!(o1 == o2)); + + o2 = 123; + + EXPECT_TRUE(o1 == o2); + } + + // Swap + { + Optional o1, o2; + + o1 = 123; + + EXPECT_TRUE(!o2); + EXPECT_TRUE((bool)o1); + EXPECT_TRUE(o1 == 123); + + std::swap(o1, o2); + + EXPECT_TRUE(!o1); + EXPECT_TRUE((bool)o2); + EXPECT_TRUE(o2 == 123); + + o1.swap(o2); + + EXPECT_TRUE(!o2); + EXPECT_TRUE((bool)o1); + EXPECT_TRUE(o1 == 123); + } +END_TEST()