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 taken from the old cast library (Fernando Cacciola)
11
12#include <iostream>
13#include <climits>
14#include <cfloat> // for DBL_MAX (Peter Schmid)
15
16#include <boost/numeric/conversion/cast.hpp>
17
18#include <boost/core/lightweight_test.hpp>
19
20# if SCHAR_MAX == LONG_MAX
21# error "This test program doesn't work if SCHAR_MAX == LONG_MAX"
22# endif
23
24using namespace boost;
25using std::cout;
26
27int main()
28{
29
30# ifdef NDEBUG
31 cout << "NDEBUG is defined\n";
32# else
33 cout << "NDEBUG is not defined\n";
34# endif
35
36 cout << "\nBeginning tests...\n";
37
38// test implicit_cast and numeric_cast -------------------------------------//
39
40 // tests which should succeed
41 long small_value = 1;
42 long small_negative_value = -1;
43 long large_value = LONG_MAX;
44 long large_negative_value = LONG_MIN;
45 signed char c = 0;
46
47 c = large_value; // see if compiler generates warning
48
49 c = numeric_cast<signed char>( arg: small_value );
50 BOOST_TEST( c == 1 );
51 c = 0;
52 c = numeric_cast<signed char>( arg: small_value );
53 BOOST_TEST( c == 1 );
54 c = 0;
55 c = numeric_cast<signed char>( arg: small_negative_value );
56 BOOST_TEST( c == -1 );
57
58 // These tests courtesy of Joe R NWP Swatosh<joe.r.swatosh@usace.army.mil>
59 BOOST_TEST( 0.0f == numeric_cast<float>( 0.0 ) );
60 BOOST_TEST( 0.0 == numeric_cast<double>( 0.0 ) );
61
62 // tests which should result in errors being detected
63
64 BOOST_TEST_THROWS( numeric_cast<signed char>(large_value),
65 numeric::bad_numeric_cast );
66
67 BOOST_TEST_THROWS( numeric_cast<signed char>(large_negative_value),
68 numeric::bad_numeric_cast );
69
70 BOOST_TEST_THROWS( numeric_cast<signed char>(large_negative_value),
71 numeric::bad_numeric_cast );
72
73 BOOST_TEST_THROWS( numeric_cast<unsigned long>(small_negative_value),
74 numeric::bad_numeric_cast );
75
76 BOOST_TEST_THROWS( numeric_cast<int>(DBL_MAX), numeric::bad_numeric_cast );
77
78 return boost::report_errors() ;
79
80} // main
81

source code of boost/libs/numeric/conversion/test/numeric_cast_test.cpp