Centipede 0.0.1
Centipede program
Loading...
Searching...
No Matches
test_writer.cpp
1#include "centipede/data/entry.hpp"
2#include "centipede/writer/binary.hpp"
3#include <algorithm>
4#include <cstdio> // IWYU pragma: keep
5#include <cstdlib>
6#include <print>
7#include <random>
8#include <ranges>
9
10constexpr auto N_ENTRIES = 4000;
11constexpr auto MAX_N_ENTRYPOINTS = 20;
12constexpr auto N_LOCALS = 3;
13constexpr auto N_GLOBALS = 4;
14constexpr auto MIN_VALUE = 1.F;
15constexpr auto MAX_VALUE = 10.F;
16
17auto main() -> int
18{
19 auto writer = centipede::writer::Binary{};
20
21 auto init_err = writer.init();
22
23 if (not init_err.has_value())
24 {
25 std::println(stderr, "Error: {}", init_err.error());
26 return EXIT_FAILURE;
27 }
28
30 auto entry_point = NewEntryPoint{};
31
32 auto rnd_dev = std::random_device{};
33 auto rnd_engine = std::mt19937{ rnd_dev() };
34 auto rnd_float_dst = std::uniform_real_distribution<float>{ MIN_VALUE, MAX_VALUE };
35 auto rnd_int_dst = std::uniform_int_distribution<int>{ 1, MAX_N_ENTRYPOINTS };
36 auto generate_int_rnd = [&rnd_int_dst, &rnd_engine]() -> int { return rnd_int_dst(rnd_engine); };
37 auto generate_float_rnd = [&rnd_float_dst, &rnd_engine]() -> float { return rnd_float_dst(rnd_engine); };
38 auto randomize_locals = [&generate_float_rnd](NewEntryPoint::LocalDerivs& local_derivs) -> void
39 { std::ranges::generate(local_derivs, generate_float_rnd); };
40 auto randomize_globals = [&generate_float_rnd,
41 &generate_int_rnd](NewEntryPoint::GlobalDerivs& global_derivs) -> void
42 {
43 std::ranges::generate(global_derivs | std::views::values, generate_float_rnd);
44 std::ranges::generate(global_derivs | std::views::keys, generate_int_rnd);
45 };
46
47 for ([[maybe_unused]] auto entry_idx : std::views::iota(0, N_ENTRIES))
48 {
49 auto n_entrypoints = generate_int_rnd();
50 for ([[maybe_unused]] auto entrypoint_idx : std::views::iota(0, n_entrypoints))
51 {
52 randomize_locals(entry_point.local_derivs);
53 randomize_globals(entry_point.global_derivs);
54 entry_point.measurement = generate_float_rnd();
55 entry_point.sigma = generate_float_rnd();
56 auto err = writer.add_entrypoint(entry_point);
57 if (not err.has_value())
58 {
59 std::println(stderr, "Error: {}", err.error());
60 return EXIT_FAILURE;
61 }
62 }
63 [[maybe_unused]] auto size = writer.write_current_entry();
64 }
65
66 return EXIT_SUCCESS;
67}
Class for writing binary files.
Definition binary.hpp:63
auto init() -> EnumError<>
Initialization.
Definition binary.cpp:50
Structure of a entrypoint.
Definition entry.hpp:20