12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // 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 <iostream>
- #include <climits>
- #include <cfloat> // for DBL_MAX (Peter Schmid)
- #include <boost/numeric/conversion/cast.hpp>
- #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<signed char>( small_value );
- BOOST_CHECK( c == 1 );
- c = 0;
- c = numeric_cast<signed char>( small_value );
- BOOST_CHECK( c == 1 );
- c = 0;
- c = numeric_cast<signed char>( small_negative_value );
- BOOST_CHECK( c == -1 );
- // These tests courtesy of Joe R NWP Swatosh<joe.r.swatosh@usace.army.mil>
- BOOST_CHECK( 0.0f == numeric_cast<float>( 0.0 ) );
- BOOST_CHECK( 0.0 == numeric_cast<double>( 0.0 ) );
- // tests which should result in errors being detected
- bool caught_exception = false;
- try { c = numeric_cast<signed char>( 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<signed char>( 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<unsigned long>( 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<unsigned long>( 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<int>( DBL_MAX ); }
- catch ( numeric::bad_numeric_cast )
- { cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; }
- BOOST_CHECK ( caught_exception );
- return 0 ;
- } // main
|