// boost utility cast test program -----------------------------------------// // (C) Copyright Beman Dawes, Dave Abrahams 1999. Distributed under 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) // See http://www.boost.org for most recent version including documentation. // Revision History // 28 Set 04 taken from the old cast library (Fernando Cacciola) #include #include #include // for DBL_MAX (Peter Schmid) #include #include "boost/test/minimal.hpp" # if SCHAR_MAX == LONG_MAX # error "This test program doesn't work if SCHAR_MAX == LONG_MAX" # endif using namespace boost; using std::cout; int test_main( int argc, char * argv[] ) { # ifdef NDEBUG cout << "NDEBUG is defined\n"; # else cout << "NDEBUG is not defined\n"; # endif cout << "\nBeginning tests...\n"; // test implicit_cast and numeric_cast -------------------------------------// // tests which should succeed long small_value = 1; long small_negative_value = -1; long large_value = LONG_MAX; long large_negative_value = LONG_MIN; signed char c = 0; c = large_value; // see if compiler generates warning c = numeric_cast( small_value ); BOOST_CHECK( c == 1 ); c = 0; c = numeric_cast( small_value ); BOOST_CHECK( c == 1 ); c = 0; c = numeric_cast( small_negative_value ); BOOST_CHECK( c == -1 ); // These tests courtesy of Joe R NWP Swatosh BOOST_CHECK( 0.0f == numeric_cast( 0.0 ) ); BOOST_CHECK( 0.0 == numeric_cast( 0.0 ) ); // tests which should result in errors being detected bool caught_exception = false; try { c = numeric_cast( large_value ); } catch ( numeric::bad_numeric_cast ) { cout<<"caught bad_numeric_cast #1\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); caught_exception = false; try { c = numeric_cast( large_negative_value ); } catch ( numeric::bad_numeric_cast ) { cout<<"caught bad_numeric_cast #2\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); unsigned long ul; caught_exception = false; try { ul = numeric_cast( large_negative_value ); } catch ( numeric::bad_numeric_cast ) { cout<<"caught bad_numeric_cast #3\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); caught_exception = false; try { ul = numeric_cast( small_negative_value ); } catch ( numeric::bad_numeric_cast ) { cout<<"caught bad_numeric_cast #4\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); caught_exception = false; try { numeric_cast( DBL_MAX ); } catch ( numeric::bad_numeric_cast ) { cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); return 0 ; } // main