From a096a4b1539c30880ee7eba0633ad18500034431 Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Tue, 28 Sep 2004 21:48:39 +0000 Subject: [PATCH] numeric_cast<> test factored out from conversion\cast_test.cp and also added (duplicated) in numeric\conversion\test [SVN r25468] --- cast_test.cpp | 81 +++++----------------------------- numeric_cast_test.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++ test/Jamfile | 15 ++++--- 3 files changed, 118 insertions(+), 78 deletions(-) create mode 100644 numeric_cast_test.cpp diff --git a/cast_test.cpp b/cast_test.cpp index c8f49a0..ad6b18f 100644 --- a/cast_test.cpp +++ b/cast_test.cpp @@ -7,6 +7,7 @@ // 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 for portability to raw GCC (David Abrahams) // 28 Jun 00 implicit_cast removed (Beman Dawes) // 30 Aug 99 value_cast replaced by numeric_cast @@ -19,7 +20,7 @@ # if SCHAR_MAX == LONG_MAX # error "This test program doesn't work if SCHAR_MAX == LONG_MAX" -# endif +# endif using namespace boost; using std::cout; @@ -27,39 +28,34 @@ using std::cout; namespace { struct Base - { + { virtual char kind() { return 'B'; } }; - + struct Base2 - { + { virtual char kind2() { return '2'; } }; - + struct Derived : public Base, Base2 { virtual char kind() { return 'D'; } - }; -} + }; +} 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 cout << "NDEBUG is defined\n"; # else cout << "NDEBUG is not defined\n"; # endif - cout << "\nBeginning tests...\n"; + cout << "\nBeginning tests...\n"; // test polymorphic_cast ---------------------------------------------------// - + // tests which should succeed Base * base = new Derived; Base2 * base2 = 0; @@ -89,63 +85,6 @@ int main( int argc, char * argv[] ) // the following is just so generated code can be inspected 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( small_value ); - assert( c == 1 ); - c = 0; - c = numeric_cast( small_value ); - assert( c == 1 ); - c = 0; - c = numeric_cast( small_negative_value ); - assert( c == -1 ); - - // These tests courtesy of Joe R NWP Swatosh - assert( 0.0f == numeric_cast( 0.0 ) ); - assert( 0.0 == numeric_cast( 0.0 ) ); - - // tests which should result in errors being detected - - caught_exception = false; - try { c = numeric_cast( 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( 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( 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( 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( 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 " << (err_count==0 ? "passed\n" : "failed\n"); return err_count; diff --git a/numeric_cast_test.cpp b/numeric_cast_test.cpp new file mode 100644 index 0000000..4ba67c6 --- /dev/null +++ b/numeric_cast_test.cpp @@ -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 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 +#include +#include // for DBL_MAX (Peter Schmid) +#include + +#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( small_value ); + BOOST_CHECK( c == 1 ); + c = 0; + c = numeric_cast( small_value ); + BOOST_CHECK( c == 1 ); + c = 0; + c = numeric_cast( small_negative_value ); + BOOST_CHECK( c == -1 ); + + // These tests courtesy of Joe R NWP Swatosh + BOOST_CHECK( 0.0f == numeric_cast( 0.0 ) ); + BOOST_CHECK( 0.0 == numeric_cast( 0.0 ) ); + + // tests which should result in errors being detected + + caught_exception = false; + try { c = numeric_cast( 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( 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( 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( 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( DBL_MAX ); } + catch (bad_numeric_cast) + { cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; } + BOOST_CHECK ( caught_exception ) + + return 0 ; +} // main diff --git a/test/Jamfile b/test/Jamfile index 576a34a..99f56ff 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -2,13 +2,13 @@ # Copyright (C) 2001-2003 Douglas Gregor -# Permission to copy, use, sell and distribute this software is granted -# provided this copyright notice appears in all copies. Permission to modify -# 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 -# included with the copyright notice. This software is provided "as is" -# without express or implied warranty, and with no claim as to its suitability -# for any purpose. +# Permission to copy, use, sell and distribute this software is granted +# provided this copyright notice appears in all copies. Permission to modify +# 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 +# included with the copyright notice. This software is provided "as is" +# without express or implied warranty, and with no claim as to its suitability +# for any purpose. # For more information, see http://www.boost.org/ @@ -27,6 +27,7 @@ DEPENDS all : test ; : [ run implicit_cast.cpp ] [ compile-fail implicit_cast_fail.cpp ] [ run ../cast_test.cpp ] + [ run ../numeric_cast_test.cpp ] [ run ../lexical_cast_test.cpp ] ; }