mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -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
 |