Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/conversion/numeric_cast_test.cpp @ 13

Last change on this file since 13 was 12, checked in by landauf, 17 years ago

added boost

File size: 3.2 KB
Line 
1//  boost utility cast test program  -----------------------------------------//
2
3//  (C) Copyright Beman Dawes, Dave Abrahams 1999. Distributed under the Boost
4//  Software License, Version 1.0. (See accompanying file
5//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7//  See http://www.boost.org for most recent version including documentation.
8
9//  Revision History
10//   28 Set 04  factored out numeric_cast<> test (Fernando Cacciola)
11//   20 Jan 01  removed use of <limits> for portability to raw GCC (David Abrahams)
12//   28 Jun 00  implicit_cast removed (Beman Dawes)
13//   30 Aug 99  value_cast replaced by numeric_cast
14//    3 Aug 99  Initial Version
15
16#include <iostream>
17#include <climits>
18#include <cfloat>   // for DBL_MAX (Peter Schmid)
19#include <boost/cast.hpp>
20
21#include "boost/test/minimal.hpp"
22
23#  if SCHAR_MAX == LONG_MAX
24#      error "This test program doesn't work if SCHAR_MAX == LONG_MAX"
25#  endif
26
27using namespace boost;
28using std::cout;
29
30
31int test_main( int argc, char * argv[] )
32{
33
34#   ifdef NDEBUG
35        cout << "NDEBUG is defined\n";
36#   else
37        cout << "NDEBUG is not defined\n";
38#   endif
39
40    cout << "\nBeginning tests...\n";
41
42//  test implicit_cast and numeric_cast  -------------------------------------//
43
44    //  tests which should succeed
45    long small_value = 1;
46    long small_negative_value = -1;
47    long large_value = LONG_MAX;
48    long large_negative_value = LONG_MIN;
49    signed char c = 0;
50
51    c = large_value;  // see if compiler generates warning
52
53    c = numeric_cast<signed char>( small_value );
54    BOOST_CHECK( c == 1 );
55    c = 0;
56    c = numeric_cast<signed char>( small_value );
57    BOOST_CHECK( c == 1 );
58    c = 0;
59    c = numeric_cast<signed char>( small_negative_value );
60    BOOST_CHECK( c == -1 );
61
62    // These tests courtesy of Joe R NWP Swatosh<joe.r.swatosh@usace.army.mil>
63    BOOST_CHECK( 0.0f == numeric_cast<float>( 0.0 ) );
64    BOOST_CHECK( 0.0 == numeric_cast<double>( 0.0 ) );
65
66    //  tests which should result in errors being detected
67
68    bool caught_exception = false;
69    try { c = numeric_cast<signed char>( large_value ); }
70    catch (bad_numeric_cast)
71        { cout<<"caught bad_numeric_cast #1\n"; caught_exception = true; }
72    BOOST_CHECK ( caught_exception );
73
74    caught_exception = false;
75    try { c = numeric_cast<signed char>( large_negative_value ); }
76    catch (bad_numeric_cast)
77        { cout<<"caught bad_numeric_cast #2\n"; caught_exception = true; }
78    BOOST_CHECK ( caught_exception );
79
80    unsigned long ul;
81    caught_exception = false;
82    try { ul = numeric_cast<unsigned long>( large_negative_value ); }
83    catch (bad_numeric_cast)
84        { cout<<"caught bad_numeric_cast #3\n"; caught_exception = true; }
85    BOOST_CHECK ( caught_exception );
86
87    caught_exception = false;
88    try { ul = numeric_cast<unsigned long>( small_negative_value ); }
89    catch (bad_numeric_cast)
90        { cout<<"caught bad_numeric_cast #4\n"; caught_exception = true; }
91    BOOST_CHECK ( caught_exception );
92
93    caught_exception = false;
94    try { numeric_cast<int>( DBL_MAX ); }
95    catch (bad_numeric_cast)
96        { cout<<"caught bad_numeric_cast #5\n"; caught_exception = true; }
97    BOOST_CHECK ( caught_exception );
98
99    return 0 ;
100}
Note: See TracBrowser for help on using the repository browser.