xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
tests
libxrpl
csf
Histogram.h
1
#pragma once
2
3
#include <
cassert
>
4
#include <
cmath
>
5
#include <
cstddef
>
6
#include <
functional
>
7
#include <
map
>
8
9
namespace
xrpl::test::csf
{
10
21
template
<
class
T,
class
Compare = std::less<T>>
22
class
Histogram
23
{
24
// TODO: Consider logarithmic bins around expected median if this becomes
25
// unscalable
26
std::map<T, std::size_t, Compare>
counts_
;
27
std::size_t
samples_
= 0;
28
29
public
:
33
void
34
insert
(T
const
& s)
35
{
36
++
counts_
[s];
37
++
samples_
;
38
}
39
43
[[nodiscard]]
std::size_t
44
size
()
const
45
{
46
return
samples_
;
47
}
48
52
[[nodiscard]]
std::size_t
53
numBins
()
const
54
{
55
return
counts_
.size();
56
}
57
61
[[nodiscard]] T
62
minValue
()
const
63
{
64
return
counts_
.empty() ? T{} :
counts_
.begin()->first;
65
}
66
70
[[nodiscard]] T
71
maxValue
()
const
72
{
73
return
counts_
.empty() ? T{} :
counts_
.rbegin()->first;
74
}
75
79
[[nodiscard]] T
80
avg
()
const
81
{
82
T tmp{};
83
if
(
samples_
== 0)
84
return
tmp;
85
// Since counts are sorted, shouldn't need to worry much about numerical
86
// error
87
for
(
auto
const
& [bin, count] :
counts_
)
88
{
89
tmp += bin * count;
90
}
91
return
tmp /
samples_
;
92
}
93
101
[[nodiscard]] T
102
percentile
(
float
p)
const
103
{
104
assert(p >= 0 && p <= 1);
105
std::size_t
const
pos =
std::round
(p *
samples_
);
106
107
if
(
counts_
.empty())
108
return
T{};
109
110
auto
it =
counts_
.begin();
111
std::size_t
cumsum = it->second;
112
while
(it !=
counts_
.end() && cumsum < pos)
113
{
114
++it;
115
cumsum += it->second;
116
}
117
return
it->first;
118
}
119
};
120
121
}
// namespace xrpl::test::csf
cassert
xrpl::test::csf::Histogram
Basic histogram.
Definition
Histogram.h:23
xrpl::test::csf::Histogram::numBins
std::size_t numBins() const
The number of distinct samples (bins).
Definition
Histogram.h:53
xrpl::test::csf::Histogram< SimTime::duration >::samples_
std::size_t samples_
Definition
Histogram.h:27
xrpl::test::csf::Histogram::percentile
T percentile(float p) const
Calculate the given percentile of the distribution.
Definition
Histogram.h:102
xrpl::test::csf::Histogram::maxValue
T maxValue() const
Maximum observed value.
Definition
Histogram.h:71
xrpl::test::csf::Histogram::avg
T avg() const
Histogram average.
Definition
Histogram.h:80
xrpl::test::csf::Histogram< SimTime::duration >::counts_
std::map< SimTime::duration, std::size_t, std::less< SimTime::duration > > counts_
Definition
Histogram.h:26
xrpl::test::csf::Histogram::minValue
T minValue() const
Minimum observed value.
Definition
Histogram.h:62
xrpl::test::csf::Histogram::size
std::size_t size() const
The number of samples.
Definition
Histogram.h:44
xrpl::test::csf::Histogram::insert
void insert(T const &s)
Insert an sample.
Definition
Histogram.h:34
cmath
cstddef
functional
map
xrpl::test::csf
Definition
Validations.cpp:23
std::round
T round(T... args)
std::size_t
Generated by
1.17.0