No public description PiperOrigin-RevId: 738397894
diff --git a/domain_tests/aggregate_combinators_test.cc b/domain_tests/aggregate_combinators_test.cc index 07d12e7..4e4c175 100644 --- a/domain_tests/aggregate_combinators_test.cc +++ b/domain_tests/aggregate_combinators_test.cc
@@ -277,7 +277,23 @@ EXPECT_THAT(v, AnyOf(VariantWith<int>(_), VariantWith<double>(_))); } -TEST(Variantof, ValidationRejectsInvalidValue) { +struct Alternative1 {}; + +struct Alternative2 { + int64_t value; +}; + +TEST(VariantOf, WorksWithStructInnerDomain) { + auto domain = VariantOf(StructOf<Alternative1>(), + StructOf<Alternative2>(Arbitrary<int64_t>())); + absl::BitGen bitgen; + absl::variant<Alternative1, Alternative2> v = + Value(domain, bitgen).user_value; + EXPECT_THAT( + v, AnyOf(VariantWith<Alternative1>(_), VariantWith<Alternative2>(_))); +} + +TEST(VariantOf, ValidationRejectsInvalidValue) { absl::BitGen bitgen; auto domain_a = VariantOf(InRange(0, 9), InRange(0.4, 9.1));
diff --git a/fuzztest/internal/domains/variant_of_impl.h b/fuzztest/internal/domains/variant_of_impl.h index cb44463..25b7267 100644 --- a/fuzztest/internal/domains/variant_of_impl.h +++ b/fuzztest/internal/domains/variant_of_impl.h
@@ -77,9 +77,8 @@ value_type GetValue(const corpus_type& v) const { return Switch<sizeof...(Inner)>(v.index(), [&](auto I) -> value_type { - value_type out; - out.template emplace<I>(std::get<I>(inner_).GetValue(std::get<I>(v))); - return out; + return value_type(std::in_place_index<I>, + std::get<I>(inner_).GetValue(std::get<I>(v))); }); }