mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 |