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 | |
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 | |