• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 Peter Dimov
2 // Distributed under the Boost Software License, Version 1.0.
3 // https://www.boost.org/LICENSE_1_0.txt
4 
5 #include <boost/shared_ptr.hpp>
6 #include <boost/weak_ptr.hpp>
7 #include <boost/core/lightweight_test.hpp>
8 
main()9 int main()
10 {
11     {
12         boost::shared_ptr<int> p1( new int );
13         boost::shared_ptr<int> p2( p1 );
14 
15         BOOST_TEST_EQ( p1.owner_hash_value(), p2.owner_hash_value() );
16 
17         boost::shared_ptr<int> p3( new int );
18 
19         BOOST_TEST_NE( p1.owner_hash_value(), p3.owner_hash_value() );
20 
21         boost::shared_ptr<int> p4;
22         boost::shared_ptr<int> p5;
23 
24         BOOST_TEST_EQ( p4.owner_hash_value(), p5.owner_hash_value() );
25         BOOST_TEST_NE( p4.owner_hash_value(), p3.owner_hash_value() );
26 
27         boost::shared_ptr<int> p6( static_cast<int*>(0) );
28 
29         BOOST_TEST_NE( p4.owner_hash_value(), p6.owner_hash_value() );
30 
31         boost::shared_ptr<void> p7( p1 );
32 
33         BOOST_TEST_EQ( p1.owner_hash_value(), p7.owner_hash_value() );
34 
35         boost::shared_ptr<void> p8;
36 
37         BOOST_TEST_NE( p1.owner_hash_value(), p8.owner_hash_value() );
38         BOOST_TEST_EQ( p4.owner_hash_value(), p8.owner_hash_value() );
39 
40         boost::weak_ptr<int> q1( p1 );
41 
42         BOOST_TEST_EQ( p1.owner_hash_value(), q1.owner_hash_value() );
43 
44         boost::weak_ptr<int> q2( p1 );
45 
46         BOOST_TEST_EQ( q1.owner_hash_value(), q2.owner_hash_value() );
47 
48         boost::weak_ptr<int> q3( p3 );
49 
50         BOOST_TEST_NE( p1.owner_hash_value(), q3.owner_hash_value() );
51         BOOST_TEST_NE( q1.owner_hash_value(), q3.owner_hash_value() );
52 
53         boost::weak_ptr<int> q4;
54 
55         BOOST_TEST_EQ( p4.owner_hash_value(), q4.owner_hash_value() );
56         BOOST_TEST_NE( q1.owner_hash_value(), q4.owner_hash_value() );
57 
58         boost::weak_ptr<void> q5;
59 
60         BOOST_TEST_EQ( q4.owner_hash_value(), q5.owner_hash_value() );
61 
62         boost::weak_ptr<void> q7( p7 );
63 
64         BOOST_TEST_EQ( p1.owner_hash_value(), q7.owner_hash_value() );
65         BOOST_TEST_EQ( q1.owner_hash_value(), q7.owner_hash_value() );
66 
67         p1.reset();
68         p2.reset();
69         p3.reset();
70         p7.reset();
71 
72         BOOST_TEST( q1.expired() );
73         BOOST_TEST( q2.expired() );
74         BOOST_TEST( q3.expired() );
75         BOOST_TEST( q7.expired() );
76 
77         BOOST_TEST_EQ( q1.owner_hash_value(), q2.owner_hash_value() );
78         BOOST_TEST_EQ( q1.owner_hash_value(), q7.owner_hash_value() );
79 
80         BOOST_TEST_NE( q1.owner_hash_value(), q3.owner_hash_value() );
81         BOOST_TEST_NE( q1.owner_hash_value(), q4.owner_hash_value() );
82     }
83 
84     return boost::report_errors();
85 }
86