Files
Aethera/web_server/tests/Sliding_Statistics_Tests.cpp
T
2026-08-24 09:37:04 +08:00

39 lines
1.3 KiB
C++

#include "web_server/src/Sliding_Statistics.hpp"
#include <gtest/gtest.h>
#include <limits>
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<double>(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<double>::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);
}
}