diff --git a/test/Jamfile b/test/Jamfile index 69938e1..f8edba8 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -403,3 +403,5 @@ run sp_owner_hash_value_test.cpp ; run wp_hash_test.cpp ; run wp_hash_test2.cpp ; + +run wp_unordered_test.cpp ; diff --git a/test/wp_unordered_test.cpp b/test/wp_unordered_test.cpp new file mode 100644 index 0000000..0d35d58 --- /dev/null +++ b/test/wp_unordered_test.cpp @@ -0,0 +1,87 @@ +// Copyright 2011, 2020 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include + +#if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET) + +int main() {} + +#else + +#include + +int main() +{ + std::unordered_set< boost::weak_ptr > set; + + boost::shared_ptr p1( (int*)0 ); + boost::shared_ptr p2( p1 ); + boost::shared_ptr p3( p1 ); + + set.insert( p1 ); + set.insert( p2 ); + set.insert( p3 ); + + BOOST_TEST_EQ( set.size(), 1 ); + + boost::weak_ptr q1( p1 ); + boost::weak_ptr q2( p2 ); + boost::weak_ptr q3( p3 ); + boost::weak_ptr q4( q2 ); + boost::weak_ptr q5( q3 ); + + set.insert( q1 ); + set.insert( q2 ); + set.insert( q3 ); + set.insert( q4 ); + set.insert( q5 ); + + BOOST_TEST_EQ( set.size(), 1 ); + + boost::shared_ptr p6( (int*)0 ); + + set.insert( p6 ); + + BOOST_TEST_EQ( set.size(), 2 ); + + boost::weak_ptr q6( p6 ); + + set.insert( q6 ); + + BOOST_TEST_EQ( set.size(), 2 ); + + BOOST_TEST_EQ( set.count( q1 ), 1 ); + BOOST_TEST_EQ( set.count( q2 ), 1 ); + BOOST_TEST_EQ( set.count( q3 ), 1 ); + BOOST_TEST_EQ( set.count( q4 ), 1 ); + BOOST_TEST_EQ( set.count( q5 ), 1 ); + BOOST_TEST_EQ( set.count( q6 ), 1 ); + + boost::shared_ptr p7( (int*)0 ); + boost::weak_ptr q7( p7 ); + + BOOST_TEST_EQ( set.count( q7 ), 0 ); + + p1.reset(); + p2.reset(); + p3.reset(); + p6.reset(); + p7.reset(); + + BOOST_TEST_EQ( set.count( q1 ), 1 ); + BOOST_TEST_EQ( set.count( q2 ), 1 ); + BOOST_TEST_EQ( set.count( q3 ), 1 ); + BOOST_TEST_EQ( set.count( q4 ), 1 ); + BOOST_TEST_EQ( set.count( q5 ), 1 ); + BOOST_TEST_EQ( set.count( q6 ), 1 ); + BOOST_TEST_EQ( set.count( q7 ), 0 ); + + return boost::report_errors(); +} + +#endif // #if defined(BOOST_NO_CXX11_HDR_UNORDERED_SET)