valFuzz 1.2.0
Loading...
Searching...
No Matches
fuzz.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#include <algorithm>
9#include <atomic>
10#include <deque>
11#include <fstream>
12#include <functional>
13#include <iostream>
14#include <mutex>
15#include <optional>
16#include <random>
17#include <string>
18#include <thread>
19#include <tuple>
20#include <valfuzz/common.hpp>
21
22namespace valfuzz
23{
24
25/* Fuzzer */
26
27#define MAX_RANDOM_STRING_LEN 1024
28
29template <typename T> T get_random();
30
31#define FUZZME(fun_name, pretty_name) \
32 void fun_name([[maybe_unused]] const std::string &test_name); \
33 static struct fun_name##_register \
34 { \
35 fun_name##_register() \
36 { \
37 valfuzz::add_fuzz_test(pretty_name, fun_name); \
38 } \
39 } fun_name##_register_instance; \
40 void fun_name([[maybe_unused]] const std::string &test_name)
41
42typedef std::function<void(std::string)> fuzz_function;
43typedef std::pair<std::string, fuzz_function> fuzz_pair;
44
45std::deque<fuzz_pair> &get_fuzzs();
46long unsigned int get_num_fuzz_tests();
47std::atomic<long unsigned int> &get_iterations();
48std::mt19937 &get_random_engine();
49std::uniform_real_distribution<> &get_uniform_distribution();
50
52std::optional<fuzz_pair> pop_fuzz_or_null();
53void add_fuzz_test(const std::string &name, fuzz_function test);
54void run_one_fuzz(const std::string &name);
55void _run_fuzz_tests();
56void run_fuzz_tests();
57
58} // namespace valfuzz
std::pair< std::string, fuzz_function > fuzz_pair
Definition fuzz.hpp:43
void run_fuzz_tests()
Definition fuzz.cpp:168
long unsigned int get_num_fuzz_tests()
Definition fuzz.cpp:71
std::atomic< long unsigned int > & get_iterations()
Definition fuzz.cpp:77
std::deque< fuzz_pair > & get_fuzzs()
Definition fuzz.cpp:65
void _run_fuzz_tests()
Definition fuzz.cpp:144
void run_one_fuzz(const std::string &name)
Definition fuzz.cpp:115
void increment_iterations()
Definition fuzz.cpp:87
void add_fuzz_test(const std::string &name, fuzz_function test)
Definition fuzz.cpp:108
std::optional< fuzz_pair > pop_fuzz_or_null()
Definition fuzz.cpp:93
std::mt19937 & get_random_engine()
Definition fuzz.cpp:11
T get_random()
std::uniform_real_distribution & get_uniform_distribution()
Definition fuzz.cpp:17
std::function< void(std::string)> fuzz_function
Definition fuzz.hpp:42