diff --git a/test/test_variant_variadic.cpp b/test/test_variant_variadic.cpp index 8e81a606..604f6718 100644 --- a/test/test_variant_variadic.cpp +++ b/test/test_variant_variadic.cpp @@ -2570,6 +2570,40 @@ namespace } }; + //************************************************************************* + TEST(test_variant_visit_dispatches_every_alternative) + { + etl::variant variant; + variant_test_visit_dispatcher visitor; + + variant = int8_t{}; + CHECK_EQUAL(5, etl::visit(visitor, variant)); + + variant = uint8_t{}; + CHECK_EQUAL(6, etl::visit(visitor, variant)); + + variant = int16_t{}; + CHECK_EQUAL(7, etl::visit(visitor, variant)); + } + + //************************************************************************* + TEST(test_variant_visit_rejects_valueless_variant) + { + etl::variant variant(etl::private_variant::valueless_t{}); + variant_test_visit_dispatcher visitor; + + CHECK_THROW(etl::visit(visitor, variant), etl::bad_variant_access); + } + + //************************************************************************* + TEST(test_variant_multiple_visit_rejects_valueless_later_variant) + { + etl::variant variant1; + etl::variant variant2(etl::private_variant::valueless_t{}); + + CHECK_THROW(etl::visit(test_variant_multiple_visit_helper{}, variant1, variant2), etl::bad_variant_access); + } + TEST(test_variant_multiple_visit) { etl::variant variant1;