#include #include #include #include #include #include #include using namespace boost; using namespace interval_lib; namespace my_namespace { template bool test(int precision) { interval pi_i( 3.1415926, 3.1415927 ); // write pi_i to a string std::ostringstream oss; oss.precision(precision); oss << pi_i; std::string pi_string = oss.str(); #ifdef BOOST_NUMERIC_INTERVAL_IO_VERBOSE std::cerr << "FYI: printing [3.1415926,3.1415927] with precision " << precision << " as " << std::setprecision(precision) << pi_i << std::endl; #endif // read pi_o from same string interval pi_o; std::istringstream iss(pi_string); iss >> pi_o; // the result should be at least as imprecise #ifdef BOOST_NUMERIC_INTERVAL_IO_VERBOSE if (!subset(pi_i, pi_o)) std::cerr << "Error: getting [3.1415926,3.1415927] with precision " << precision << " as " << std::setprecision(precision) << "[" << pi_o.lower() << std::setprecision(precision) << "," << pi_o.upper() << "]" << std::endl; else std::cerr << "Good: getting [3.1415926,3.1415927] with precision " << precision << " as " << std::setprecision(precision) << "[" << pi_o.lower() << std::setprecision(precision) << "," << pi_o.upper() << "]" << std::endl; #endif return subset(pi_i, pi_o); } } // namespace my_namespace int test_main(int, char *[]) { using my_namespace::test; BOOST_TEST(test(0)); BOOST_TEST(test(1)); BOOST_TEST(test(2)); BOOST_TEST(test(3)); BOOST_TEST(test(4)); BOOST_TEST(test(5)); BOOST_TEST(test(6)); BOOST_TEST(test(7)); BOOST_TEST(test(8)); BOOST_TEST(test(0)); BOOST_TEST(test(1)); BOOST_TEST(test(2)); BOOST_TEST(test(3)); BOOST_TEST(test(4)); BOOST_TEST(test(5)); BOOST_TEST(test(6)); BOOST_TEST(test(7)); BOOST_TEST(test(8)); BOOST_TEST(test(9)); BOOST_TEST(test(10)); BOOST_TEST(test(11)); BOOST_TEST(test(12)); BOOST_TEST(test(13)); BOOST_TEST(test(14)); BOOST_TEST(test(15)); BOOST_TEST(test(0)); BOOST_TEST(test(1)); BOOST_TEST(test(2)); BOOST_TEST(test(3)); BOOST_TEST(test(4)); BOOST_TEST(test(5)); BOOST_TEST(test(6)); BOOST_TEST(test(7)); BOOST_TEST(test(8)); BOOST_TEST(test(9)); BOOST_TEST(test(10)); BOOST_TEST(test(11)); BOOST_TEST(test(12)); BOOST_TEST(test(13)); BOOST_TEST(test(14)); BOOST_TEST(test(15)); return 0; }