]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/conversion/test/cast_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / conversion / test / cast_test.cpp
CommitLineData
7c673cae
FG
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 <boost/polymorphic_cast.hpp>
18#include <boost/core/lightweight_test.hpp>
19
20using namespace boost;
21using std::cout;
22
23namespace
24{
25 struct Base
26 {
27 virtual char kind() { return 'B'; }
28 };
29
30 struct Base2
31 {
32 virtual char kind2() { return '2'; }
33 };
34
35 struct Derived : public Base, Base2
36 {
37 virtual char kind() { return 'D'; }
38 };
39}
40
41
42int main( int argc, char * argv[] )
43{
44# ifdef NDEBUG
45 cout << "NDEBUG is defined\n";
46# else
47 cout << "NDEBUG is not defined\n";
48# endif
49
50 cout << "\nBeginning tests...\n";
51
52// test polymorphic_cast ---------------------------------------------------//
53
54 // tests which should succeed
55 Derived derived_instance;
56 Base * base = &derived_instance;
57 Derived * derived = polymorphic_downcast<Derived*>( base ); // downcast
58 BOOST_TEST( derived->kind() == 'D' );
59
60 derived = polymorphic_cast<Derived*>( base ); // downcast, throw on error
61 BOOST_TEST( derived->kind() == 'D' );
62
63 Base2 * base2 = polymorphic_cast<Base2*>( base ); // crosscast
64 BOOST_TEST( base2->kind2() == '2' );
65
66 // tests which should result in errors being detected
67 Base base_instance;
68 base = &base_instance;
69
70 if ( argc > 1 && *argv[1] == '1' )
71 { derived = polymorphic_downcast<Derived*>( base ); } // #1 assert failure
72
73 bool caught_exception = false;
74 try { derived = polymorphic_cast<Derived*>( base ); }
92f5a8d4 75 catch (const std::bad_cast&)
7c673cae
FG
76 { cout<<"caught bad_cast\n"; caught_exception = true; }
77 BOOST_TEST( caught_exception );
78 // the following is just so generated code can be inspected
79 BOOST_TEST( derived->kind() != 'B' );
80
81 return boost::report_errors();
82} // main