cheatah
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>
10namespace stats = cheatah::statistics;
12TEST(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);
19TEST(CheatahStatistics, MedianOddAndEven) {
20 EXPECT_DOUBLE_EQ(stats::median(std::vector<double>{3.0, 1.0, 2.0}), 2.0); // odd → middle
21 EXPECT_DOUBLE_EQ(stats::median(std::vector<double>{1.0, 2.0, 3.0, 4.0}), 2.5); // even → mean of two
24TEST(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 N
27 EXPECT_DOUBLE_EQ(stats::pstdev(d), 2.0);
30TEST(CheatahStatistics, SampleVarianceAndStdev) {
31 const std::vector<double> d{1.0, 2.0, 3.0, 4.0, 5.0}; // mean 3, Σ(x-μ)² = 10
32 EXPECT_DOUBLE_EQ(stats::variance(d), 2.5); // divide by N-1 → 10/4
33 EXPECT_DOUBLE_EQ(stats::stdev(d), std::sqrt(2.5));