#include "catch.hpp" #include #include #include #include #include "kblib/variant.h" #include "kblib/hash.h" #if KBLIB_USE_CXX17 TEST_CASE("visit") { std::variant var = 10; // standard syntax (with visitor helper): std::visit(kblib::visitor{[](std::monostate) { REQUIRE(false); }, [](int) { REQUIRE(true); }, [](const std::string&) { REQUIRE(false); }}, var); // Basic single-variant syntax: kblib::visit( var, [](std::monostate) { REQUIRE(false); }, [](int) { REQUIRE(true); }, [](const std::string&) { REQUIRE(false); }); // Pattern-matching-like syntax: kblib::visit(var)([](std::monostate) { REQUIRE(false); }, [](int) { REQUIRE(true); }, [](const std::string&) { REQUIRE(false); }); // kblib::visit2(var, [](int) {}); } TEST_CASE("visit_indexed") { std::variant var(std::in_place_type, 10); kblib::visit_indexed(var, [](auto constant, auto val) { REQUIRE(constant == 1); static_assert( std::is_same_v>); }); } TEST_CASE("variant_cast") { std::variant from(std::in_place_type, 10); auto to = kblib::variant_cast>( from); REQUIRE(to.index() == 1); } #endif