From 431748ca991220638d3cdce71439d09d9680d3a2 Mon Sep 17 00:00:00 2001 From: "Paul A. Bristow" Date: Tue, 12 Dec 2006 09:49:23 +0000 Subject: [PATCH] Test value made L, and new tests for throw on infinity and a==b added. [SVN r3517] --- test/test_triangular.cpp | 72 ++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/test/test_triangular.cpp b/test/test_triangular.cpp index 4151afe18..95941e8b5 100644 --- a/test/test_triangular.cpp +++ b/test/test_triangular.cpp @@ -22,6 +22,7 @@ # pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored. # if !(defined _SCL_SECURE_NO_DEPRECATE) || (_SCL_SECURE_NO_DEPRECATE == 0) # pragma warning(disable: 4996) // 'std::char_traits::copy' was declared deprecated. +# pragma warning(disable: 4305) // 'initializing' : truncation from 'long double' to 'float' # endif #endif @@ -119,6 +120,9 @@ void test_spots(RealType T) triangular_distribution(1, 0, -1), std::domain_error); + BOOST_CHECK_THROW( // duff parameters upper == lower. + triangular_distribution(0, 0, 0), + std::domain_error); BOOST_CHECK_THROW( // duff parameters mode < lower. triangular_distribution(0, -1, 1), std::domain_error); @@ -216,13 +220,13 @@ void test_spots(RealType T) // #define BOOST_MATH_THROW_ON_DOMAIN_ERROR IS defined, so the throw path // of error handling is tested below with BOOST_CHECK_THROW tests. - BOOST_CHECK_EQUAL( // x == infinity should be OK, and pdf == zero. + BOOST_CHECK_THROW( // x == infinity NOT OK. pdf(triangular_distribution(0, 0, 1), static_cast(std::numeric_limits::infinity())), - static_cast(0)); + std::domain_error); - BOOST_CHECK_EQUAL( // x == minus infinity should be OK too. + BOOST_CHECK_THROW( // x == minus infinity not OK too. pdf(triangular_distribution(0, 0, 1), static_cast(-std::numeric_limits::infinity())), - static_cast(0)); + std::domain_error); } if(std::numeric_limits::has_quiet_NaN) { // BOOST_CHECK tests for NaN using std::numeric_limits<>::has_quiet_NaN() - should throw. @@ -310,7 +314,7 @@ void test_spots(RealType T) BOOST_CHECK_CLOSE_FRACTION( // x = -0.5 cdf(complement(triangular_distribution(-1, 0, 1), static_cast(-0.5))), - static_cast(0.875), + static_cast(0.875L), tolerance); BOOST_CHECK_CLOSE_FRACTION( // x = +0.5 @@ -324,28 +328,28 @@ void test_spots(RealType T) triangular_distribution tri0h1(0, 0.5, 1); // Equilateral triangle - mode is the middle. triangular_distribution trim12(-1, -0.5, 2); // mode is negative. - BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.02), static_cast(0.0016), tolerance); - BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.5), static_cast(0.66666666666666666666666666666666666666666666667), tolerance); - BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.98), static_cast(0.99946666666666661), tolerance); + BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.02L), static_cast(0.0016L), tolerance); + BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.5L), static_cast(0.66666666666666666666666666666666666666666666667L), tolerance); + BOOST_CHECK_CLOSE_FRACTION(cdf(tri0q1, 0.98L), static_cast(0.99946666666666661L), tolerance); // quantile - BOOST_CHECK_CLOSE_FRACTION(quantile(tri0q1, static_cast(0.0016)), static_cast(0.02), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(tri0q1, static_cast(0.66666666666666666666666666666666666666666666667)), static_cast(0.5), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0q1, static_cast(0.3333333333333333333333333333333333333333333333333))), static_cast(0.5), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(tri0q1, static_cast(0.0016L)), static_cast(0.02L), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(tri0q1, static_cast(0.66666666666666666666666666666666666666666666667L)), static_cast(0.5), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0q1, static_cast(0.3333333333333333333333333333333333333333333333333L))), static_cast(0.5), tol5eps); BOOST_CHECK_CLOSE_FRACTION(quantile(tri0q1, static_cast(0.99946666666666661)), static_cast(0.98), 10 * tol5eps); - BOOST_CHECK_CLOSE_FRACTION(pdf(trim12, 0), static_cast(0.533333333333333333333333333333333333333333333), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(cdf(trim12, 0), static_cast(0.466666666666666666666666666666666666666666667), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(cdf(complement(trim12, 0)), static_cast(1 - 0.466666666666666666666666666666666666666666667), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(pdf(trim12, 0), static_cast(0.533333333333333333333333333333333333333333333L), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(cdf(trim12, 0), static_cast(0.466666666666666666666666666666666666666666667L), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(cdf(complement(trim12, 0)), static_cast(1 - 0.466666666666666666666666666666666666666666667L), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0q1, static_cast(1 - 0.99946666666666661))), static_cast(0.98), 10 * tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0q1, static_cast(1 - 0.99946666666666661L))), static_cast(0.98L), 10 * tol5eps); BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(1.))), static_cast(0), tol5eps); BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(0.5))), static_cast(0.5), tol5eps); // OK - BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(1. - 0.02))), static_cast(0.1), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(1. - 0.98))), static_cast(0.9), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(1. - 0.02L))), static_cast(0.1L), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, static_cast(1. - 0.98L))), static_cast(0.9L), tol5eps); BOOST_CHECK_CLOSE_FRACTION(quantile(complement(tri0h1, 0)), static_cast(1), tol5eps); - RealType xs [] = {0., 0.01, 0.02, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.98, 0.99, 1.}; + RealType xs [] = {0., 0.01L, 0.02L, 0.05L, 0.1L, 0.2L, 0.3L, 0.4L, 0.5L, 0.6L, 0.7L, 0.8L, 0.9L, 0.95L, 0.98L, 0.99L, 1.}; const triangular_distribution& distr = tristd; BOOST_CHECK_CLOSE_FRACTION(quantile(complement(distr, 1.)), static_cast(0), tol5eps); @@ -359,9 +363,9 @@ void test_spots(RealType T) { const triangular_distribution* const dist = dists[i]; // cout << "Distribution " << i << endl; - BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.5), quantile(complement(*dist, 0.5)), tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.98), quantile(complement(*dist, 1. - 0.98)),tol5eps); - BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.98), quantile(complement(*dist, 1. - 0.98)),tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.5L), quantile(complement(*dist, 0.5L)), tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.98L), quantile(complement(*dist, 1.L - 0.98L)),tol5eps); + BOOST_CHECK_CLOSE_FRACTION(quantile(*dists[i], 0.98L), quantile(complement(*dist, 1.L - 0.98L)),tol5eps); } // for i // quantile complement @@ -412,8 +416,8 @@ void test_spots(RealType T) static_cast(1), // mode static_cast(2), // upper static_cast(1), // x - static_cast(0.66666666666666666666666666666666666666666667), // p - static_cast(0.33333333333333333333333333333333333333333333), // q = 1 - p + static_cast(0.66666666666666666666666666666666666666666667L), // p + static_cast(0.33333333333333333333333333333333333333333333L), // q = 1 - p tolerance); tolerance = (std::max)( boost::math::tools::epsilon(), @@ -427,7 +431,7 @@ void test_spots(RealType T) mean(distu01), static_cast(0.5), tolerance); // variance: BOOST_CHECK_CLOSE_FRACTION( - variance(distu01), static_cast(0.0833333333333333333333333333333333333333333), tolerance); + variance(distu01), static_cast(0.0833333333333333333333333333333333333333333L), tolerance); // std deviation: BOOST_CHECK_CLOSE_FRACTION( standard_deviation(distu01), sqrt(variance(distu01)), tolerance); @@ -648,6 +652,26 @@ int test_main(int, char* []) Output: +------ Build started: Project: test_triangular, Configuration: Debug Win32 ------ +Compiling... +test_triangular.cpp +Linking... +Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\test_triangular.exe" +Running 1 test case... +Distribution 0 +Distribution 1 +Distribution 2 +Distribution 3 +Distribution 4 +Tolerance for type float is 5.96046e-007. +Tolerance for type double is 1.11022e-015. +Tolerance for type long double is 1.11022e-015. +Tolerance for type class boost::math::concepts::real_concept is 1.11022e-015. +*** No errors detected +Build Time 0:05 +Build log was saved at "file://i:\boost-06-05-03-1300\libs\math\test\Math_test\test_triangular\Debug\BuildLog.htm" +test_triangular - 0 error(s), 0 warning(s) +========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========