仍有bug
This commit is contained in:
@@ -1,38 +1,55 @@
|
||||
#include "web_server/src/Sliding_Statistics.hpp"
|
||||
#include <frame_statistics.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <limits>
|
||||
|
||||
namespace aethera::web {
|
||||
TEST(Sliding_Statistics, Derives_Window_Statistics_On_Demand) {
|
||||
TEST(Sliding_Statistics, Publishes_Derived_Window_Statistics_On_Submit) {
|
||||
Sliding_Statistics statistics{20};
|
||||
for (int value = 1; value <= 20; ++value)
|
||||
statistics.submit(static_cast<double>(value));
|
||||
static_cast<void>(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);
|
||||
const auto& state = statistics.state();
|
||||
EXPECT_EQ(state.count, 20U);
|
||||
EXPECT_DOUBLE_EQ(state.latest, 20.0);
|
||||
EXPECT_DOUBLE_EQ(state.minimum, 1.0);
|
||||
EXPECT_DOUBLE_EQ(state.maximum, 20.0);
|
||||
EXPECT_DOUBLE_EQ(state.average, 10.5);
|
||||
EXPECT_DOUBLE_EQ(state.trimmed_average, 10.5);
|
||||
EXPECT_NEAR(state.p50, 10.0, 2.0);
|
||||
EXPECT_GE(state.p95, 15.0);
|
||||
EXPECT_LE(state.p95, 20.0);
|
||||
EXPECT_GE(state.p99, state.p95);
|
||||
EXPECT_LE(state.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);
|
||||
static_cast<void>(statistics.submit(1.0));
|
||||
static_cast<void>(statistics.submit(2.0));
|
||||
static_cast<void>(statistics.submit(std::numeric_limits<double>::infinity()));
|
||||
static_cast<void>(statistics.submit(3.0));
|
||||
static_cast<void>(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);
|
||||
const auto& state = statistics.state();
|
||||
EXPECT_EQ(state.count, 3U);
|
||||
EXPECT_DOUBLE_EQ(state.latest, 4.0);
|
||||
EXPECT_DOUBLE_EQ(state.minimum, 2.0);
|
||||
EXPECT_DOUBLE_EQ(state.maximum, 4.0);
|
||||
EXPECT_DOUBLE_EQ(state.average, 3.0);
|
||||
}
|
||||
|
||||
TEST(Sliding_Statistics, Estimates_Quantiles_Without_Growing_The_Window) {
|
||||
Sliding_Statistics statistics{64};
|
||||
for (int value = 1; value <= 1000; ++value)
|
||||
static_cast<void>(statistics.submit(static_cast<double>(value)));
|
||||
|
||||
const auto& state = statistics.state();
|
||||
EXPECT_EQ(state.count, 64U);
|
||||
EXPECT_NEAR(state.average, 968.5, 0.001);
|
||||
EXPECT_DOUBLE_EQ(state.minimum, 937.0);
|
||||
EXPECT_DOUBLE_EQ(state.maximum, 1000.0);
|
||||
EXPECT_NEAR(state.p50, 500.0, 10.0);
|
||||
EXPECT_NEAR(state.p95, 950.0, 15.0);
|
||||
EXPECT_NEAR(state.p99, 990.0, 15.0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user