]>
Commit | Line | Data |
---|---|---|
20effc67 TL |
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/smart_ptr/owner_hash.hpp> | |
6 | #include <boost/shared_ptr.hpp> | |
7 | #include <boost/weak_ptr.hpp> | |
8 | #include <boost/core/lightweight_test.hpp> | |
9 | ||
10 | template<class T> std::size_t hash_( T const& t ) | |
11 | { | |
12 | return boost::owner_hash<T>()( t ); | |
13 | } | |
14 | ||
15 | int main() | |
16 | { | |
17 | boost::shared_ptr<int> p1( new int ); | |
18 | boost::shared_ptr<int> p2( p1 ); | |
19 | ||
20 | BOOST_TEST_EQ( hash_( p1 ), hash_( p2 ) ); | |
21 | ||
22 | boost::shared_ptr<int> p3( new int ); | |
23 | ||
24 | BOOST_TEST_NE( hash_( p1 ), hash_( p3 ) ); | |
25 | ||
26 | boost::shared_ptr<int> p4; | |
27 | boost::shared_ptr<int> p5; | |
28 | ||
29 | BOOST_TEST_EQ( hash_( p4 ), hash_( p5 ) ); | |
30 | BOOST_TEST_NE( hash_( p4 ), hash_( p3 ) ); | |
31 | ||
32 | boost::shared_ptr<int> p6( static_cast<int*>(0) ); | |
33 | ||
34 | BOOST_TEST_NE( hash_( p4 ), hash_( p6 ) ); | |
35 | ||
36 | boost::shared_ptr<void> p7( p1 ); | |
37 | ||
38 | BOOST_TEST_EQ( hash_( p1 ), hash_( p7 ) ); | |
39 | ||
40 | boost::shared_ptr<void> p8; | |
41 | ||
42 | BOOST_TEST_NE( hash_( p1 ), hash_( p8 ) ); | |
43 | BOOST_TEST_EQ( hash_( p4 ), hash_( p8 ) ); | |
44 | ||
45 | boost::weak_ptr<int> q1( p1 ); | |
46 | ||
47 | BOOST_TEST_EQ( hash_( p1 ), hash_( q1 ) ); | |
48 | ||
49 | boost::weak_ptr<int> q2( p1 ); | |
50 | ||
51 | BOOST_TEST_EQ( hash_( q1 ), hash_( q2 ) ); | |
52 | ||
53 | boost::weak_ptr<int> q3( p3 ); | |
54 | ||
55 | BOOST_TEST_NE( hash_( p1 ), hash_( q3 ) ); | |
56 | BOOST_TEST_NE( hash_( q1 ), hash_( q3 ) ); | |
57 | ||
58 | boost::weak_ptr<int> q4; | |
59 | ||
60 | BOOST_TEST_EQ( hash_( p4 ), hash_( q4 ) ); | |
61 | BOOST_TEST_NE( hash_( q1 ), hash_( q4 ) ); | |
62 | ||
63 | boost::weak_ptr<void> q5; | |
64 | ||
65 | BOOST_TEST_EQ( hash_( q4 ), hash_( q5 ) ); | |
66 | ||
67 | boost::weak_ptr<void> q7( p7 ); | |
68 | ||
69 | BOOST_TEST_EQ( hash_( p1 ), hash_( q7 ) ); | |
70 | BOOST_TEST_EQ( hash_( q1 ), hash_( q7 ) ); | |
71 | ||
72 | p1.reset(); | |
73 | p2.reset(); | |
74 | p3.reset(); | |
75 | p7.reset(); | |
76 | ||
77 | BOOST_TEST( q1.expired() ); | |
78 | BOOST_TEST( q2.expired() ); | |
79 | BOOST_TEST( q3.expired() ); | |
80 | BOOST_TEST( q7.expired() ); | |
81 | ||
82 | BOOST_TEST_EQ( hash_( q1 ), hash_( q2 ) ); | |
83 | BOOST_TEST_EQ( hash_( q1 ), hash_( q7 ) ); | |
84 | BOOST_TEST_NE( hash_( q1 ), hash_( q3 ) ); | |
85 | BOOST_TEST_NE( hash_( q1 ), hash_( q4 ) ); | |
86 | ||
87 | return boost::report_errors(); | |
88 | } |