Source
stdlib/tests/statistics_test.cpp
1
// Copyright (c) 2026 BigBrain LLC. MIT-licensed (see LICENSE).2
// Original work; see ACKNOWLEDGMENTS.md for the open-source ideas we build upon.3
#include "statistics.hpp"5
#include <cmath>6
#include <vector>8
#include <gtest/gtest.h>10
namespace stats = cheatah::statistics;12
TEST(CheatahStatistics, SumCountMean) {13
const std::vector<double> d{2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};14
EXPECT_DOUBLE_EQ(stats::sum(d), 40.0);15
EXPECT_EQ(stats::count(d), 8u);16
EXPECT_DOUBLE_EQ(stats::mean(d), 5.0);17
}19
TEST(CheatahStatistics, MedianOddAndEven) {20
EXPECT_DOUBLE_EQ(stats::median(std::vector<double>{3.0, 1.0, 2.0}), 2.0); // odd → middle21
EXPECT_DOUBLE_EQ(stats::median(std::vector<double>{1.0, 2.0, 3.0, 4.0}), 2.5); // even → mean of two22
}24
TEST(CheatahStatistics, PopulationVarianceAndStdev) {25
const std::vector<double> d{2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};26
EXPECT_DOUBLE_EQ(stats::pvariance(d), 4.0); // divide by N27
EXPECT_DOUBLE_EQ(stats::pstdev(d), 2.0);28
}30
TEST(CheatahStatistics, SampleVarianceAndStdev) {31
const std::vector<double> d{1.0, 2.0, 3.0, 4.0, 5.0}; // mean 3, Σ(x-μ)² = 1032
EXPECT_DOUBLE_EQ(stats::variance(d), 2.5); // divide by N-1 → 10/433
EXPECT_DOUBLE_EQ(stats::stdev(d), std::sqrt(2.5));34
}