From 8c2c0131d51bf3ead5a33fb017d772319fb20cca Mon Sep 17 00:00:00 2001 From: Steve Bronder Date: Tue, 3 Nov 2026 16:12:47 -0500 Subject: [PATCH] Make probability test fixtures safe for grouped linking Inline shared probability-test helpers and distinguish colliding fixture types. Move ordinary GoogleTests out of generated fixture headers into unit sources, preserving their assertions and avoiding duplicate tests. --- test/prob/bernoulli/bernoulli_test.hpp | 5 -- .../prob/beta_binomial/beta_binomial_test.hpp | 5 -- test/prob/binomial/binomial_test.hpp | 15 ----- test/prob/cauchy/cauchy_test.hpp | 7 --- .../double_exponential_test.hpp | 11 ---- test/prob/exponential/exponential_test.hpp | 16 ------ test/prob/frechet/frechet_test.hpp | 11 ---- test/prob/inv_gamma/inv_gamma_test.hpp | 4 -- test/prob/logistic/logistic_test.hpp | 4 -- .../prob/loglogistic/loglogistic_cdf_test.hpp | 2 +- test/prob/lognormal/lognormal_test.hpp | 14 ----- .../neg_binomial_2_ccdf_log_test.hpp | 2 +- test/prob/pareto/pareto_test.hpp | 4 -- test/prob/poisson/poisson_log_test.hpp | 2 +- .../std_normal/std_normal_cdf_log_test.hpp | 2 +- test/prob/utility.hpp | 55 ++++++++++--------- test/prob/weibull/weibull_test.hpp | 15 ----- test/unit/math/prim/prob/bernoulli_test.cpp | 5 ++ .../math/prim/prob/beta_binomial_test.cpp | 5 ++ test/unit/math/prim/prob/binomial_test.cpp | 15 +++++ test/unit/math/prim/prob/cauchy_test.cpp | 7 +++ .../prim/prob/double_exponential_test.cpp | 11 ++++ test/unit/math/prim/prob/exponential_test.cpp | 16 ++++++ test/unit/math/prim/prob/frechet_test.cpp | 11 ++++ test/unit/math/prim/prob/inv_gamma_test.cpp | 4 ++ test/unit/math/prim/prob/logistic_test.cpp | 4 ++ test/unit/math/prim/prob/lognormal_test.cpp | 14 +++++ test/unit/math/prim/prob/pareto_test.cpp | 4 ++ test/unit/math/prim/prob/weibull_test.cpp | 15 +++++ 29 files changed, 144 insertions(+), 141 deletions(-) diff --git a/test/prob/bernoulli/bernoulli_test.hpp b/test/prob/bernoulli/bernoulli_test.hpp index 7c195892cc5..726d8af0dd2 100644 --- a/test/prob/bernoulli/bernoulli_test.hpp +++ b/test/prob/bernoulli/bernoulli_test.hpp @@ -81,8 +81,3 @@ class AgradDistributionsBernoulli : public AgradDistributionTest { throw std::domain_error("n should either be 1 or 0"); } }; - -TEST(ProbDistributionsBernoulliCDF, Values) { - EXPECT_FLOAT_EQ(1, stan::math::bernoulli_cdf(1, 0.57)); - EXPECT_FLOAT_EQ(1 - 0.57, stan::math::bernoulli_cdf(0, 0.57)); -} diff --git a/test/prob/beta_binomial/beta_binomial_test.hpp b/test/prob/beta_binomial/beta_binomial_test.hpp index 1320e917453..0dd5016c339 100644 --- a/test/prob/beta_binomial/beta_binomial_test.hpp +++ b/test/prob/beta_binomial/beta_binomial_test.hpp @@ -90,8 +90,3 @@ class AgradDistributionsBetaBinomial : public AgradDistributionTest { - lbeta(alpha, beta); } }; - -TEST(ProbDistributionsBetaBinomialCDF, Values) { - EXPECT_FLOAT_EQ(0.8868204314, - stan::math::beta_binomial_cdf(49, 100, 1.349, 3.938)); -} diff --git a/test/prob/binomial/binomial_test.hpp b/test/prob/binomial/binomial_test.hpp index d8a674b1b8b..6df4aec7bed 100644 --- a/test/prob/binomial/binomial_test.hpp +++ b/test/prob/binomial/binomial_test.hpp @@ -71,18 +71,3 @@ class AgradDistributionsBinomial : public AgradDistributionTest { + (N - n) * log1m(theta); } }; - -TEST(ProbDistributionsBinomialCDF, Values) { - EXPECT_FLOAT_EQ(0.042817421, stan::math::binomial_cdf(24, 54, 0.57)); - EXPECT_FLOAT_EQ(1.0 - 0.57, - stan::math::binomial_cdf( - 0, 1, 0.57)); // Consistency with expected Bernoulli - EXPECT_FLOAT_EQ(1.0, stan::math::binomial_cdf( - 1, 1, 0.57)); // Consistency with expected Bernoulli - EXPECT_FLOAT_EQ(stan::math::bernoulli_cdf(0, 0.57), - stan::math::binomial_cdf( - 0, 1, 0.57)); // Consistency with implemented Bernoulli - EXPECT_FLOAT_EQ(stan::math::bernoulli_cdf(1, 0.57), - stan::math::binomial_cdf( - 1, 1, 0.57)); // Consistency with implemented Bernoulli -} diff --git a/test/prob/cauchy/cauchy_test.hpp b/test/prob/cauchy/cauchy_test.hpp index c6bbc853a81..c1e32eaad1a 100644 --- a/test/prob/cauchy/cauchy_test.hpp +++ b/test/prob/cauchy/cauchy_test.hpp @@ -87,10 +87,3 @@ class AgradDistributionsCauchy : public AgradDistributionTest { return -stan::math::LOG_PI - log(sigma) - log1p(square((y - mu) / sigma)); } }; - -TEST(ProbDistributionsCauchy, Cumulative) { - using stan::math::cauchy_cdf; - EXPECT_FLOAT_EQ(0.75, cauchy_cdf(1.0, 0.0, 1.0)); - EXPECT_FLOAT_EQ(0.187167, cauchy_cdf(-1.5, 0.0, 1.0)); - EXPECT_FLOAT_EQ(0.187167, cauchy_cdf(-2.5, -1.0, 1.0)); -} diff --git a/test/prob/double_exponential/double_exponential_test.hpp b/test/prob/double_exponential/double_exponential_test.hpp index db5aa235a59..df245c625a3 100644 --- a/test/prob/double_exponential/double_exponential_test.hpp +++ b/test/prob/double_exponential/double_exponential_test.hpp @@ -114,14 +114,3 @@ class AgradDistributionsDoubleExponential : public AgradDistributionTest { return -LOG_TWO - log(sigma) - fabs(y - mu) / sigma; } }; - -TEST(ProbDistributionsDoubleExponential, Cumulative) { - EXPECT_FLOAT_EQ(0.5, stan::math::double_exponential_cdf(1.0, 1.0, 1.0)); - EXPECT_FLOAT_EQ(0.8160603, stan::math::double_exponential_cdf(2.0, 1.0, 1.0)); - EXPECT_FLOAT_EQ(0.003368973, - stan::math::double_exponential_cdf(-3.0, 2.0, 1.0)); - EXPECT_FLOAT_EQ(0.6967347, stan::math::double_exponential_cdf(1.0, 0.0, 2.0)); - EXPECT_FLOAT_EQ(0.2246645, stan::math::double_exponential_cdf(1.9, 2.3, 0.5)); - EXPECT_FLOAT_EQ(0.10094826, - stan::math::double_exponential_cdf(1.9, 2.3, 0.25)); -} diff --git a/test/prob/exponential/exponential_test.hpp b/test/prob/exponential/exponential_test.hpp index 91a7983daf3..e82b87cd112 100644 --- a/test/prob/exponential/exponential_test.hpp +++ b/test/prob/exponential/exponential_test.hpp @@ -76,19 +76,3 @@ class AgradDistributionsExponential : public AgradDistributionTest { return log(beta) - beta * y; } }; - -TEST(ProbDistributionsExponential, Cumulative) { - using stan::math::exponential_cdf; - using std::numeric_limits; - EXPECT_FLOAT_EQ(0.95021293, exponential_cdf(2.0, 1.5)); - EXPECT_FLOAT_EQ(1.0, exponential_cdf(15.0, 3.9)); - EXPECT_FLOAT_EQ(0.62280765, exponential_cdf(0.25, 3.9)); - - // ?? - // EXPECT_FLOAT_EQ(0.0, - // exponential_cdf(-numeric_limits::infinity(), - // 1.5)); - EXPECT_FLOAT_EQ(0.0, exponential_cdf(0.0, 1.5)); - EXPECT_FLOAT_EQ(1.0, - exponential_cdf(numeric_limits::infinity(), 1.5)); -} diff --git a/test/prob/frechet/frechet_test.hpp b/test/prob/frechet/frechet_test.hpp index 2bd2b5ec92d..f27305623d8 100644 --- a/test/prob/frechet/frechet_test.hpp +++ b/test/prob/frechet/frechet_test.hpp @@ -86,14 +86,3 @@ class AgradDistributionsFrechet : public AgradDistributionTest { - pow(sigma / y, alpha); } }; - -TEST(ProbDistributionsFrechet, Cumulative) { - using stan::math::frechet_cdf; - using std::numeric_limits; - EXPECT_FLOAT_EQ(0.6065306597, frechet_cdf(2.0, 1.0, 1.0)); - EXPECT_FLOAT_EQ(2.744338423e-5, frechet_cdf(0.8, 2.9, 1.8)); - EXPECT_FLOAT_EQ(0.0, frechet_cdf(0.25, 3.9, 1.7)); - - EXPECT_FLOAT_EQ(1.0, - frechet_cdf(numeric_limits::infinity(), 1.0, 1.0)); -} diff --git a/test/prob/inv_gamma/inv_gamma_test.hpp b/test/prob/inv_gamma/inv_gamma_test.hpp index 2cf8b00160a..0395c07d41d 100644 --- a/test/prob/inv_gamma/inv_gamma_test.hpp +++ b/test/prob/inv_gamma/inv_gamma_test.hpp @@ -90,7 +90,3 @@ class AgradDistributionsInvGamma : public AgradDistributionTest { - beta / y; } }; - -TEST(ProbDistributionsInvGammaCdf, Values) { - EXPECT_FLOAT_EQ(0.557873, stan::math::inv_gamma_cdf(4.39, 1.349, 3.938)); -} diff --git a/test/prob/logistic/logistic_test.hpp b/test/prob/logistic/logistic_test.hpp index c0a5b2ae3f8..a6b9d61cf44 100644 --- a/test/prob/logistic/logistic_test.hpp +++ b/test/prob/logistic/logistic_test.hpp @@ -79,7 +79,3 @@ class AgradDistributionsLogistic : public AgradDistributionTest { return -(y - mu) / sigma - log(sigma) - 2.0 * log1p(exp(-(y - mu) / sigma)); } }; - -TEST(ProbDistributionsLogisticCDF, Values) { - EXPECT_FLOAT_EQ(0.047191944, stan::math::logistic_cdf(-3.45, 5.235, 2.89)); -} diff --git a/test/prob/loglogistic/loglogistic_cdf_test.hpp b/test/prob/loglogistic/loglogistic_cdf_test.hpp index bad07c22a48..c9fc37240f4 100644 --- a/test/prob/loglogistic/loglogistic_cdf_test.hpp +++ b/test/prob/loglogistic/loglogistic_cdf_test.hpp @@ -7,7 +7,7 @@ using stan::math::var; using std::numeric_limits; using std::vector; -class AgradCdfLogistic : public AgradCdfTest { +class AgradCdfLoglogistic : public AgradCdfTest { public: void valid_values(vector >& parameters, vector& cdf) { vector param(3); diff --git a/test/prob/lognormal/lognormal_test.hpp b/test/prob/lognormal/lognormal_test.hpp index 246808a7bfe..674b80aa354 100644 --- a/test/prob/lognormal/lognormal_test.hpp +++ b/test/prob/lognormal/lognormal_test.hpp @@ -84,17 +84,3 @@ class AgradDistributionsLognormal : public AgradDistributionTest { - square(log(y) - mu) / (2.0 * sigma * sigma); } }; - -TEST(ProbDistributionsLognormal, Cumulative) { - using stan::math::lognormal_cdf; - EXPECT_FLOAT_EQ(0.4687341, lognormal_cdf(1.2, 0.3, 1.5)); - EXPECT_FLOAT_EQ(0.2835506, lognormal_cdf(12.0, 3.0, 0.9)); - - double pos_inf = std::numeric_limits::infinity(); - - // ?? double neg_inf = -pos_inf; - // ?? EXPECT_FLOAT_EQ(0.0, lognormal_cdf(neg_inf, 0.0, 1.0)); - - EXPECT_FLOAT_EQ(0.0, lognormal_cdf(0.0, 0.0, 1.0)); - EXPECT_FLOAT_EQ(1.0, lognormal_cdf(pos_inf, 0.0, 1.0)); -} diff --git a/test/prob/neg_binomial_2/neg_binomial_2_ccdf_log_test.hpp b/test/prob/neg_binomial_2/neg_binomial_2_ccdf_log_test.hpp index d46026074ae..731a4a6de11 100644 --- a/test/prob/neg_binomial_2/neg_binomial_2_ccdf_log_test.hpp +++ b/test/prob/neg_binomial_2/neg_binomial_2_ccdf_log_test.hpp @@ -9,7 +9,7 @@ using stan::math::var; using std::numeric_limits; using std::vector; -class AgradCdfLogNegBinomial2 : public AgradCcdfLogTest { +class AgradCcdfLogNegBinomial2 : public AgradCcdfLogTest { public: void valid_values(vector >& parameters, vector& ccdf_log) { diff --git a/test/prob/pareto/pareto_test.hpp b/test/prob/pareto/pareto_test.hpp index 2147bf254dc..5115ed532f9 100644 --- a/test/prob/pareto/pareto_test.hpp +++ b/test/prob/pareto/pareto_test.hpp @@ -90,7 +90,3 @@ class AgradDistributionsPareto : public AgradDistributionTest { return log(alpha) + lmultiply(alpha, y_min) - lmultiply(alpha + 1.0, y); } }; - -TEST(ProbDistributionsParetoCDF, Values) { - EXPECT_FLOAT_EQ(0.60434447, stan::math::pareto_cdf(3.45, 2.89, 5.235)); -} diff --git a/test/prob/poisson/poisson_log_test.hpp b/test/prob/poisson/poisson_log_test.hpp index 2fb6cf9fccb..3b65f38a2a5 100644 --- a/test/prob/poisson/poisson_log_test.hpp +++ b/test/prob/poisson/poisson_log_test.hpp @@ -8,7 +8,7 @@ using stan::math::var; using std::numeric_limits; using std::vector; -class AgradDistributionsPoisson : public AgradDistributionTest { +class AgradDistributionsPoissonLog : public AgradDistributionTest { public: void valid_values(vector >& parameters, vector& log_prob) { diff --git a/test/prob/std_normal/std_normal_cdf_log_test.hpp b/test/prob/std_normal/std_normal_cdf_log_test.hpp index fb1a83a14ae..d67e5dfd225 100644 --- a/test/prob/std_normal/std_normal_cdf_log_test.hpp +++ b/test/prob/std_normal/std_normal_cdf_log_test.hpp @@ -9,7 +9,7 @@ using stan::math::square; using std::numeric_limits; using std::vector; -class AgradCdfLogNormal : public AgradCdfLogTest { +class AgradCdfLogStdNormal : public AgradCdfLogTest { public: void valid_values(vector >& parameters, vector& cdf_log) { diff --git a/test/prob/utility.hpp b/test/prob/utility.hpp index 0a6a7ee0857..035416e959e 100644 --- a/test/prob/utility.hpp +++ b/test/prob/utility.hpp @@ -29,7 +29,7 @@ struct is_empty { // ------------------------------------------------------------ namespace std { -std::ostream& operator<<(std::ostream& os, const vector& param) { +inline std::ostream& operator<<(std::ostream& os, const vector& param) { os << "("; for (size_t n = 0; n < param.size(); n++) { os << param[n]; @@ -40,7 +40,7 @@ std::ostream& operator<<(std::ostream& os, const vector& param) { return os; } -std::ostream& operator<<(std::ostream& os, const vector& param) { +inline std::ostream& operator<<(std::ostream& os, const vector& param) { os << "("; for (size_t n = 0; n < param.size(); n++) { os << param[n]; @@ -64,7 +64,8 @@ inline T get_param(const vector& params, const size_t n) { } template <> -empty get_param(const vector& /*params*/, const size_t /*n*/) { +inline empty get_param(const vector& /*params*/, + const size_t /*n*/) { return empty(); } @@ -133,8 +134,8 @@ inline T get_params(const vector>& parameters, const size_t p) { // handle empty template <> -empty get_params(const vector>& /*parameters*/, - const size_t /*p*/) { +inline empty get_params(const vector>& /*parameters*/, + const size_t /*p*/) { return empty(); } // handle scalars @@ -175,7 +176,7 @@ inline fvar get_params>(const vector>& parameters, return param; } template <> -fvar> get_params>>( +inline fvar> get_params>>( const vector>& parameters, const size_t p) { fvar> param(0); if (p < parameters[0].size()) { @@ -185,7 +186,7 @@ fvar> get_params>>( return param; } template <> -fvar> get_params>>( +inline fvar> get_params>>( const vector>& parameters, const size_t p) { fvar> param(0); if (p < parameters[0].size()) { @@ -195,7 +196,8 @@ fvar> get_params>>( return param; } template <> -int get_params(const vector>& parameters, const size_t p) { +inline int get_params(const vector>& parameters, + const size_t p) { int param(0); if (p < parameters[0].size()) param = (int)parameters[0][p]; @@ -212,7 +214,7 @@ inline vector get_params>( return param; } template <> -vector get_params>( +inline vector get_params>( const vector>& parameters, const size_t p) { vector param(parameters.size()); for (size_t n = 0; n < parameters.size(); n++) @@ -230,7 +232,7 @@ inline vector get_params>( return param; } template <> -vector> get_params>>( +inline vector> get_params>>( const vector>& parameters, const size_t p) { vector> param(parameters.size()); for (size_t n = 0; n < parameters.size(); n++) @@ -241,7 +243,7 @@ vector> get_params>>( return param; } template <> -vector> get_params>>( +inline vector> get_params>>( const vector>& parameters, const size_t p) { vector> param(parameters.size()); for (size_t n = 0; n < parameters.size(); n++) @@ -252,7 +254,7 @@ vector> get_params>>( return param; } template <> -vector>> get_params>>>( +inline vector>> get_params>>>( const vector>& parameters, const size_t p) { vector>> param(parameters.size()); for (size_t n = 0; n < parameters.size(); n++) @@ -263,7 +265,7 @@ vector>> get_params>>>( return param; } template <> -vector>> get_params>>>( +inline vector>> get_params>>>( const vector>& parameters, const size_t p) { vector>> param(parameters.size()); for (size_t n = 0; n < parameters.size(); n++) @@ -300,8 +302,8 @@ inline T get_params(const vector>& parameters, // handle empty template <> -empty get_params(const vector>& /*parameters*/, - const size_t /*n*/, const size_t /*p*/) { +inline empty get_params(const vector>& /*parameters*/, + const size_t /*n*/, const size_t /*p*/) { return empty(); } // handle scalars @@ -342,7 +344,7 @@ inline fvar get_params>(const vector>& parameters, return param; } template <> -fvar> get_params>>( +inline fvar> get_params>>( const vector>& parameters, const size_t n, const size_t p) { fvar> param(0); if (p < parameters[0].size()) { @@ -352,7 +354,7 @@ fvar> get_params>>( return param; } template <> -fvar> get_params>>( +inline fvar> get_params>>( const vector>& parameters, const size_t n, const size_t p) { fvar> param(0); if (p < parameters[0].size()) { @@ -362,8 +364,8 @@ fvar> get_params>>( return param; } template <> -int get_params(const vector>& parameters, const size_t n, - const size_t p) { +inline int get_params(const vector>& parameters, + const size_t n, const size_t p) { int param(0); if (p < parameters[0].size()) param = (int)parameters[n][p]; @@ -381,7 +383,7 @@ inline vector get_params>( return param; } template <> -vector get_params>( +inline vector get_params>( const vector>& parameters, const size_t /*n*/, const size_t p) { vector param(parameters.size()); @@ -401,7 +403,7 @@ inline vector get_params>( return param; } template <> -vector> get_params>>( +inline vector> get_params>>( const vector>& parameters, const size_t /*n*/, const size_t p) { vector> param(parameters.size()); @@ -413,7 +415,7 @@ vector> get_params>>( return param; } template <> -vector> get_params>>( +inline vector> get_params>>( const vector>& parameters, const size_t /*n*/, const size_t p) { vector> param(parameters.size()); @@ -425,7 +427,7 @@ vector> get_params>>( return param; } template <> -vector>> get_params>>>( +inline vector>> get_params>>>( const vector>& parameters, const size_t /*n*/, const size_t p) { vector>> param(parameters.size()); @@ -437,7 +439,7 @@ vector>> get_params>>>( return param; } template <> -vector>> get_params>>>( +inline vector>> get_params>>>( const vector>& parameters, const size_t /*n*/, const size_t p) { vector>> param(parameters.size()); @@ -541,8 +543,9 @@ typename scalar_type::type select_var_param( } template <> -empty select_var_param(const vector>& /*parameters*/, - const size_t /*n*/, const size_t /*p*/) { +inline empty select_var_param( + const vector>& /*parameters*/, const size_t /*n*/, + const size_t /*p*/) { return empty(); } diff --git a/test/prob/weibull/weibull_test.hpp b/test/prob/weibull/weibull_test.hpp index 54e4660c47e..cd7e198966e 100644 --- a/test/prob/weibull/weibull_test.hpp +++ b/test/prob/weibull/weibull_test.hpp @@ -84,18 +84,3 @@ class AgradDistributionsWeibull : public AgradDistributionTest { - pow(y / sigma, alpha); } }; - -TEST(ProbDistributionsWeibull, Cumulative) { - using stan::math::weibull_cdf; - using std::numeric_limits; - EXPECT_FLOAT_EQ(0.86466472, weibull_cdf(2.0, 1.0, 1.0)); - EXPECT_FLOAT_EQ(0.0032585711, weibull_cdf(0.25, 2.9, 1.8)); - EXPECT_FLOAT_EQ(1.0, weibull_cdf(3.9, 1.7, 0.25)); - - // EXPECT_FLOAT_EQ(0.0, - // weibull_cdf(-numeric_limits::infinity(), - // 1.0, 1.0)); - EXPECT_FLOAT_EQ(0.0, weibull_cdf(0.0, 1.0, 1.0)); - EXPECT_FLOAT_EQ(1.0, - weibull_cdf(numeric_limits::infinity(), 1.0, 1.0)); -} diff --git a/test/unit/math/prim/prob/bernoulli_test.cpp b/test/unit/math/prim/prob/bernoulli_test.cpp index a1e3b722d7a..6e364f76a30 100644 --- a/test/unit/math/prim/prob/bernoulli_test.cpp +++ b/test/unit/math/prim/prob/bernoulli_test.cpp @@ -59,3 +59,8 @@ TEST(ProbDistributionsBernoulli, chiSquareGoodnessFitTest) { assert_chi_squared(counts, expected, 1e-6); } + +TEST(ProbDistributionsBernoulliCDF, Values) { + EXPECT_FLOAT_EQ(1, stan::math::bernoulli_cdf(1, 0.57)); + EXPECT_FLOAT_EQ(1 - 0.57, stan::math::bernoulli_cdf(0, 0.57)); +} diff --git a/test/unit/math/prim/prob/beta_binomial_test.cpp b/test/unit/math/prim/prob/beta_binomial_test.cpp index 9adc12fe794..f776c6255ad 100644 --- a/test/unit/math/prim/prob/beta_binomial_test.cpp +++ b/test/unit/math/prim/prob/beta_binomial_test.cpp @@ -56,3 +56,8 @@ TEST(ProbDistributionBetaBinomial, error_check) { 4, 0.6, stan::math::positive_infinity(), rng), std::domain_error); } + +TEST(ProbDistributionsBetaBinomialCDF, Values) { + EXPECT_FLOAT_EQ(0.8868204314, + stan::math::beta_binomial_cdf(49, 100, 1.349, 3.938)); +} diff --git a/test/unit/math/prim/prob/binomial_test.cpp b/test/unit/math/prim/prob/binomial_test.cpp index c12507db534..67b202ef044 100644 --- a/test/unit/math/prim/prob/binomial_test.cpp +++ b/test/unit/math/prim/prob/binomial_test.cpp @@ -85,3 +85,18 @@ TEST(ProbDistributionsBinomial, chiSquareGoodnessFitTest) { EXPECT_TRUE(chi < quantile(complement(mydist, 1e-6))); } + +TEST(ProbDistributionsBinomialCDF, Values) { + EXPECT_FLOAT_EQ(0.042817421, stan::math::binomial_cdf(24, 54, 0.57)); + EXPECT_FLOAT_EQ(1.0 - 0.57, + stan::math::binomial_cdf( + 0, 1, 0.57)); // Consistency with expected Bernoulli + EXPECT_FLOAT_EQ(1.0, stan::math::binomial_cdf( + 1, 1, 0.57)); // Consistency with expected Bernoulli + EXPECT_FLOAT_EQ(stan::math::bernoulli_cdf(0, 0.57), + stan::math::binomial_cdf( + 0, 1, 0.57)); // Consistency with implemented Bernoulli + EXPECT_FLOAT_EQ(stan::math::bernoulli_cdf(1, 0.57), + stan::math::binomial_cdf( + 1, 1, 0.57)); // Consistency with implemented Bernoulli +} diff --git a/test/unit/math/prim/prob/cauchy_test.cpp b/test/unit/math/prim/prob/cauchy_test.cpp index 7409f7bcc73..d6216dfcf54 100644 --- a/test/unit/math/prim/prob/cauchy_test.cpp +++ b/test/unit/math/prim/prob/cauchy_test.cpp @@ -80,3 +80,10 @@ TEST(ProbDistributionsCauchy, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsCauchy, Cumulative) { + using stan::math::cauchy_cdf; + EXPECT_FLOAT_EQ(0.75, cauchy_cdf(1.0, 0.0, 1.0)); + EXPECT_FLOAT_EQ(0.187167, cauchy_cdf(-1.5, 0.0, 1.0)); + EXPECT_FLOAT_EQ(0.187167, cauchy_cdf(-2.5, -1.0, 1.0)); +} diff --git a/test/unit/math/prim/prob/double_exponential_test.cpp b/test/unit/math/prim/prob/double_exponential_test.cpp index 8e8d677e226..ee44c82c03a 100644 --- a/test/unit/math/prim/prob/double_exponential_test.cpp +++ b/test/unit/math/prim/prob/double_exponential_test.cpp @@ -81,3 +81,14 @@ TEST(ProbDistributionsDoubleExponential, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsDoubleExponential, Cumulative) { + EXPECT_FLOAT_EQ(0.5, stan::math::double_exponential_cdf(1.0, 1.0, 1.0)); + EXPECT_FLOAT_EQ(0.8160603, stan::math::double_exponential_cdf(2.0, 1.0, 1.0)); + EXPECT_FLOAT_EQ(0.003368973, + stan::math::double_exponential_cdf(-3.0, 2.0, 1.0)); + EXPECT_FLOAT_EQ(0.6967347, stan::math::double_exponential_cdf(1.0, 0.0, 2.0)); + EXPECT_FLOAT_EQ(0.2246645, stan::math::double_exponential_cdf(1.9, 2.3, 0.5)); + EXPECT_FLOAT_EQ(0.10094826, + stan::math::double_exponential_cdf(1.9, 2.3, 0.25)); +} diff --git a/test/unit/math/prim/prob/exponential_test.cpp b/test/unit/math/prim/prob/exponential_test.cpp index c581dd64508..b977e99327c 100644 --- a/test/unit/math/prim/prob/exponential_test.cpp +++ b/test/unit/math/prim/prob/exponential_test.cpp @@ -74,3 +74,19 @@ TEST(ProbDistributionsExponential, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsExponential, Cumulative) { + using stan::math::exponential_cdf; + using std::numeric_limits; + EXPECT_FLOAT_EQ(0.95021293, exponential_cdf(2.0, 1.5)); + EXPECT_FLOAT_EQ(1.0, exponential_cdf(15.0, 3.9)); + EXPECT_FLOAT_EQ(0.62280765, exponential_cdf(0.25, 3.9)); + + // ?? + // EXPECT_FLOAT_EQ(0.0, + // exponential_cdf(-numeric_limits::infinity(), + // 1.5)); + EXPECT_FLOAT_EQ(0.0, exponential_cdf(0.0, 1.5)); + EXPECT_FLOAT_EQ(1.0, + exponential_cdf(numeric_limits::infinity(), 1.5)); +} diff --git a/test/unit/math/prim/prob/frechet_test.cpp b/test/unit/math/prim/prob/frechet_test.cpp index 8dd29a48bfb..c091987a2b6 100644 --- a/test/unit/math/prim/prob/frechet_test.cpp +++ b/test/unit/math/prim/prob/frechet_test.cpp @@ -86,3 +86,14 @@ TEST(ProbDistributionsFrechet, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsFrechet, Cumulative) { + using stan::math::frechet_cdf; + using std::numeric_limits; + EXPECT_FLOAT_EQ(0.6065306597, frechet_cdf(2.0, 1.0, 1.0)); + EXPECT_FLOAT_EQ(2.744338423e-5, frechet_cdf(0.8, 2.9, 1.8)); + EXPECT_FLOAT_EQ(0.0, frechet_cdf(0.25, 3.9, 1.7)); + + EXPECT_FLOAT_EQ(1.0, + frechet_cdf(numeric_limits::infinity(), 1.0, 1.0)); +} diff --git a/test/unit/math/prim/prob/inv_gamma_test.cpp b/test/unit/math/prim/prob/inv_gamma_test.cpp index 4687a03df55..9d5ceb632de 100644 --- a/test/unit/math/prim/prob/inv_gamma_test.cpp +++ b/test/unit/math/prim/prob/inv_gamma_test.cpp @@ -81,3 +81,7 @@ TEST(ProbDistributionsInvGamma, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsInvGammaCdf, Values) { + EXPECT_FLOAT_EQ(0.557873, stan::math::inv_gamma_cdf(4.39, 1.349, 3.938)); +} diff --git a/test/unit/math/prim/prob/logistic_test.cpp b/test/unit/math/prim/prob/logistic_test.cpp index 4af72d4c321..73893d1a2db 100644 --- a/test/unit/math/prim/prob/logistic_test.cpp +++ b/test/unit/math/prim/prob/logistic_test.cpp @@ -80,3 +80,7 @@ TEST(ProbDistributionsLogistic, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsLogisticCDF, Values) { + EXPECT_FLOAT_EQ(0.047191944, stan::math::logistic_cdf(-3.45, 5.235, 2.89)); +} diff --git a/test/unit/math/prim/prob/lognormal_test.cpp b/test/unit/math/prim/prob/lognormal_test.cpp index bfc16aaa881..55b5f12a175 100644 --- a/test/unit/math/prim/prob/lognormal_test.cpp +++ b/test/unit/math/prim/prob/lognormal_test.cpp @@ -80,3 +80,17 @@ TEST(ProbDistributionsLogNormalPrim, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsLognormal, Cumulative) { + using stan::math::lognormal_cdf; + EXPECT_FLOAT_EQ(0.4687341, lognormal_cdf(1.2, 0.3, 1.5)); + EXPECT_FLOAT_EQ(0.2835506, lognormal_cdf(12.0, 3.0, 0.9)); + + double pos_inf = std::numeric_limits::infinity(); + + // ?? double neg_inf = -pos_inf; + // ?? EXPECT_FLOAT_EQ(0.0, lognormal_cdf(neg_inf, 0.0, 1.0)); + + EXPECT_FLOAT_EQ(0.0, lognormal_cdf(0.0, 0.0, 1.0)); + EXPECT_FLOAT_EQ(1.0, lognormal_cdf(pos_inf, 0.0, 1.0)); +} diff --git a/test/unit/math/prim/prob/pareto_test.cpp b/test/unit/math/prim/prob/pareto_test.cpp index df1c57c64ca..9a2c317f278 100644 --- a/test/unit/math/prim/prob/pareto_test.cpp +++ b/test/unit/math/prim/prob/pareto_test.cpp @@ -80,3 +80,7 @@ TEST(ProbDistributionsPareto, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsParetoCDF, Values) { + EXPECT_FLOAT_EQ(0.60434447, stan::math::pareto_cdf(3.45, 2.89, 5.235)); +} diff --git a/test/unit/math/prim/prob/weibull_test.cpp b/test/unit/math/prim/prob/weibull_test.cpp index 19308aea778..554be30b5c5 100644 --- a/test/unit/math/prim/prob/weibull_test.cpp +++ b/test/unit/math/prim/prob/weibull_test.cpp @@ -78,3 +78,18 @@ TEST(ProbDistributionsWeibull, chiSquareGoodnessFitTest) { // Assert that they match assert_matches_quantiles(samples, quantiles, 1e-6); } + +TEST(ProbDistributionsWeibull, Cumulative) { + using stan::math::weibull_cdf; + using std::numeric_limits; + EXPECT_FLOAT_EQ(0.86466472, weibull_cdf(2.0, 1.0, 1.0)); + EXPECT_FLOAT_EQ(0.0032585711, weibull_cdf(0.25, 2.9, 1.8)); + EXPECT_FLOAT_EQ(1.0, weibull_cdf(3.9, 1.7, 0.25)); + + // EXPECT_FLOAT_EQ(0.0, + // weibull_cdf(-numeric_limits::infinity(), + // 1.0, 1.0)); + EXPECT_FLOAT_EQ(0.0, weibull_cdf(0.0, 1.0, 1.0)); + EXPECT_FLOAT_EQ(1.0, + weibull_cdf(numeric_limits::infinity(), 1.0, 1.0)); +}