Files
Renderive/Kernel/tests/renderive/base/statistics/Rolling_Statistics_Test.cpp
T
2026-08-12 13:46:53 +08:00

39 lines
1.3 KiB
C++

#include <gtest/gtest.h>
#include <renderive/base/statistics/Rolling_Statistics.hpp>
TEST(RollingStatistics, ComputesWindowDistributionAndEvictsOldSamples) {
Rolling_Statistics statistics(4);
for (const double sample : {1.0, 2.0, 3.0, 10.0})
statistics.add(sample);
auto snapshot = statistics.snapshot();
EXPECT_EQ(snapshot.sample_count, 4U);
EXPECT_DOUBLE_EQ(snapshot.average, 4.0);
EXPECT_DOUBLE_EQ(snapshot.p50, 2.0);
EXPECT_DOUBLE_EQ(snapshot.p95, 10.0);
EXPECT_DOUBLE_EQ(snapshot.p99, 10.0);
EXPECT_DOUBLE_EQ(snapshot.minimum, 1.0);
EXPECT_DOUBLE_EQ(snapshot.maximum, 10.0);
EXPECT_NEAR(snapshot.deviation, 3.5355339059, 1e-9);
statistics.add(4.0);
snapshot = statistics.snapshot();
EXPECT_EQ(snapshot.sample_count, 4U);
EXPECT_DOUBLE_EQ(snapshot.minimum, 2.0);
EXPECT_DOUBLE_EQ(snapshot.average, 4.75);
}
TEST(RollingStatistics, ReplacesActiveSampleAndClearsTheWindow) {
Rolling_Statistics statistics(3);
statistics.add(5.0);
statistics.replace_latest(8.0);
EXPECT_DOUBLE_EQ(statistics.snapshot().p99, 8.0);
statistics.clear();
const auto snapshot = statistics.snapshot();
EXPECT_EQ(snapshot.sample_count, 0U);
EXPECT_DOUBLE_EQ(snapshot.average, 0.0);
EXPECT_DOUBLE_EQ(snapshot.p99, 0.0);
}