]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/pointer_cast_test2.cpp
2 // pointer_cast_test2.cpp - a test for unique_ptr casts
4 // Copyright 2016 Peter Dimov
6 // Distributed under the Boost Software License, Version 1.0.
7 // See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt
11 #include <boost/config.hpp>
13 #if defined( BOOST_NO_CXX11_SMART_PTR )
22 #include <boost/pointer_cast.hpp>
23 #include <boost/core/lightweight_test.hpp>
37 static void test_static_cast()
40 std::unique_ptr
<int> p1( new int );
43 std::unique_ptr
<int> p2
= boost::static_pointer_cast
<int>( std::move( p1
) );
45 BOOST_TEST( p1
.get() == 0 );
46 BOOST_TEST_EQ( p2
.get(), q1
);
50 std::unique_ptr
<int> p1( new int );
53 std::unique_ptr
<int const> p2
= boost::static_pointer_cast
<int const>( std::move( p1
) );
55 BOOST_TEST( p1
.get() == 0 );
56 BOOST_TEST_EQ( p2
.get(), q1
);
60 std::unique_ptr
<int[]> p1( new int[ 1 ] );
63 std::unique_ptr
<int[]> p2
= boost::static_pointer_cast
<int[]>( std::move( p1
) );
65 BOOST_TEST( p1
.get() == 0 );
66 BOOST_TEST_EQ( p2
.get(), q1
);
70 std::unique_ptr
<int[]> p1( new int[ 1 ] );
73 std::unique_ptr
<int const[]> p2
= boost::static_pointer_cast
<int const[]>( std::move( p1
) );
75 BOOST_TEST( p1
.get() == 0 );
76 BOOST_TEST_EQ( p2
.get(), q1
);
80 std::unique_ptr
<D1
> p1( new D1
);
83 std::unique_ptr
<B1
> p2
= boost::static_pointer_cast
<B1
>( std::move( p1
) );
85 BOOST_TEST( p1
.get() == 0 );
86 BOOST_TEST_EQ( p2
.get(), q1
);
88 std::unique_ptr
<D1
> p3
= boost::static_pointer_cast
<D1
>( std::move( p2
) );
90 BOOST_TEST( p2
.get() == 0 );
91 BOOST_TEST_EQ( p3
.get(), q1
);
95 static void test_const_cast()
98 std::unique_ptr
<int> p1( new int );
101 std::unique_ptr
<int const> p2
= boost::const_pointer_cast
<int const>( std::move( p1
) );
103 BOOST_TEST( p1
.get() == 0 );
104 BOOST_TEST_EQ( p2
.get(), q1
);
106 std::unique_ptr
<int> p3
= boost::const_pointer_cast
<int>( std::move( p2
) );
108 BOOST_TEST( p2
.get() == 0 );
109 BOOST_TEST_EQ( p3
.get(), q1
);
113 std::unique_ptr
<int[]> p1( new int[ 1 ] );
116 std::unique_ptr
<int const[]> p2
= boost::const_pointer_cast
<int const[]>( std::move( p1
) );
118 BOOST_TEST( p1
.get() == 0 );
119 BOOST_TEST_EQ( p2
.get(), q1
);
121 std::unique_ptr
<int[]> p3
= boost::const_pointer_cast
<int[]>( std::move( p2
) );
123 BOOST_TEST( p2
.get() == 0 );
124 BOOST_TEST_EQ( p3
.get(), q1
);
146 static void test_dynamic_cast()
149 std::unique_ptr
<D2
> p1( new D2
);
152 std::unique_ptr
<B2
> p2
= boost::dynamic_pointer_cast
<B2
>( std::move( p1
) );
154 BOOST_TEST( p1
.get() == 0 );
155 BOOST_TEST_EQ( p2
.get(), q1
);
159 std::unique_ptr
<B2
> p1( new D2
);
162 std::unique_ptr
<D2
> p2
= boost::dynamic_pointer_cast
<D2
>( std::move( p1
) );
164 BOOST_TEST( p1
.get() == 0 );
165 BOOST_TEST_EQ( p2
.get(), q1
);
169 std::unique_ptr
<B2
> p1( new B2
);
172 std::unique_ptr
<D2
> p2
= boost::dynamic_pointer_cast
<D2
>( std::move( p1
) );
174 BOOST_TEST( p2
.get() == 0 );
175 BOOST_TEST_EQ( p1
.get(), q1
);
180 std::unique_ptr
<B2
> p1( q1
);
182 std::unique_ptr
<C2
> p2
= boost::dynamic_pointer_cast
<C2
>( std::move( p1
) );
184 BOOST_TEST( p1
.get() == 0 );
185 BOOST_TEST_EQ( p2
.get(), q1
);
189 static void test_reinterpret_cast()
192 std::unique_ptr
<int> p1( new int );
193 void * q1
= p1
.get();
195 std::unique_ptr
<char> p2
= boost::reinterpret_pointer_cast
<char>( std::move( p1
) );
197 BOOST_TEST( p1
.get() == 0 );
198 BOOST_TEST_EQ( p2
.get(), q1
);
200 p1
= boost::reinterpret_pointer_cast
<int>( std::move( p2
) );
202 BOOST_TEST( p2
.get() == 0 );
203 BOOST_TEST_EQ( p1
.get(), q1
);
207 std::unique_ptr
<int> p1( new int );
208 void * q1
= p1
.get();
210 std::unique_ptr
<char[]> p2
= boost::reinterpret_pointer_cast
<char[]>( std::move( p1
) );
212 BOOST_TEST( p1
.get() == 0 );
213 BOOST_TEST_EQ( p2
.get(), q1
);
215 p1
= boost::reinterpret_pointer_cast
<int>( std::move( p2
) );
217 BOOST_TEST( p2
.get() == 0 );
218 BOOST_TEST_EQ( p1
.get(), q1
);
222 std::unique_ptr
<int[]> p1( new int[ 1 ] );
223 void * q1
= p1
.get();
225 std::unique_ptr
<char[]> p2
= boost::reinterpret_pointer_cast
<char[]>( std::move( p1
) );
227 BOOST_TEST( p1
.get() == 0 );
228 BOOST_TEST_EQ( p2
.get(), q1
);
230 p1
= boost::reinterpret_pointer_cast
<int[]>( std::move( p2
) );
232 BOOST_TEST( p2
.get() == 0 );
233 BOOST_TEST_EQ( p1
.get(), q1
);
242 test_reinterpret_cast();
244 return boost::report_errors();