#include "catch.hpp" #include "optional.hpp" TEST_CASE("Assignment value", "[assignment.value]") { tl::optional o1 = 42; tl::optional o2 = 12; tl::optional o3; o1 = o1; REQUIRE(*o1 == 42); o1 = o2; REQUIRE(*o1 == 12); o1 = o3; REQUIRE(!o1); o1 = 42; REQUIRE(*o1 == 42); o1 = tl::nullopt; REQUIRE(!o1); o1 = std::move(o2); REQUIRE(*o1 == 12); tl::optional o4 = 42; o1 = o4; REQUIRE(*o1 == 42); o1 = std::move(o4); REQUIRE(*o1 == 42); } TEST_CASE("Assignment reference", "[assignment.ref]") { auto i = 42; auto j = 12; tl::optional o1 = i; tl::optional o2 = j; tl::optional o3; o1 = o1; REQUIRE(*o1 == 42); REQUIRE(&*o1 == &i); o1 = o2; REQUIRE(*o1 == 12); o1 = o3; REQUIRE(!o1); auto k = 42; o1 = k; REQUIRE(*o1 == 42); REQUIRE(*o1 == i); REQUIRE(*o1 == k); REQUIRE(&*o1 != &i); REQUIRE(&*o1 == &k); o1 = tl::nullopt; REQUIRE(!o1); o1 = std::move(o2); REQUIRE(*o1 == 12); }