From 2a56c7392490dbc7c57bad1c14214126748d7ff6 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sat, 9 Aug 2014 13:50:38 +0300 Subject: [PATCH] Add weak_from_raw_test2.cpp. --- test/Jamfile.v2 | 2 ++ test/weak_from_raw_test2.cpp | 67 ++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 test/weak_from_raw_test2.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index b76fda6..027367c 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -168,6 +168,8 @@ import testing ; [ run shared_from_raw_test4.cpp ] [ run shared_from_raw_test5.cpp ] [ run shared_from_raw_test6.cpp ] + [ run weak_from_raw_test.cpp ] + [ run weak_from_raw_test2.cpp ] ; } diff --git a/test/weak_from_raw_test2.cpp b/test/weak_from_raw_test2.cpp new file mode 100644 index 0000000..c1da6f0 --- /dev/null +++ b/test/weak_from_raw_test2.cpp @@ -0,0 +1,67 @@ +// +// weak_from_raw_test2.cpp +// +// Test that weak_from_raw returns consistent values +// throughout the object lifetime +// +// Copyright (c) 2014 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// + +#include +#include +#include + +class X; + +static boost::weak_ptr< X > r_; + +void register_( boost::weak_ptr< X > const & r ) +{ + r_ = r; +} + +void check_( boost::weak_ptr< X > const & r ) +{ + BOOST_TEST( !( r < r_ ) && !( r_ < r ) ); +} + +void unregister_( boost::weak_ptr< X > const & r ) +{ + BOOST_TEST( !( r < r_ ) && !( r_ < r ) ); + r_.reset(); +} + +class X: public boost::enable_shared_from_raw +{ +public: + + X() + { + register_( boost::shared_from_raw( this ) ); + } + + ~X() + { + unregister_( boost::weak_from_raw( this ) ); + } + + void check() + { + check_( boost::weak_from_raw( this ) ); + } +}; + +int main() +{ + { + boost::shared_ptr< X > px( new X ); + px->check(); + } + + return boost::report_errors(); +}