98 lines
3.0 KiB
C++
98 lines
3.0 KiB
C++
// 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
|