5#include <gtest/gtest.h>
24 EXPECT_EQ(
timer.count(), 0);
25 EXPECT_DOUBLE_EQ(
timer.mean(), 0.0);
26 EXPECT_DOUBLE_EQ(
timer.min(), 0.0);
27 EXPECT_DOUBLE_EQ(
timer.max(), 0.0);
28 EXPECT_DOUBLE_EQ(
timer.median(), 0.0);
29 EXPECT_DOUBLE_EQ(
timer.p99(), 0.0);
36 EXPECT_EQ(
timer.count(), 1);
37 EXPECT_DOUBLE_EQ(
timer.mean(), 100.0);
38 EXPECT_DOUBLE_EQ(
timer.min(), 100.0);
39 EXPECT_DOUBLE_EQ(
timer.max(), 100.0);
40 EXPECT_DOUBLE_EQ(
timer.median(), 100.0);
45 for (
int i = 1; i <= 100; ++i) {
46 timer.record(
static_cast<double>(i));
49 EXPECT_EQ(
timer.count(), 100);
50 EXPECT_DOUBLE_EQ(
timer.mean(), 50.5);
51 EXPECT_DOUBLE_EQ(
timer.min(), 1.0);
52 EXPECT_DOUBLE_EQ(
timer.max(), 100.0);
58 for (
int i = 1; i <= 100; ++i) {
59 timer.record(
static_cast<double>(i));
64 EXPECT_NEAR(median, 50.5, 1.0);
70 for (
int i = 1; i <= 1000; ++i) {
71 timer.record(
static_cast<double>(i));
75 EXPECT_NEAR(
timer.median(), 500.5, 5.0);
78 EXPECT_NEAR(
timer.p90(), 900.0, 10.0);
81 EXPECT_NEAR(
timer.p95(), 950.0, 10.0);
84 EXPECT_NEAR(
timer.p99(), 990.0, 10.0);
94 EXPECT_DOUBLE_EQ(
timer.get_percentile(0), 10.0);
97 EXPECT_DOUBLE_EQ(
timer.get_percentile(100), 30.0);
113 EXPECT_NEAR(
timer.mean(), 5.0, 0.01);
114 EXPECT_NEAR(
timer.stddev(), 2.0, 0.01);
122 EXPECT_EQ(
timer.count(), 2);
126 EXPECT_EQ(
timer.count(), 0);
127 EXPECT_DOUBLE_EQ(
timer.mean(), 0.0);
128 EXPECT_DOUBLE_EQ(
timer.min(), 0.0);
129 EXPECT_DOUBLE_EQ(
timer.max(), 0.0);
134 for (
int i = 1; i <= 100; ++i) {
135 timer.record(
static_cast<double>(i));
140 EXPECT_EQ(snap.count, 100);
141 EXPECT_DOUBLE_EQ(snap.mean, 50.5);
142 EXPECT_DOUBLE_EQ(snap.min, 1.0);
143 EXPECT_DOUBLE_EQ(snap.max, 100.0);
144 EXPECT_NEAR(snap.p50, 50.5, 1.0);
145 EXPECT_NEAR(snap.p99, 99.0, 1.0);
152 for (
int i = 0; i < 1000; ++i) {
153 timer.record(
static_cast<double>(i));
156 EXPECT_EQ(
timer.count(), 1000);
157 EXPECT_LE(
timer.samples.size(), 100);
163 auto duration = std::chrono::milliseconds(150);
164 timer.record(duration);
166 EXPECT_EQ(
timer.count(), 1);
167 EXPECT_NEAR(
timer.mean(), 150.0, 0.01);
175 std::this_thread::sleep_for(std::chrono::milliseconds(10));
178 EXPECT_EQ(
timer.count(), 1);
179 EXPECT_GE(
timer.mean(), 10.0);
185 for (
int i = 1; i <= 1000; ++i) {
186 timer.record(
static_cast<double>(i));
190 EXPECT_NEAR(
timer.p999(), 999.0, 2.0);
204 EXPECT_EQ(hist.
buckets.size(), 15);
205 EXPECT_DOUBLE_EQ(hist.
buckets[0].upper_bound, 0.005);
217 EXPECT_DOUBLE_EQ(hist.
sum, 1.6);
218 EXPECT_NEAR(hist.
mean(), 0.533, 0.01);
236 EXPECT_DOUBLE_EQ(
summary.sum, 60.0);
237 EXPECT_DOUBLE_EQ(
summary.mean(), 20.0);
238 EXPECT_DOUBLE_EQ(
summary.min_value, 10.0);
239 EXPECT_DOUBLE_EQ(
summary.max_value, 30.0);
249 EXPECT_DOUBLE_EQ(
summary.sum, 0.0);
250 EXPECT_DOUBLE_EQ(
summary.mean(), 0.0);
Test suite for timer_data with percentile calculations.
RAII timer scope for automatic duration recording with timer_data.
Common metric type definitions for efficient storage.
@ timer
StatsD-specific timer metric.
@ summary
Pre-calculated quantiles and count/sum.
Histogram data with buckets.
double mean() const noexcept
Get mean value.
void init_standard_buckets()
Initialize standard buckets.
std::vector< histogram_bucket > buckets
void add_sample(double value)
Add value to histogram.
Summary statistics for metrics.
void add_sample(double value)
Add sample to summary.
Timer data with percentile calculations.
snapshot get_snapshot() const
double median() const
Get median (p50)
void record(double duration_ms)
Record a duration sample (in milliseconds)
TEST_F(TimerMetricsTest, EmptyTimerReturnsZero)