summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/conversion/test/cast_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/conversion/test/cast_test.cpp')
-rw-r--r--src/boost/libs/conversion/test/cast_test.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/boost/libs/conversion/test/cast_test.cpp b/src/boost/libs/conversion/test/cast_test.cpp
new file mode 100644
index 000000000..87473978a
--- /dev/null
+++ b/src/boost/libs/conversion/test/cast_test.cpp
@@ -0,0 +1,82 @@
+// 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 <boost/polymorphic_cast.hpp>
+#include <boost/core/lightweight_test.hpp>
+
+using namespace boost;
+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[] )
+{
+# ifdef NDEBUG
+ cout << "NDEBUG is defined\n";
+# else
+ cout << "NDEBUG is not defined\n";
+# endif
+
+ cout << "\nBeginning tests...\n";
+
+// test polymorphic_cast ---------------------------------------------------//
+
+ // tests which should succeed
+ Derived derived_instance;
+ Base * base = &derived_instance;
+ Derived * derived = polymorphic_downcast<Derived*>( base ); // downcast
+ BOOST_TEST( derived->kind() == 'D' );
+
+ derived = polymorphic_cast<Derived*>( base ); // downcast, throw on error
+ BOOST_TEST( derived->kind() == 'D' );
+
+ Base2 * base2 = polymorphic_cast<Base2*>( base ); // crosscast
+ BOOST_TEST( base2->kind2() == '2' );
+
+ // tests which should result in errors being detected
+ Base base_instance;
+ base = &base_instance;
+
+ if ( argc > 1 && *argv[1] == '1' )
+ { derived = polymorphic_downcast<Derived*>( base ); } // #1 assert failure
+
+ bool caught_exception = false;
+ try { derived = polymorphic_cast<Derived*>( base ); }
+ catch (const std::bad_cast&)
+ { cout<<"caught bad_cast\n"; caught_exception = true; }
+ BOOST_TEST( caught_exception );
+ // the following is just so generated code can be inspected
+ BOOST_TEST( derived->kind() != 'B' );
+
+ return boost::report_errors();
+} // main