forked from boostorg/conversion
numeric_cast<> test factored out from conversion\cast_test.cp
and also added (duplicated) in numeric\conversion\test [SVN r25468]
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
// See http://www.boost.org for most recent version including documentation.
|
// See http://www.boost.org for most recent version including documentation.
|
||||||
|
|
||||||
// Revision History
|
// Revision History
|
||||||
|
// 28 Set 04 factored out numeric_cast<> test (Fernando Cacciola)
|
||||||
// 20 Jan 01 removed use of <limits> for portability to raw GCC (David Abrahams)
|
// 20 Jan 01 removed use of <limits> for portability to raw GCC (David Abrahams)
|
||||||
// 28 Jun 00 implicit_cast removed (Beman Dawes)
|
// 28 Jun 00 implicit_cast removed (Beman Dawes)
|
||||||
// 30 Aug 99 value_cast replaced by numeric_cast
|
// 30 Aug 99 value_cast replaced by numeric_cast
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
|
|
||||||
# if SCHAR_MAX == LONG_MAX
|
# if SCHAR_MAX == LONG_MAX
|
||||||
# error "This test program doesn't work if SCHAR_MAX == LONG_MAX"
|
# error "This test program doesn't work if SCHAR_MAX == LONG_MAX"
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
using namespace boost;
|
using namespace boost;
|
||||||
using std::cout;
|
using std::cout;
|
||||||
@@ -27,39 +28,34 @@ using std::cout;
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
struct Base
|
struct Base
|
||||||
{
|
{
|
||||||
virtual char kind() { return 'B'; }
|
virtual char kind() { return 'B'; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Base2
|
struct Base2
|
||||||
{
|
{
|
||||||
virtual char kind2() { return '2'; }
|
virtual char kind2() { return '2'; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Derived : public Base, Base2
|
struct Derived : public Base, Base2
|
||||||
{
|
{
|
||||||
virtual char kind() { return 'D'; }
|
virtual char kind() { return 'D'; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main( int argc, char * argv[] )
|
int main( int argc, char * argv[] )
|
||||||
{
|
{
|
||||||
cout << "Usage: test_casts [n], where n omitted or is:\n"
|
|
||||||
" 1 = execute #1 assert failure (#ifndef NDEBUG)\n"
|
|
||||||
" 2 = execute #2 assert failure (#ifndef NDEBUG)\n"
|
|
||||||
"Example: test_casts 2\n\n";
|
|
||||||
|
|
||||||
# ifdef NDEBUG
|
# ifdef NDEBUG
|
||||||
cout << "NDEBUG is defined\n";
|
cout << "NDEBUG is defined\n";
|
||||||
# else
|
# else
|
||||||
cout << "NDEBUG is not defined\n";
|
cout << "NDEBUG is not defined\n";
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
cout << "\nBeginning tests...\n";
|
cout << "\nBeginning tests...\n";
|
||||||
|
|
||||||
// test polymorphic_cast ---------------------------------------------------//
|
// test polymorphic_cast ---------------------------------------------------//
|
||||||
|
|
||||||
// tests which should succeed
|
// tests which should succeed
|
||||||
Base * base = new Derived;
|
Base * base = new Derived;
|
||||||
Base2 * base2 = 0;
|
Base2 * base2 = 0;
|
||||||
@@ -89,63 +85,6 @@ int main( int argc, char * argv[] )
|
|||||||
// the following is just so generated code can be inspected
|
// the following is just so generated code can be inspected
|
||||||
if ( derived->kind() == 'B' ) ++err_count;
|
if ( derived->kind() == 'B' ) ++err_count;
|
||||||
|
|
||||||
// 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 );
|
|
||||||
assert( c == 1 );
|
|
||||||
c = 0;
|
|
||||||
c = numeric_cast<signed char>( small_value );
|
|
||||||
assert( c == 1 );
|
|
||||||
c = 0;
|
|
||||||
c = numeric_cast<signed char>( small_negative_value );
|
|
||||||
assert( c == -1 );
|
|
||||||
|
|
||||||
// These tests courtesy of Joe R NWP Swatosh<joe.r.swatosh@usace.army.mil>
|
|
||||||
assert( 0.0f == numeric_cast<float>( 0.0 ) );
|
|
||||||
assert( 0.0 == numeric_cast<double>( 0.0 ) );
|
|
||||||
|
|
||||||
// tests which should result in errors being detected
|
|
||||||
|
|
||||||
caught_exception = false;
|
|
||||||
try { c = numeric_cast<signed char>( large_value ); }
|
|
||||||
catch (bad_numeric_cast)
|
|
||||||
{ cout<<"caught bad_numeric_cast #1\n"; caught_exception = true; }
|
|
||||||
if ( !caught_exception ) ++err_count;
|
|
||||||
|
|
||||||
caught_exception = false;
|
|
||||||
try { c = numeric_cast<signed char>( large_negative_value ); }
|
|
||||||
catch (bad_numeric_cast)
|
|
||||||
{ cout<<"caught bad_numeric_cast #2\n"; caught_exception = true; }
|
|
||||||
if ( !caught_exception ) ++err_count;
|
|
||||||
|
|
||||||
unsigned long ul;
|
|
||||||
caught_exception = false;
|
|
||||||
try { ul = numeric_cast<unsigned long>( large_negative_value ); }
|
|
||||||
catch (bad_numeric_cast)
|
|
||||||
{ cout<<"caught bad_numeric_cast #3\n"; caught_exception = true; }
|
|
||||||
if ( !caught_exception ) ++err_count;
|
|
||||||
|
|
||||||
caught_exception = false;
|
|
||||||
try { ul = numeric_cast<unsigned long>( small_negative_value ); }
|
|
||||||
catch (bad_numeric_cast)
|
|
||||||
{ cout<<"caught bad_numeric_cast #4\n"; caught_exception = true; }
|
|
||||||
if ( !caught_exception ) ++err_count;
|
|
||||||
|
|
||||||
caught_exception = false;
|
|
||||||
try { numeric_cast<int>( DBL_MAX ); }
|
|
||||||
catch (bad_numeric_cast)
|
|
||||||
{ cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; }
|
|
||||||
if ( !caught_exception ) ++err_count;
|
|
||||||
|
|
||||||
cout << err_count << " errors detected\nTest "
|
cout << err_count << " errors detected\nTest "
|
||||||
<< (err_count==0 ? "passed\n" : "failed\n");
|
<< (err_count==0 ? "passed\n" : "failed\n");
|
||||||
return err_count;
|
return err_count;
|
||||||
|
100
numeric_cast_test.cpp
Normal file
100
numeric_cast_test.cpp
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
// 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 <limits> 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 <iostream>
|
||||||
|
#include <climits>
|
||||||
|
#include <cfloat> // for DBL_MAX (Peter Schmid)
|
||||||
|
#include <boost/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 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
|
||||||
|
|
||||||
|
caught_exception = false;
|
||||||
|
try { c = numeric_cast<signed char>( 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<signed char>( 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<unsigned long>( 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<unsigned long>( 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<int>( DBL_MAX ); }
|
||||||
|
catch (bad_numeric_cast)
|
||||||
|
{ cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; }
|
||||||
|
BOOST_CHECK ( caught_exception )
|
||||||
|
|
||||||
|
return 0 ;
|
||||||
|
} // main
|
15
test/Jamfile
15
test/Jamfile
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
# Copyright (C) 2001-2003 Douglas Gregor
|
# Copyright (C) 2001-2003 Douglas Gregor
|
||||||
|
|
||||||
# Permission to copy, use, sell and distribute this software is granted
|
# Permission to copy, use, sell and distribute this software is granted
|
||||||
# provided this copyright notice appears in all copies. Permission to modify
|
# provided this copyright notice appears in all copies. Permission to modify
|
||||||
# the code and to distribute modified code is granted provided this copyright
|
# the code and to distribute modified code is granted provided this copyright
|
||||||
# notice appears in all copies, and a notice that the code was modified is
|
# notice appears in all copies, and a notice that the code was modified is
|
||||||
# included with the copyright notice. This software is provided "as is"
|
# included with the copyright notice. This software is provided "as is"
|
||||||
# without express or implied warranty, and with no claim as to its suitability
|
# without express or implied warranty, and with no claim as to its suitability
|
||||||
# for any purpose.
|
# for any purpose.
|
||||||
|
|
||||||
# For more information, see http://www.boost.org/
|
# For more information, see http://www.boost.org/
|
||||||
|
|
||||||
@@ -27,6 +27,7 @@ DEPENDS all : test ;
|
|||||||
: [ run implicit_cast.cpp ]
|
: [ run implicit_cast.cpp ]
|
||||||
[ compile-fail implicit_cast_fail.cpp ]
|
[ compile-fail implicit_cast_fail.cpp ]
|
||||||
[ run ../cast_test.cpp ]
|
[ run ../cast_test.cpp ]
|
||||||
|
[ run ../numeric_cast_test.cpp ]
|
||||||
[ run ../lexical_cast_test.cpp ]
|
[ run ../lexical_cast_test.cpp ]
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user