13 static std::mt19937 random_engine;
19 static std::uniform_real_distribution<> distribution(-1.0, 1.0);
31 std::uniform_real_distribution<> &uniform_distribution =
33 return static_cast<float>(uniform_distribution(random_engine));
39 std::uniform_real_distribution<> &uniform_distribution =
41 return static_cast<double>(uniform_distribution(random_engine));
46 return static_cast<char>(std::rand() % 256);
51 return static_cast<bool>(std::rand() % 2);
57 std::string random_string =
"";
58 for (
int i = 0; i < len; i++)
67 static std::deque<fuzz_pair> registered_fuzzs = {};
68 return registered_fuzzs;
79#if __cplusplus >= 202002L
82 static std::atomic<long unsigned int>
98 std::lock_guard<std::mutex> lock(fuzzs_mutex);
112 fuzzs.push_back({name, fuzz});
118 std::deque<fuzz_pair> the_fuzz;
119 std::for_each(fuzzs.begin(), fuzzs.end(),
122 if (fuzz.first == name)
124 for (long unsigned int i = 0; i < get_max_num_threads();
127 the_fuzz.push_back(fuzz);
131 if (the_fuzz.empty())
134 std::cout <<
"Fuzz test \"" << name <<
"\" not found\n";
140 std::cout <<
"Running fuzz test: " << name <<
"\n";
146 auto fuzz = std::optional<fuzz_pair>{};
152 std::cout <<
"Running fuzz: \"" << fuzz.value().first <<
"\"\n";
154 fuzz.value().second(fuzz.value().first);
158 if (iterations % 1000000 == 0)
161 std::cout <<
"Iterations: " << iterations <<
"\n";
174 for (
long unsigned int i = 0;
#define MAX_RANDOM_STRING_LEN
std::pair< std::string, fuzz_function > fuzz_pair
__attribute__((noinline)) int get_random< int >()
long unsigned int get_num_fuzz_tests()
float get_random< float >()
std::atomic< long unsigned int > & get_iterations()
std::deque< fuzz_pair > & get_fuzzs()
std::atomic< long unsigned int > & get_max_num_threads()
std::vector< std::thread > & get_thread_pool()
std::mutex & get_tests_mutex()
std::atomic< bool > & get_verbose()
void run_one_fuzz(const std::string &name)
void increment_iterations()
char get_random< char >()
void add_fuzz_test(const std::string &name, fuzz_function test)
bool get_random< bool >()
std::pair< std::string, test_function > test_pair
std::atomic< bool > & get_is_threaded()
double get_random< double >()
std::string get_random< std::string >()
std::optional< fuzz_pair > pop_fuzz_or_null()
std::mt19937 & get_random_engine()
std::uniform_real_distribution & get_uniform_distribution()
std::function< void(std::string)> fuzz_function
std::mutex & get_stream_mutex()