]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/smart_ptr/test/lsp_array_cast_test.cpp
2 // lsp_array_cast_test.cpp
4 // Copyright 2012, 2017 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/smart_ptr/local_shared_ptr.hpp>
12 #include <boost/detail/lightweight_test.hpp>
18 void static_cast_test()
21 boost::local_shared_ptr
<void> pv
;
23 boost::local_shared_ptr
<int[]> pi
= boost::static_pointer_cast
<int[]>( pv
);
24 BOOST_TEST( pi
.get() == 0 );
26 boost::local_shared_ptr
<int[3]> pi2
= boost::static_pointer_cast
<int[3]>( pv
);
27 BOOST_TEST( pi2
.get() == 0 );
29 boost::local_shared_ptr
<X
[]> px
= boost::static_pointer_cast
<X
[]>( pv
);
30 BOOST_TEST( px
.get() == 0 );
32 boost::local_shared_ptr
<X
[5]> px2
= boost::static_pointer_cast
<X
[5]>( pv
);
33 BOOST_TEST( px2
.get() == 0 );
37 boost::local_shared_ptr
<int[]> pi( new int[2] );
38 boost::local_shared_ptr
<void> pv( pi
);
40 boost::local_shared_ptr
<int[]> pi2
= boost::static_pointer_cast
<int[]>( pv
);
41 BOOST_TEST(pi
.get() == pi2
.get());
42 BOOST_TEST(!(pi
< pi2
|| pi2
< pi
));
44 boost::local_shared_ptr
<int[2]> pi3
= boost::static_pointer_cast
<int[2]>( pv
);
45 BOOST_TEST(pi
.get() == pi3
.get());
46 BOOST_TEST(!(pi
< pi3
|| pi3
< pi
));
48 boost::local_shared_ptr
<void> pv2( pi3
);
50 boost::local_shared_ptr
<int[]> pi4
= boost::static_pointer_cast
<int[]>( pv2
);
51 BOOST_TEST(pi
.get() == pi4
.get());
52 BOOST_TEST(!(pi
< pi4
|| pi4
< pi
));
56 boost::local_shared_ptr
<X
[]> px( new X
[4] );
57 boost::local_shared_ptr
<void> pv( px
);
59 boost::local_shared_ptr
<X
[]> px2
= boost::static_pointer_cast
<X
[]>( pv
);
60 BOOST_TEST(px
.get() == px2
.get());
61 BOOST_TEST(!(px
< px2
|| px2
< px
));
63 boost::local_shared_ptr
<X
[4]> px3
= boost::static_pointer_cast
<X
[4]>( pv
);
64 BOOST_TEST(px
.get() == px3
.get());
65 BOOST_TEST(!(px
< px3
|| px3
< px
));
67 boost::local_shared_ptr
<void> pv2( px3
);
69 boost::local_shared_ptr
<X
[]> px4
= boost::static_pointer_cast
<X
[]>( pv2
);
70 BOOST_TEST(px
.get() == px4
.get());
71 BOOST_TEST(!(px
< px4
|| px4
< px
));
75 void const_cast_test()
78 boost::local_shared_ptr
<int const volatile[]> px
;
80 boost::local_shared_ptr
<int[]> px2
= boost::const_pointer_cast
<int[]>(px
);
81 BOOST_TEST( px2
.get() == 0 );
85 boost::local_shared_ptr
<int const volatile[2]> px
;
87 boost::local_shared_ptr
<int[2]> px2
= boost::const_pointer_cast
<int[2]>(px
);
88 BOOST_TEST( px2
.get() == 0 );
92 boost::local_shared_ptr
<X
const volatile[]> px
;
94 boost::local_shared_ptr
<X
[]> px2
= boost::const_pointer_cast
<X
[]>(px
);
95 BOOST_TEST( px2
.get() == 0 );
99 boost::local_shared_ptr
<X
const volatile[5]> px
;
101 boost::local_shared_ptr
<X
[5]> px2
= boost::const_pointer_cast
<X
[5]>(px
);
102 BOOST_TEST( px2
.get() == 0 );
106 boost::local_shared_ptr
<int const volatile[]> px( new int[3] );
108 boost::local_shared_ptr
<int[]> px2
= boost::const_pointer_cast
<int[]>(px
);
109 BOOST_TEST(px
.get() == px2
.get());
110 BOOST_TEST(!(px
< px2
|| px2
< px
));
114 boost::local_shared_ptr
<int const volatile[3]> px( new int[3] );
116 boost::local_shared_ptr
<int[3]> px2
= boost::const_pointer_cast
<int[3]>(px
);
117 BOOST_TEST(px
.get() == px2
.get());
118 BOOST_TEST(!(px
< px2
|| px2
< px
));
122 boost::local_shared_ptr
<X
const volatile[]> px( new X
[4] );
124 boost::local_shared_ptr
<X
[]> px2
= boost::const_pointer_cast
<X
[]>(px
);
125 BOOST_TEST(px
.get() == px2
.get());
126 BOOST_TEST(!(px
< px2
|| px2
< px
));
130 boost::local_shared_ptr
<X
const volatile[4]> px( new X
[4] );
132 boost::local_shared_ptr
<X
[4]> px2
= boost::const_pointer_cast
<X
[4]>(px
);
133 BOOST_TEST(px
.get() == px2
.get());
134 BOOST_TEST(!(px
< px2
|| px2
< px
));
138 void reinterpret_cast_test()
141 boost::local_shared_ptr
<int[]> pi
;
142 BOOST_TEST( pi
.get() == 0 );
144 boost::local_shared_ptr
<int[3]> pi2
= boost::reinterpret_pointer_cast
<int[3]>( pi
);
145 BOOST_TEST( pi2
.get() == 0 );
147 boost::local_shared_ptr
<int[6]> pi3
= boost::reinterpret_pointer_cast
<int[6]>( pi2
);
148 BOOST_TEST( pi3
.get() == 0 );
152 boost::local_shared_ptr
<X
[]> px
;
153 BOOST_TEST( px
.get() == 0 );
155 boost::local_shared_ptr
<X
[5]> px2
= boost::reinterpret_pointer_cast
<X
[5]>( px
);
156 BOOST_TEST( px2
.get() == 0 );
158 boost::local_shared_ptr
<X
[9]> px3
= boost::reinterpret_pointer_cast
<X
[9]>( px2
);
159 BOOST_TEST( px3
.get() == 0 );
163 boost::local_shared_ptr
<int[]> pi( new int[2] );
165 boost::local_shared_ptr
<int[2]> pi2
= boost::reinterpret_pointer_cast
<int[2]>( pi
);
166 BOOST_TEST(pi
.get() == pi2
.get());
167 BOOST_TEST(!(pi
< pi2
|| pi2
< pi
));
169 boost::local_shared_ptr
<int[1]> pi3
= boost::reinterpret_pointer_cast
<int[1]>( pi2
);
170 BOOST_TEST(pi
.get() == pi3
.get());
171 BOOST_TEST(!(pi
< pi3
|| pi3
< pi
));
173 boost::local_shared_ptr
<int[]> pi4
= boost::reinterpret_pointer_cast
<int[]>( pi3
);
174 BOOST_TEST(pi
.get() == pi4
.get());
175 BOOST_TEST(!(pi
< pi4
|| pi4
< pi
));
179 boost::local_shared_ptr
<X
[]> px( new X
[4] );
181 boost::local_shared_ptr
<X
[7]> px2
= boost::reinterpret_pointer_cast
<X
[7]>( px
);
182 BOOST_TEST(px
.get() == px2
.get());
183 BOOST_TEST(!(px
< px2
|| px2
< px
));
185 boost::local_shared_ptr
<X
[4]> px3
= boost::reinterpret_pointer_cast
<X
[4]>( px2
);
186 BOOST_TEST(px
.get() == px3
.get());
187 BOOST_TEST(!(px
< px3
|| px3
< px
));
189 boost::local_shared_ptr
<X
[]> px4
= boost::reinterpret_pointer_cast
<X
[]>( px3
);
190 BOOST_TEST(px
.get() == px4
.get());
191 BOOST_TEST(!(px
< px4
|| px4
< px
));
199 reinterpret_cast_test();
201 return boost::report_errors();