// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef FUZZTEST_FUZZTEST_INTERNAL_DOMAINS_UNIQUE_ELEMENTS_CONTAINER_OF_IMPL_H_ #define FUZZTEST_FUZZTEST_INTERNAL_DOMAINS_UNIQUE_ELEMENTS_CONTAINER_OF_IMPL_H_ #include <cstddef> #include <optional> #include "absl/container/flat_hash_set.h" #include "absl/random/bit_gen_ref.h" #include "absl/status/status.h" #include "./fuzztest/internal/domains/container_of_impl.h" #include "./fuzztest/internal/domains/domain_base.h" #include "./fuzztest/internal/meta.h" #include "./fuzztest/internal/serialization.h" namespace fuzztest::internal { UniqueDomainValueT; UniqueDomain; // UniqueElementsContainerImpl supports producing containers of type `T`, with // elements of type `E` from domain `InnerDomain inner`, with a guarantee that // each element of the container has a unique value from `InnerDomain`. The // guarantee is provided by using a `absl::flat_hash_set<E>` as our corpus_type, // which is (effectively) produced by `UnorderedSetOf(inner)`. template <typename T, typename InnerDomain> class UniqueElementsContainerImpl : public domain_implementor::DomainBase< UniqueElementsContainerImpl<T, InnerDomain>, T, corpus_type_t<UniqueDomain<InnerDomain>>> { … }; } // namespace fuzztest::internal #endif // FUZZTEST_FUZZTEST_INTERNAL_DOMAINS_UNIQUE_ELEMENTS_CONTAINER_OF_IMPL_H_