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