// 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 factored out numeric_cast<> test (Fernando Cacciola) // 20 Jan 01 removed use of for portability to raw GCC (David Abrahams) // 28 Jun 00 implicit_cast removed (Beman Dawes) // 30 Aug 99 value_cast replaced by numeric_cast // 3 Aug 99 Initial Version #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 (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 (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 (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 (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 (bad_numeric_cast) { cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; } BOOST_CHECK ( caught_exception ); return 0 ; }