#include "web_server/src/Sliding_Statistics.hpp" #include #include namespace aethera::web { TEST(Sliding_Statistics, Derives_Window_Statistics_On_Demand) { Sliding_Statistics statistics{20}; for (int value = 1; value <= 20; ++value) statistics.submit(static_cast(value)); const auto snapshot = statistics.snapshot(); EXPECT_EQ(snapshot.count, 20U); EXPECT_DOUBLE_EQ(snapshot.latest, 20.0); EXPECT_DOUBLE_EQ(snapshot.minimum, 1.0); EXPECT_DOUBLE_EQ(snapshot.maximum, 20.0); EXPECT_DOUBLE_EQ(snapshot.average, 10.5); EXPECT_DOUBLE_EQ(snapshot.trimmed_average, 10.5); EXPECT_DOUBLE_EQ(snapshot.p50, 10.0); EXPECT_DOUBLE_EQ(snapshot.p95, 19.0); EXPECT_DOUBLE_EQ(snapshot.p99, 20.0); } TEST(Sliding_Statistics, Overwrites_Oldest_And_Ignores_Nonfinite_Values) { Sliding_Statistics statistics{3}; statistics.submit(1.0); statistics.submit(2.0); statistics.submit(std::numeric_limits::infinity()); statistics.submit(3.0); statistics.submit(4.0); const auto snapshot = statistics.snapshot(); EXPECT_EQ(snapshot.count, 3U); EXPECT_DOUBLE_EQ(snapshot.latest, 4.0); EXPECT_DOUBLE_EQ(snapshot.minimum, 2.0); EXPECT_DOUBLE_EQ(snapshot.maximum, 4.0); EXPECT_DOUBLE_EQ(snapshot.average, 3.0); } }