1 // Copyright 2011, 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/weak_ptr.hpp>
6 #include <boost/shared_ptr.hpp>
7 #include <boost/functional/hash.hpp>
8 #include <boost/core/lightweight_test.hpp>
9
main()10 int main()
11 {
12 {
13 boost::hash< boost::weak_ptr<int> > hasher;
14
15 boost::shared_ptr<int> p1, p2( p1 ), p3( new int ), p4( p3 ), p5( new int );
16 boost::weak_ptr<int> q1( p1 ), q2( p2 ), q3( p3 ), q4( p4 ), q5( p5 );
17
18 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
19 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
20 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
21 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
22
23 p3.reset();
24 p4.reset();
25 p5.reset();
26
27 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
28 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
29 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
30 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
31 }
32
33 {
34 boost::hash< boost::weak_ptr<int[]> > hasher;
35
36 boost::shared_ptr<int[]> p1, p2( p1 ), p3( new int[1] ), p4( p3 ), p5( new int[1] );
37 boost::weak_ptr<int[]> q1( p1 ), q2( p2 ), q3( p3 ), q4( p4 ), q5( p5 );
38
39 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
40 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
41 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
42 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
43
44 p3.reset();
45 p4.reset();
46 p5.reset();
47
48 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
49 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
50 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
51 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
52 }
53
54 {
55 boost::hash< boost::weak_ptr<int[1]> > hasher;
56
57 boost::shared_ptr<int[1]> p1, p2( p1 ), p3( new int[1] ), p4( p3 ), p5( new int[1] );
58 boost::weak_ptr<int[1]> q1( p1 ), q2( p2 ), q3( p3 ), q4( p4 ), q5( p5 );
59
60 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
61 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
62 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
63 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
64
65 p3.reset();
66 p4.reset();
67 p5.reset();
68
69 BOOST_TEST_EQ( hasher( q1 ), hasher( q2 ) );
70 BOOST_TEST_NE( hasher( q1 ), hasher( q3 ) );
71 BOOST_TEST_EQ( hasher( q3 ), hasher( q4 ) );
72 BOOST_TEST_NE( hasher( q3 ), hasher( q5 ) );
73 }
74
75 return boost::report_errors();
76 }
77