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
7class Fuzzing
8{
9
10 public:
11
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()
Definition Fuzzing.h:15
std::optional< int > RunNumRandom()
Definition Fuzzing.h:22
std::optional< int > RunNumMod(int const &evnum)
Definition Fuzzing.h:32