26 T element = generate_random_element_function(rng);
29 size_t index = dist(rng);
32 vec.push_back(element);
41 if (vec.size() >= 1) {
43 size_t index = dist(rng);
55 size_t index1 = dist(rng);
56 size_t index2 = dist(rng);
57 std::swap(vec[index1], vec[index2]);
71 size_t index = dist(rng);
72 mutate_element_function(vec[
index], rng);
106 std::vector<CFGInstruction>& vec,
119template void mutate_vec<std::vector<FuzzInstruction>>(
::FuzzInstruction FuzzInstruction
T select(std::mt19937_64 &rng) const
std::variant< InsertSimpleInstructionBlock, JumpToNewBlock, JumpIfToNewBlock, JumpToBlock, JumpIfToBlock, FinalizeWithReturn, SwitchToNonTerminatedBlock, InsertInternalCall > CFGInstruction
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Delete a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec)
Mutate a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec, std::function< void(T &, std::mt19937_64 &)> mutate_element_function)
Insert a random element at a random index.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec, std::function< T(std::mt19937_64 &)> generate_random_element_function)
Swap two random elements at random indices.
static void mutate(std::mt19937_64 &rng, std::vector< T > &vec)
template void mutate_vec< bb::avm2::FF >(std::vector< bb::avm2::FF > &vec, std::mt19937_64 &rng, std::function< void(bb::avm2::FF &, std::mt19937_64 &)> mutate_element_function, std::function< bb::avm2::FF(std::mt19937_64 &)> generate_random_element_function, const VecMutationConfig &config)
template void mutate_vec< CFGInstruction >(std::vector< CFGInstruction > &vec, std::mt19937_64 &rng, std::function< void(CFGInstruction &, std::mt19937_64 &)> mutate_element_function, std::function< CFGInstruction(std::mt19937_64 &)> generate_random_element_function, const VecMutationConfig &config)
void mutate_vec(std::vector< T > &vec, std::mt19937_64 &rng, std::function< void(T &, std::mt19937_64 &)> mutate_element_function, std::function< T(std::mt19937_64 &)> generate_random_element_function, const VecMutationConfig &config)
template void mutate_vec< FuzzInstruction >(std::vector< FuzzInstruction > &vec, std::mt19937_64 &rng, std::function< void(FuzzInstruction &, std::mt19937_64 &)> mutate_element_function, std::function< FuzzInstruction(std::mt19937_64 &)> generate_random_element_function, const VecMutationConfig &config)