38 void WithMinSize(
unsigned _min_size) { this->min_size = _min_size; }
43template <
typename T,
typename InnerDomain>
46 InnerDomain inner_domain;
50 using CorpusType = std::vector<typename InnerDomain::CorpusType>;
56 for (
const auto& elem : v) {
57 result.insert(inner_domain.GetValue(elem));
64 for (
const auto& elem : v) {
65 result.push_back(inner_domain.FromValue(elem));
73 for (
unsigned i = 0; i < E; i++) {
74 result.push_back(inner_domain.GetRandomCorpus(rng));
81 if (
size == -1 && action == 0) {
82 if (
static_cast<int>(v.size()) >
min_size)
83 v.erase(v.begin() + rng.
bounded(
static_cast<uint32_t
>(v.size())));
85 }
else if (
size == -1 && action == 1) {
86 if (
static_cast<int>(v.size()) <
max_size)
87 v.push_back(inner_domain.GetRandomCorpus(rng));
90 inner_domain.Mutate(rng, v[rng.
bounded(
static_cast<uint32_t
>(v.size()))], only_shrink);
95template <
typename T,
typename InnerDomain>
98 InnerDomain inner_domain;
102 using CorpusType = std::vector<typename InnerDomain::CorpusType>;
116 for (
unsigned i = 0; i < E; i++) {
117 result.push_back(inner_domain.GetRandomCorpus(rng));
124 if (
size == -1 && action == 0) {
125 if (
static_cast<int>(v.size()) >
min_size) v.erase(v.begin() + rng.
bounded(
static_cast<uint32_t
>(v.size())));
127 }
else if (
size == -1 && action == 1) {
128 if (
static_cast<int>(v.size()) <
max_size)
129 v.push_back(inner_domain.GetRandomCorpus(rng));
131 inner_domain.Mutate(rng, v[rng.
bounded(
static_cast<uint32_t
>(v.size()))], only_shrink);
149template <
typename T,
typename Inner>
150typename std::enable_if<detail::is_associative_container<T>::value,
151 AssociativeContainerOf<T, Inner>>::type
156template <
typename T,
typename Inner>
157typename std::enable_if<!detail::is_associative_container<T>::value &&
158 detail::is_container<T>::value,
159 SequenceContainerOf<T, Inner>>::type
170template <
template <
typename,
typename...>
class T,
typename... Inner,
171 typename C = T<
typename Inner::ValueType...>>
172auto ContainerOf(Inner... inner) ->
decltype(ContainerOf<C>(std::move(inner)...)) {
173 return ContainerOf<C>(std::move(inner)...);
Definition container_of.h:45
std::vector< typename InnerDomain::CorpusType > CorpusType
Definition container_of.h:50
AssociativeContainerOf(InnerDomain &&inner_domain)
Definition container_of.h:52
void Mutate(Rng &rng, CorpusType &v, bool only_shrink) const override
Definition container_of.h:79
T ValueType
Definition container_of.h:49
CorpusType GetRandomCorpus(Rng &rng) const override
Definition container_of.h:70
virtual CorpusType FromValue(const ValueType &v) const override
Definition container_of.h:62
virtual ValueType GetValue(const CorpusType &v) const override
Definition container_of.h:54
Domain class for generating random values of a specific type.
Definition domain.h:21
uint32_t bounded(uint32_t range) noexcept
Definition rng.h:126
Definition container_of.h:97
SequenceContainerOf(InnerDomain &&inner_domain)
Definition container_of.h:104
virtual ValueType GetValue(const CorpusType &v) const override
Definition container_of.h:106
void Mutate(Rng &rng, CorpusType &v, bool only_shrink) const override
Definition container_of.h:122
CorpusType GetRandomCorpus(Rng &rng) const override
Definition container_of.h:113
virtual CorpusType FromValue(const ValueType &v) const override
Definition container_of.h:109
T ValueType
Definition container_of.h:101
std::vector< typename InnerDomain::CorpusType > CorpusType
Definition container_of.h:102
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
Definition config.h:265
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
Definition config.h:218
Definition benchmark.cpp:17
std::enable_if< detail::is_associative_container< T >::value, AssociativeContainerOf< T, Inner > >::type ContainerOf(Inner &&inner)
Definition container_of.h:152
ContainerOf is a domain that generates random containers filled with elements from an inner domain.
Definition container_of.h:34
int min_size
Definition container_of.h:35
void WithSize(unsigned _size)
Definition container_of.h:39
void WithMaxSize(unsigned _max_size)
Definition container_of.h:37
int max_size
Definition container_of.h:35
int size
Definition container_of.h:35
void WithMinSize(unsigned _min_size)
Definition container_of.h:38