// test_nc_chi_squared.cpp // Copyright John Maddock 2008. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) #include #ifdef _MSC_VER #pragma warning (disable:4127 4512) #endif #if !defined(TEST_FLOAT) && !defined(TEST_DOUBLE) && !defined(TEST_LDOUBLE) && !defined(TEST_REAL_CONCEPT) # define TEST_FLOAT # define TEST_DOUBLE # define TEST_LDOUBLE # define TEST_REAL_CONCEPT #endif #include #include // for real_concept #include // for chi_squared_distribution #include // for chi_squared_distribution #define BOOST_TEST_MAIN #include // for test_main #include #include #include // for BOOST_CHECK_CLOSE #include "test_out_of_range.hpp" #include "functor.hpp" #include "handle_test_result.hpp" #include "test_nccs_hooks.hpp" #include "table_type.hpp" #include "test_nc_chi_squared.hpp" #include #include using std::cout; using std::endl; #include using std::numeric_limits; void expected_results() { // // Define the max and mean errors expected for // various compilers and platforms. // const char* largest_type; #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS if(boost::math::policies::digits >() == boost::math::policies::digits >()) { largest_type = "(long\\s+)?double|real_concept"; } else { largest_type = "long double|real_concept"; } #else largest_type = "(long\\s+)?double|real_concept"; #endif add_expected_result( "[^|]*", // compiler "[^|]*", // stdlib "Mac OS", // platform largest_type, // test type(s) "[^|]*medium[^|]*", // test data group "[^|]*", 550, 100); // test function // // Catch all cases come last: // add_expected_result( "[^|]*", // compiler "[^|]*", // stdlib "[^|]*", // platform largest_type, // test type(s) "[^|]*medium[^|]*", // test data group "[^|]*", 350, 100); // test function add_expected_result( "[^|]*", // compiler "[^|]*", // stdlib "[^|]*", // platform largest_type, // test type(s) "[^|]*large[^|]*", // test data group "[^|]*", 17000, 3000); // test function // // Allow some long double error to creep into // the double results: // add_expected_result( "[^|]*", // compiler "[^|]*", // stdlib "[^|]*", // platform "double", // test type(s) "[^|]*", // test data group "[^|]*", 3, 2); // test function // // Finish off by printing out the compiler/stdlib/platform names, // we do this to make it easier to mark up expected error rates. // std::cout << "Tests run with " << BOOST_COMPILER << ", " << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl; } BOOST_AUTO_TEST_CASE( test_main ) { BOOST_MATH_CONTROL_FP; // Basic sanity-check spot values. expected_results(); // (Parameter value, arbitrarily zero, only communicates the floating point type). #ifdef TEST_FLOAT test_spots(0.0F); // Test float. #endif #ifdef TEST_DOUBLE test_spots(0.0); // Test double. #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS #ifdef TEST_LDOUBLE test_spots(0.0L); // Test long double. #endif #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS #ifdef TEST_REAL_CONCEPT test_spots(boost::math::concepts::real_concept(0.)); // Test real concept. #endif #endif #endif #ifdef TEST_FLOAT test_accuracy(0.0F, "float"); // Test float. #endif #ifdef TEST_DOUBLE test_accuracy(0.0, "double"); // Test double. #endif #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS #ifdef TEST_LDOUBLE test_accuracy(0.0L, "long double"); // Test long double. #endif #ifndef BOOST_MATH_NO_REAL_CONCEPT_TESTS #ifdef TEST_REAL_CONCEPT test_accuracy(boost::math::concepts::real_concept(0.), "real_concept"); // Test real concept. #endif #endif #endif } // BOOST_AUTO_TEST_CASE( test_main )