// Copyright 2020 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include int main() { { boost::shared_ptr p1( new int ); boost::shared_ptr p2( p1 ); BOOST_TEST_EQ( p1.owner_hash_value(), p2.owner_hash_value() ); boost::shared_ptr p3( new int ); BOOST_TEST_NE( p1.owner_hash_value(), p3.owner_hash_value() ); boost::shared_ptr p4; boost::shared_ptr p5; BOOST_TEST_EQ( p4.owner_hash_value(), p5.owner_hash_value() ); BOOST_TEST_NE( p4.owner_hash_value(), p3.owner_hash_value() ); boost::shared_ptr p6( static_cast(0) ); BOOST_TEST_NE( p4.owner_hash_value(), p6.owner_hash_value() ); boost::shared_ptr p7( p1 ); BOOST_TEST_EQ( p1.owner_hash_value(), p7.owner_hash_value() ); boost::shared_ptr p8; BOOST_TEST_NE( p1.owner_hash_value(), p8.owner_hash_value() ); BOOST_TEST_EQ( p4.owner_hash_value(), p8.owner_hash_value() ); boost::weak_ptr q1( p1 ); BOOST_TEST_EQ( p1.owner_hash_value(), q1.owner_hash_value() ); boost::weak_ptr q2( p1 ); BOOST_TEST_EQ( q1.owner_hash_value(), q2.owner_hash_value() ); boost::weak_ptr q3( p3 ); BOOST_TEST_NE( p1.owner_hash_value(), q3.owner_hash_value() ); BOOST_TEST_NE( q1.owner_hash_value(), q3.owner_hash_value() ); boost::weak_ptr q4; BOOST_TEST_EQ( p4.owner_hash_value(), q4.owner_hash_value() ); BOOST_TEST_NE( q1.owner_hash_value(), q4.owner_hash_value() ); boost::weak_ptr q5; BOOST_TEST_EQ( q4.owner_hash_value(), q5.owner_hash_value() ); boost::weak_ptr q7( p7 ); BOOST_TEST_EQ( p1.owner_hash_value(), q7.owner_hash_value() ); BOOST_TEST_EQ( q1.owner_hash_value(), q7.owner_hash_value() ); p1.reset(); p2.reset(); p3.reset(); p7.reset(); BOOST_TEST( q1.expired() ); BOOST_TEST( q2.expired() ); BOOST_TEST( q3.expired() ); BOOST_TEST( q7.expired() ); BOOST_TEST_EQ( q1.owner_hash_value(), q2.owner_hash_value() ); BOOST_TEST_EQ( q1.owner_hash_value(), q7.owner_hash_value() ); BOOST_TEST_NE( q1.owner_hash_value(), q3.owner_hash_value() ); BOOST_TEST_NE( q1.owner_hash_value(), q4.owner_hash_value() ); } return boost::report_errors(); }