3 #include <boost/test/unit_test.hpp> 11 std::chrono::microseconds c(1000000);
15 std::uint64_t last = 0;
16 std::uint64_t repeats = 0;
17 auto f = [&](std::uint64_t c, std::uint64_t r) {
27 BOOST_CHECK_EQUAL(nsamples, 0);
29 BOOST_CHECK_EQUAL(nsamples, 1);
30 BOOST_CHECK_EQUAL(last, 3);
32 BOOST_CHECK_EQUAL(nsamples, 2);
33 BOOST_CHECK_EQUAL(last, 4);
34 c = std::chrono::microseconds(1000000) + std::chrono::microseconds(99);
36 BOOST_CHECK_EQUAL(nsamples, 99);
37 BOOST_CHECK_EQUAL(last, 5);
39 BOOST_CHECK_EQUAL(nsamples, 99);
40 BOOST_CHECK_EQUAL(last, 5);
42 BOOST_CHECK_EQUAL(nsamples, 100);
43 BOOST_CHECK_EQUAL(last, 7);
45 BOOST_CHECK_EQUAL(nsamples, 101);
46 BOOST_CHECK_EQUAL(last, 5);
53 std::chrono::microseconds period(100);
56 std::chrono::microseconds ts(1000000);
60 std::uint64_t last = 0;
61 std::uint64_t repeats = 0;
62 auto f = [&](std::uint64_t c, std::uint64_t r) {
71 BOOST_CHECK_EQUAL(calls, 0);
74 BOOST_CHECK_EQUAL(calls, 1);
75 BOOST_CHECK_EQUAL(nsamples, 1);
76 BOOST_CHECK_EQUAL(last, 1);
79 BOOST_CHECK_EQUAL(calls, 2);
80 BOOST_CHECK_EQUAL(nsamples, 2);
81 BOOST_CHECK_EQUAL(last, 2);
88 BOOST_CHECK_EQUAL(calls, 2 + 100 + 1);
90 BOOST_CHECK_EQUAL(nsamples, 2 + 15 * period.count());
91 BOOST_CHECK_EQUAL(last, 0);
92 BOOST_CHECK_EQUAL(repeats, 14 * period.count());
99 BOOST_CHECK_EQUAL(calls, 103 + 4);
100 BOOST_CHECK_EQUAL(nsamples, 1502 + 4);
101 BOOST_CHECK_EQUAL(last, 4);
102 BOOST_CHECK_EQUAL(repeats, 1);
105 ts += 137 * period + std::chrono::microseconds(7);
107 BOOST_CHECK_EQUAL(calls, 107 + 100 + 1);
108 BOOST_CHECK_EQUAL(nsamples, 1506 + 137 * period.count() + 7);
109 BOOST_CHECK_EQUAL(last, 0);
110 BOOST_CHECK_EQUAL(repeats, 136 * period.count() + 7);
117 typedef std::chrono::milliseconds duration_type;
120 duration_type c(1000);
124 std::uint64_t last = 0;
125 std::uint64_t repeats = 0;
126 auto f = [&](std::uint64_t c, std::uint64_t r) {
136 BOOST_CHECK_EQUAL(nsamples, 0);
138 BOOST_CHECK_EQUAL(nsamples, 1);
139 BOOST_CHECK_EQUAL(last, 3);
141 BOOST_CHECK_EQUAL(nsamples, 2);
142 BOOST_CHECK_EQUAL(last, 4);
143 c = std::chrono::milliseconds(1000) + std::chrono::milliseconds(99);
145 BOOST_CHECK_EQUAL(nsamples, 99);
146 BOOST_CHECK_EQUAL(last, 5);
148 BOOST_CHECK_EQUAL(nsamples, 99);
149 BOOST_CHECK_EQUAL(last, 5);
151 BOOST_CHECK_EQUAL(nsamples, 100);
152 BOOST_CHECK_EQUAL(last, 7);
154 BOOST_CHECK_EQUAL(nsamples, 101);
155 BOOST_CHECK_EQUAL(last, 5);
162 using namespace std::chrono;
165 BOOST_CHECK_THROW(tested(seconds(10), seconds(20)), std::invalid_argument);
166 BOOST_CHECK_THROW(tested(seconds(10), seconds(0)), std::invalid_argument);
167 BOOST_CHECK_THROW(tested(seconds(10), seconds(3)), std::invalid_argument);
169 typedef std::chrono::duration<std::size_t> ticks;
171 auto big = std::numeric_limits<std::size_t>::max();
172 BOOST_CHECK_THROW(testbig(ticks(big), ticks(1)), std::invalid_argument);
Estimate event rates over a trailing measurement period.
BOOST_AUTO_TEST_CASE(event_rate_estimator_base)
void sample(duration_type ts, functor update)
Record a sample.
std::size_t nsamples(container_type const &a)
Count the elements in the last dimension of a vector-like container.