Iguana
1.2.0
Implementation Guardian of Analysis Algorithms
Loading...
Searching...
No Matches
Fuzzing.h
1
#pragma once
2
#include <iguana/services/GlobalParam.h>
3
#include <optional>
4
#include <random>
5
7
class
Fuzzing
8
{
9
10
public
:
11
15
Fuzzing
()
16
{
17
if
(iguana::GlobalConcurrencyModel() !=
"memoize"
)
18
throw
std::runtime_error(
"forbidden to use `Fuzzing` with `GlobalConcurrencyModel != \"memoize\", otherwise you may stress DB servers such as RCDB"
);
19
}
20
22
std::optional<int>
RunNumRandom
()
23
{
24
thread_local
std::mt19937 rng{std::random_device{}()};
25
if
(random_100(rng) < 30)
26
return
golden_runs[random_golden_run(rng)];
27
return
std::nullopt;
28
}
29
32
std::optional<int>
RunNumMod
(
int
const
& evnum)
33
{
34
std::size_t m = std::abs(evnum) % (golden_runs.size() + 1);
35
if
(m < golden_runs.size())
36
return
golden_runs[m];
37
return
std::nullopt;
38
}
39
40
private
:
41
43
std::vector<int>
const
golden_runs = {
44
// FIXME: for now, just RG-A, since some algorithms can _only_ run on RG-A
45
4013,
// rga_spring2018
46
5038,
// rga_fall2018
47
// 5700, // rgk_fall2018
48
// 6302, // rgb_spring2019
49
6666,
// rga_spring2019
50
// 11234, // rgb_fall2019
51
// 11567, // rgb_spring2020
52
// 12933, // rgf_summer2020
53
// 15833, // rgm_fall2021
54
// 16600, // rgc_spring2022
55
// 17407, // rgc_fall2022
56
// 17800, // rgc_spring2023
57
// 18779, // rgd_fall2023
58
// 19877, // rgk_2024
59
// 20522, // rge_2024
60
// 23050, // rgl_2025
61
};
62
64
std::uniform_int_distribution<std::size_t> random_100{0, 99};
65
67
std::uniform_int_distribution<std::size_t> random_golden_run{0, golden_runs.size() - 1};
68
};
Fuzzing::Fuzzing
Fuzzing()
Definition
Fuzzing.h:15
Fuzzing::RunNumRandom
std::optional< int > RunNumRandom()
Definition
Fuzzing.h:22
Fuzzing::RunNumMod
std::optional< int > RunNumMod(int const &evnum)
Definition
Fuzzing.h:32
iguana_v1.2.0
src
iguana
tests
include
Fuzzing.h
Generated by
1.16.1