xrpld
Loading...
Searching...
No Matches
submitters.h
1#pragma once
2
3#include <test/csf/Peer.h>
4#include <test/csf/Scheduler.h>
5#include <test/csf/SimTime.h>
6#include <test/csf/Tx.h>
7
8#include <type_traits>
9
10namespace xrpl::test::csf {
11
12// Submitters are classes for simulating submission of transactions to the
13// network
14
16struct Rate
17{
20
21 [[nodiscard]] double
22 inv() const
23 {
24 return duration.count() / double(count);
25 }
26};
27
45template <class Distribution, class Generator, class Selector>
47{
48 Distribution dist_;
54
55 // Convert generated durations to SimDuration
56 static SimDuration
58 {
59 return d;
60 }
61
62 template <class T>
65 {
66 return SimDuration{static_cast<SimDuration::rep>(t)};
67 }
68
69 void
71 {
72 selector_()->submit(Tx{nextID_++});
73 if (scheduler_.now() < stop_)
74 {
75 scheduler_.in(asDuration(dist_(g_)), [&]() { submit(); });
76 }
77 }
78
79public:
81 Distribution dist,
82 SimTime start,
83 SimTime end,
84 Selector& selector,
85 Scheduler& s,
86 Generator& g)
87 : dist_{dist}, stop_{end}, selector_{selector}, scheduler_{s}, g_{g}
88 {
89 scheduler_.at(start, [&]() { submit(); });
90 }
91};
92
93template <class Distribution, class Generator, class Selector>
94Submitter<Distribution, Generator, Selector>
96 Distribution dist,
97 SimTime start,
98 SimTime end,
99 Selector& sel,
100 Scheduler& s,
101 Generator& g)
102{
103 return Submitter<Distribution, Generator, Selector>(dist, start, end, sel, s, g);
104}
105
106} // namespace xrpl::test::csf
Simulated discrete-event scheduler.
Invocable that returns random samples from a range according to a discrete distribution.
Submits transactions to a specified peer.
Definition submitters.h:47
static std::enable_if_t< std::is_arithmetic_v< T >, SimDuration > asDuration(T t)
Definition submitters.h:64
Submitter(Distribution dist, SimTime start, SimTime end, Selector &selector, Scheduler &s, Generator &g)
Definition submitters.h:80
static SimDuration asDuration(SimDuration d)
Definition submitters.h:57
A single transaction.
Definition Tx.h:21
Submitter< Distribution, Generator, Selector > makeSubmitter(Distribution dist, SimTime start, SimTime end, Selector &sel, Scheduler &s, Generator &g)
Definition submitters.h:95
SimClock::duration SimDuration
Definition SimTime.h:14
SimClock::time_point SimTime
Definition SimTime.h:15
Represents rate as a count/duration.
Definition submitters.h:17
SimDuration duration
Definition submitters.h:19
double inv() const
Definition submitters.h:22