#include "catch.hpp" #include "optional.hpp" #include #include struct takes_init_and_variadic { std::vector v; std::tuple t; template takes_init_and_variadic(std::initializer_list l, Args &&... args) : v(l), t(std::forward(args)...) {} }; TEST_CASE("Make optional", "[make_optional]") { auto o1 = tl::make_optional(42); auto o2 = tl::optional(42); constexpr bool is_same = std::is_same>::value; REQUIRE(is_same); REQUIRE(o1 == o2); auto o3 = tl::make_optional>(0, 1, 2, 3); REQUIRE(std::get<0>(*o3) == 0); REQUIRE(std::get<1>(*o3) == 1); REQUIRE(std::get<2>(*o3) == 2); REQUIRE(std::get<3>(*o3) == 3); auto o4 = tl::make_optional>({0, 1, 2, 3}); REQUIRE(o4.value()[0] == 0); REQUIRE(o4.value()[1] == 1); REQUIRE(o4.value()[2] == 2); REQUIRE(o4.value()[3] == 3); auto o5 = tl::make_optional({0, 1}, 2, 3); REQUIRE(o5->v[0] == 0); REQUIRE(o5->v[1] == 1); REQUIRE(std::get<0>(o5->t) == 2); REQUIRE(std::get<1>(o5->t) == 3); }