1 #include <boost/config.hpp>
3 // shared_ptr_alias_test.cpp
5 // Copyright (c) 2007 Peter Dimov
7 // Distributed under the Boost Software License, Version 1.0. (See
8 // accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
12 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/shared_ptr.hpp>
25 explicit X( int v ): v_( v )
39 boost::shared_ptr< int > p;
40 boost::shared_ptr< int > p2( p, &m );
42 BOOST_TEST( p2.get() == &m );
43 BOOST_TEST( p2? true: false );
45 BOOST_TEST( p2.use_count() == p.use_count() );
46 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
50 BOOST_TEST( p2.get() == 0 );
51 BOOST_TEST( p2? false: true );
53 BOOST_TEST( p2.use_count() == p.use_count() );
54 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
59 boost::shared_ptr< int > p( new int );
60 boost::shared_ptr< int const > p2( p, &m );
62 BOOST_TEST( p2.get() == &m );
63 BOOST_TEST( p2? true: false );
65 BOOST_TEST( p2.use_count() == p.use_count() );
66 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
68 boost::shared_ptr< int volatile > p3;
71 BOOST_TEST( p2.get() == 0 );
72 BOOST_TEST( p2? false: true );
74 BOOST_TEST( p2.use_count() == p3.use_count() );
75 BOOST_TEST( !( p3 < p2 ) && !( p2 < p3 ) );
79 boost::shared_ptr< int > p( new int );
80 boost::shared_ptr< void const > p2( p, 0 );
82 BOOST_TEST( p2.get() == 0 );
83 BOOST_TEST( p2? false: true );
85 BOOST_TEST( p2.use_count() == p.use_count() );
86 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
89 boost::shared_ptr< void volatile > p3;
93 BOOST_TEST( p2.get() == &m );
94 BOOST_TEST( p2? true: false );
96 BOOST_TEST( p2.use_count() == p3.use_count() );
97 BOOST_TEST( !( p3 < p2 ) && !( p2 < p3 ) );
101 boost::shared_ptr< incomplete > p;
102 boost::shared_ptr< incomplete > p2( p, 0 );
104 BOOST_TEST( p2.get() == 0 );
105 BOOST_TEST( p2? false: true );
107 BOOST_TEST( p2.use_count() == p.use_count() );
108 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
112 BOOST_TEST( p2.get() == 0 );
113 BOOST_TEST( p2? false: true );
115 BOOST_TEST( p2.use_count() == p.use_count() );
116 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
120 boost::shared_ptr< X > p( new X( 5 ) );
121 boost::shared_ptr< int const > p2( p, &p->v_ );
123 BOOST_TEST( p2.get() == &p->v_ );
124 BOOST_TEST( p2? true: false );
126 BOOST_TEST( p2.use_count() == p.use_count() );
127 BOOST_TEST( !( p < p2 ) && !( p2 < p ) );
130 BOOST_TEST( *p2 == 5 );
132 boost::shared_ptr< X const > p3( new X( 8 ) );
133 p2.reset( p3, &p3->v_ );
135 BOOST_TEST( p2.get() == &p3->v_ );
136 BOOST_TEST( p2? true: false );
138 BOOST_TEST( p2.use_count() == p3.use_count() );
139 BOOST_TEST( !( p3 < p2 ) && !( p2 < p3 ) );
142 BOOST_TEST( *p2 == 8 );
145 return boost::report_errors();