use_count() postconditions added; enable_..._test.cpp renamed.

[SVN r16896]
This commit is contained in:
Peter Dimov
2003-01-13 18:32:16 +00:00
parent 78a47d7619
commit c5bae28eeb
7 changed files with 148 additions and 62 deletions

View File

@ -8,7 +8,7 @@
//
// detail/shared_count.hpp
//
// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
@ -386,7 +386,7 @@ public:
long use_count() const // nothrow
{
return pi_ != 0? pi_->use_count(): 42; // '42' is an example of 'unspecified'
return pi_ != 0? pi_->use_count(): 0;
}
bool unique() const // nothrow

View File

@ -6,9 +6,9 @@
#endif
//
// enable_shared_from_this_test.cpp
// shared_from_this_test.cpp
//
// Copyright (c) 2002 Peter Dimov
// Copyright (c) 2002, 2003 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.

View File

@ -258,7 +258,8 @@ template<class Y> shared_ptr(shared_ptr<Y> const & r); // never
<blockquote>
<p><b>Effects:</b> If <b>r</b> is <EM>empty</EM>, constructs an <EM>empty</EM> <b>shared_ptr</b>;
otherwise, constructs a <b>shared_ptr</b> that <EM>shares ownership</EM> with <b>r</b>.</p>
<p><b>Postconditions:</b> <code>get() == r.get()</code>.</p>
<p><b>Postconditions:</b> <code>get() == r.get() &amp;&amp; use_count() ==
r.use_count()</code>.</p>
<p><b>Throws:</b> nothing.</p>
</blockquote>
<pre>template&lt;class Y&gt; explicit shared_ptr(<A href="weak_ptr.htm" >weak_ptr</A>&lt;Y&gt; const &amp; r);</pre>
@ -266,6 +267,7 @@ template&lt;class Y&gt; shared_ptr(shared_ptr&lt;Y&gt; const &amp; r); // never
<p><b>Effects:</b> If <b>r</b> is <EM>empty</EM>, constructs an <EM>empty</EM> <b>shared_ptr</b>;
otherwise, constructs a <b>shared_ptr</b> that <EM>shares ownership</EM> with <b>r</b>
and stores a copy of the pointer stored in <STRONG>r</STRONG>.</p>
<p><b>Postconditions:</b> <code>use_count() == r.use_count()</code>.</p>
<p><b>Throws:</b> <b>bad_weak_ptr</b> when <code>r.use_count() == 0</code>.</p>
<p><b>Exception safety:</b> If an exception is thrown, the constructor has no
effect.</p>
@ -359,9 +361,9 @@ q = p;
<h3><a name="use_count">use_count</a></h3>
<pre>long use_count() const; // never throws</pre>
<blockquote>
<p><b>Returns:</b> the number of <b>shared_ptr</b> objects that <i>share ownership</i>
with <b>*this</b>, or an unspecified nonnegative value when <STRONG>*this</STRONG>
is <EM>empty</EM>.</p>
<p><b>Returns:</b> the number of <b>shared_ptr</b> objects, <STRONG>*this</STRONG> included, that
<i>share ownership</i> with <b>*this</b>, or an unspecified nonnegative value
when <STRONG>*this</STRONG> is <EM>empty</EM>.</p>
<p><b>Throws:</b> nothing.</p>
<P><B>Notes:</B> <code>use_count()</code> is not necessarily efficient. Use only
for debugging and testing purposes, not for production code.</P>

View File

@ -9,7 +9,7 @@
//
// shared_ptr_test.cpp
//
// Copyright (c) 2002 Peter Dimov
// Copyright (c) 2002, 2003 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
@ -481,18 +481,21 @@ void copy_constructor()
BOOST_TEST(pi2? false: true);
BOOST_TEST(!pi2);
BOOST_TEST(pi2.get() == 0);
BOOST_TEST(pi2.use_count() == pi.use_count());
boost::shared_ptr<void> pi3(pi);
BOOST_TEST(pi3 == pi);
BOOST_TEST(pi3? false: true);
BOOST_TEST(!pi3);
BOOST_TEST(pi3.get() == 0);
BOOST_TEST(pi3.use_count() == pi.use_count());
boost::shared_ptr<void> pi4(pi3);
BOOST_TEST(pi4 == pi3);
BOOST_TEST(pi4? false: true);
BOOST_TEST(!pi4);
BOOST_TEST(pi4.get() == 0);
BOOST_TEST(pi4.use_count() == pi3.use_count());
}
{
@ -503,6 +506,7 @@ void copy_constructor()
BOOST_TEST(pv2? false: true);
BOOST_TEST(!pv2);
BOOST_TEST(pv2.get() == 0);
BOOST_TEST(pv2.use_count() == pv.use_count());
}
{
@ -513,12 +517,14 @@ void copy_constructor()
BOOST_TEST(px2? false: true);
BOOST_TEST(!px2);
BOOST_TEST(px2.get() == 0);
BOOST_TEST(px2.use_count() == px.use_count());
boost::shared_ptr<void> px3(px);
BOOST_TEST(px3 == px);
BOOST_TEST(px3? false: true);
BOOST_TEST(!px3);
BOOST_TEST(px3.get() == 0);
BOOST_TEST(px3.use_count() == px.use_count());
}
{
@ -531,8 +537,7 @@ void copy_constructor()
BOOST_TEST(pi2.get() == 0);
BOOST_TEST(pi2.use_count() == 2);
BOOST_TEST(!pi2.unique());
BOOST_TEST(pi.use_count() == pi2.use_count());
BOOST_TEST(pi2.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test
boost::shared_ptr<void> pi3(pi);
@ -542,6 +547,8 @@ void copy_constructor()
BOOST_TEST(pi3.get() == 0);
BOOST_TEST(pi3.use_count() == 3);
BOOST_TEST(!pi3.unique());
BOOST_TEST(pi3.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi3 || pi3 < pi)); // shared ownership test
boost::shared_ptr<void> pi4(pi2);
BOOST_TEST(pi4 == pi2);
@ -550,6 +557,8 @@ void copy_constructor()
BOOST_TEST(pi4.get() == 0);
BOOST_TEST(pi4.use_count() == 4);
BOOST_TEST(!pi4.unique());
BOOST_TEST(pi4.use_count() == pi2.use_count());
BOOST_TEST(!(pi2 < pi4 || pi4 < pi2)); // shared ownership test
BOOST_TEST(pi3.use_count() == pi4.use_count());
BOOST_TEST(!(pi3 < pi4 || pi4 < pi3)); // shared ownership test
@ -565,8 +574,7 @@ void copy_constructor()
BOOST_TEST(px2.get() == 0);
BOOST_TEST(px2.use_count() == 2);
BOOST_TEST(!px2.unique());
BOOST_TEST(px.use_count() == px2.use_count());
BOOST_TEST(px2.use_count() == px.use_count());
BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test
boost::shared_ptr<void> px3(px);
@ -576,6 +584,8 @@ void copy_constructor()
BOOST_TEST(px3.get() == 0);
BOOST_TEST(px3.use_count() == 3);
BOOST_TEST(!px3.unique());
BOOST_TEST(px3.use_count() == px.use_count());
BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test
boost::shared_ptr<void> px4(px2);
BOOST_TEST(px4 == px2);
@ -584,6 +594,8 @@ void copy_constructor()
BOOST_TEST(px4.get() == 0);
BOOST_TEST(px4.use_count() == 4);
BOOST_TEST(!px4.unique());
BOOST_TEST(px4.use_count() == px2.use_count());
BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test
BOOST_TEST(px3.use_count() == px4.use_count());
BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test
@ -601,8 +613,7 @@ void copy_constructor()
BOOST_TEST(pi2.use_count() == 2);
BOOST_TEST(!pi2.unique());
BOOST_TEST(*pi2 == 7);
BOOST_TEST(pi.use_count() == pi2.use_count());
BOOST_TEST(pi2.use_count() == pi.use_count());
BOOST_TEST(!(pi < pi2 || pi2 < pi)); // shared ownership test
}
@ -618,8 +629,7 @@ void copy_constructor()
BOOST_TEST(pv2.get() == p);
BOOST_TEST(pv2.use_count() == 2);
BOOST_TEST(!pv2.unique());
BOOST_TEST(pv.use_count() == pv2.use_count());
BOOST_TEST(pv2.use_count() == pv.use_count());
BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test
}
@ -640,7 +650,7 @@ void copy_constructor()
BOOST_TEST(X::instances == 1);
BOOST_TEST(px.use_count() == px2.use_count());
BOOST_TEST(px2.use_count() == px.use_count());
BOOST_TEST(!(px < px2 || px2 < px)); // shared ownership test
boost::shared_ptr<void> px3(px);
@ -650,6 +660,8 @@ void copy_constructor()
BOOST_TEST(px3.get() == p);
BOOST_TEST(px3.use_count() == 3);
BOOST_TEST(!px3.unique());
BOOST_TEST(px3.use_count() == px.use_count());
BOOST_TEST(!(px < px3 || px3 < px)); // shared ownership test
boost::shared_ptr<void> px4(px2);
BOOST_TEST(px4 == px2);
@ -658,6 +670,8 @@ void copy_constructor()
BOOST_TEST(px4.get() == p);
BOOST_TEST(px4.use_count() == 4);
BOOST_TEST(!px4.unique());
BOOST_TEST(px4.use_count() == px2.use_count());
BOOST_TEST(!(px2 < px4 || px4 < px2)); // shared ownership test
BOOST_TEST(px3.use_count() == px4.use_count());
BOOST_TEST(!(px3 < px4 || px4 < px3)); // shared ownership test
@ -678,6 +692,8 @@ void copy_constructor()
BOOST_TEST(px.get() == p);
BOOST_TEST(px.use_count() == 2);
BOOST_TEST(!px.unique());
BOOST_TEST(px.use_count() == py.use_count());
BOOST_TEST(!(px < py || py < px)); // shared ownership test
BOOST_TEST(X::instances == 1);
BOOST_TEST(Y::instances == 1);
@ -689,6 +705,8 @@ void copy_constructor()
BOOST_TEST(pv.get() == px.get());
BOOST_TEST(pv.use_count() == 3);
BOOST_TEST(!pv.unique());
BOOST_TEST(pv.use_count() == px.use_count());
BOOST_TEST(!(px < pv || pv < px)); // shared ownership test
boost::shared_ptr<void const> pv2(py);
BOOST_TEST(pv2 == py);
@ -697,6 +715,8 @@ void copy_constructor()
BOOST_TEST(pv2.get() == py.get());
BOOST_TEST(pv2.use_count() == 4);
BOOST_TEST(!pv2.unique());
BOOST_TEST(pv2.use_count() == py.use_count());
BOOST_TEST(!(py < pv2 || pv2 < py)); // shared ownership test
BOOST_TEST(pv.use_count() == pv2.use_count());
BOOST_TEST(!(pv < pv2 || pv2 < pv)); // shared ownership test
@ -710,6 +730,7 @@ void weak_ptr_constructor()
{
{
boost::weak_ptr<Y> wp;
BOOST_TEST(wp.use_count() == 0);
try
{
@ -730,48 +751,69 @@ void weak_ptr_constructor()
}
}
boost::shared_ptr<Y> p(new Y);
boost::weak_ptr<Y> wp(p);
{
boost::shared_ptr<Y> p2(wp);
BOOST_TEST(p2? true: false);
BOOST_TEST(!!p2);
BOOST_TEST(p2.get() == p.get());
BOOST_TEST(p2.use_count() == 2);
BOOST_TEST(!p2.unique());
boost::shared_ptr<Y> p;
boost::weak_ptr<Y> wp(p);
BOOST_TEST(p.use_count() == p2.use_count());
BOOST_TEST(!(p < p2 || p2 < p)); // shared ownership test
if(wp.use_count() != 0) // 0 allowed but not required
{
boost::shared_ptr<Y> p2(wp);
BOOST_TEST(p2.use_count() == wp.use_count());
BOOST_TEST(p2.get() == 0);
boost::shared_ptr<X> p3(wp);
BOOST_TEST(p3? true: false);
BOOST_TEST(!!p3);
BOOST_TEST(p3.get() == p.get());
BOOST_TEST(p3.use_count() == 3);
BOOST_TEST(!p3.unique());
BOOST_TEST(p.use_count() == p3.use_count());
boost::shared_ptr<X> p3(wp);
BOOST_TEST(p3.use_count() == wp.use_count());
BOOST_TEST(p3.get() == 0);
}
}
p.reset();
{
boost::shared_ptr<Y> p(new Y);
boost::weak_ptr<Y> wp(p);
try
{
boost::shared_ptr<Y> p2(wp);
BOOST_ERROR("shared_ptr<Y> p2(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
{
boost::shared_ptr<Y> p2(wp);
BOOST_TEST(p2? true: false);
BOOST_TEST(!!p2);
BOOST_TEST(p2.get() == p.get());
BOOST_TEST(p2.use_count() == 2);
BOOST_TEST(!p2.unique());
BOOST_TEST(p2.use_count() == wp.use_count());
try
{
boost::shared_ptr<X> p3(wp);
BOOST_ERROR("shared_ptr<X> p3(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
BOOST_TEST(p.use_count() == p2.use_count());
BOOST_TEST(!(p < p2 || p2 < p)); // shared ownership test
boost::shared_ptr<X> p3(wp);
BOOST_TEST(p3? true: false);
BOOST_TEST(!!p3);
BOOST_TEST(p3.get() == p.get());
BOOST_TEST(p3.use_count() == 3);
BOOST_TEST(!p3.unique());
BOOST_TEST(p3.use_count() == wp.use_count());
BOOST_TEST(p.use_count() == p3.use_count());
}
p.reset();
BOOST_TEST(wp.use_count() == 0);
try
{
boost::shared_ptr<Y> p2(wp);
BOOST_ERROR("shared_ptr<Y> p2(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
try
{
boost::shared_ptr<X> p3(wp);
BOOST_ERROR("shared_ptr<X> p3(wp) failed to throw");
}
catch(boost::bad_weak_ptr)
{
}
}
}

View File

@ -1,7 +1,7 @@
//
// sp_debug_hooks.cpp
//
// Copyright (c) 2002 Peter Dimov
// Copyright (c) 2002, 2003 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.

View File

@ -124,7 +124,7 @@ if(shared_ptr&lt;int&gt; r = <A href="#make_shared" >make_shared</A>(q))
<pre>weak_ptr();</pre>
<blockquote>
<p><b>Effects:</b> Constructs an <EM>empty</EM> <b>weak_ptr</b>.</p>
<p><b>Postconditions:</b> <code>use count() == 0<i>???</i></code>.</p>
<p><b>Postconditions:</b> <code>use_count() == 0</code>.</p>
<p><b>Throws:</b> nothing.</p>
</blockquote><a name="constructors"></a>
<pre>template&lt;class Y&gt; weak_ptr</A>(shared_ptr&lt;Y&gt; const &amp; r);
@ -135,6 +135,7 @@ template&lt;class Y&gt; weak_ptr(weak_ptr&lt;Y&gt; const &amp; r);</pre>
<STRONG>weak_ptr</STRONG>; otherwise, constructs a <b>weak_ptr</b> that <EM>shares
ownership</EM> with <STRONG>r</STRONG> as if by storing a copy of the
pointer stored in <b>r</b>.</p>
<p><b>Postconditions:</b> <code>use_count() == r.use_count()</code>.</p>
<p><b>Throws:</b> nothing.</p>
</blockquote>
<h3><a name="destructor">destructor</a></h3>
@ -244,7 +245,8 @@ public:
}
};
</pre>
<p><br></p>
<p><br>
</p>
<hr>
<p>$Date$</p>
<p>Copyright 1999 Greg Colvin and Beman Dawes. Copyright 2002 Darin Adler.

View File

@ -9,7 +9,7 @@
//
// weak_ptr_test.cpp
//
// Copyright (c) 2002 Peter Dimov
// Copyright (c) 2002, 2003 Peter Dimov
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
@ -88,10 +88,10 @@ void shared_ptr_constructor()
boost::shared_ptr<int> sp;
boost::weak_ptr<int> wp(sp);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp.use_count() == sp.use_count());
boost::weak_ptr<void> wp2(sp);
BOOST_TEST(wp2.use_count() == 0);
BOOST_TEST(wp2.use_count() == sp.use_count());
}
{
@ -99,6 +99,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<int> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<int> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -107,6 +108,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -119,6 +121,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<int> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<int> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -127,6 +130,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -138,13 +142,14 @@ void shared_ptr_constructor()
boost::shared_ptr<void> sp;
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp.use_count() == sp.use_count());
}
{
boost::shared_ptr<void> sp(static_cast<int*>(0));
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -155,6 +160,7 @@ void shared_ptr_constructor()
boost::shared_ptr<void> sp(new int);
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -165,10 +171,10 @@ void shared_ptr_constructor()
boost::shared_ptr<incomplete> sp;
boost::weak_ptr<incomplete> wp(sp);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp.use_count() == sp.use_count());
boost::weak_ptr<void> wp2(sp);
BOOST_TEST(wp2.use_count() == 0);
BOOST_TEST(wp2.use_count() == sp.use_count());
}
{
@ -176,6 +182,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<incomplete> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<incomplete> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -184,6 +191,7 @@ void shared_ptr_constructor()
{
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -195,6 +203,7 @@ void shared_ptr_constructor()
boost::shared_ptr<void> sp = create_incomplete();
boost::weak_ptr<void> wp(sp);
BOOST_TEST(wp.use_count() == sp.use_count());
BOOST_TEST(wp.use_count() == 1);
boost::shared_ptr<void> sp2(wp);
BOOST_TEST(wp.use_count() == 2);
@ -207,18 +216,21 @@ void copy_constructor()
{
boost::weak_ptr<int> wp;
boost::weak_ptr<int> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
}
{
boost::weak_ptr<void> wp;
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
}
{
boost::weak_ptr<incomplete> wp;
boost::weak_ptr<incomplete> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
}
@ -227,6 +239,7 @@ void copy_constructor()
boost::weak_ptr<int> wp(sp);
boost::weak_ptr<int> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -234,6 +247,7 @@ void copy_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<int> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -243,6 +257,7 @@ void copy_constructor()
boost::weak_ptr<int> wp(sp);
boost::weak_ptr<int> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -250,6 +265,7 @@ void copy_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<int> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -259,6 +275,7 @@ void copy_constructor()
boost::weak_ptr<void> wp(sp);
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -266,6 +283,7 @@ void copy_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<void> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -275,6 +293,7 @@ void copy_constructor()
boost::weak_ptr<void> wp(sp);
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -282,6 +301,7 @@ void copy_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<void> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -291,6 +311,7 @@ void copy_constructor()
boost::weak_ptr<incomplete> wp(sp);
boost::weak_ptr<incomplete> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -298,6 +319,7 @@ void copy_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<incomplete> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -308,12 +330,14 @@ void conversion_constructor()
{
boost::weak_ptr<int> wp;
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
}
{
boost::weak_ptr<incomplete> wp;
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
}
@ -321,9 +345,11 @@ void conversion_constructor()
boost::weak_ptr<Z> wp;
boost::weak_ptr<X> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 0);
boost::weak_ptr<Y> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
}
@ -332,6 +358,7 @@ void conversion_constructor()
boost::weak_ptr<int> wp(sp);
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -339,6 +366,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<void> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -348,6 +376,7 @@ void conversion_constructor()
boost::weak_ptr<int> wp(sp);
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -355,6 +384,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<void> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -364,6 +394,7 @@ void conversion_constructor()
boost::weak_ptr<incomplete> wp(sp);
boost::weak_ptr<void> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -371,6 +402,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<void> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -380,6 +412,7 @@ void conversion_constructor()
boost::weak_ptr<Z> wp(sp);
boost::weak_ptr<X> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -387,6 +420,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -396,6 +430,7 @@ void conversion_constructor()
boost::weak_ptr<Z> wp(sp);
boost::weak_ptr<Y> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -403,6 +438,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<Y> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -412,6 +448,7 @@ void conversion_constructor()
boost::weak_ptr<Z> wp(sp);
boost::weak_ptr<X> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -419,6 +456,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}
@ -428,6 +466,7 @@ void conversion_constructor()
boost::weak_ptr<Z> wp(sp);
boost::weak_ptr<Y> wp2(wp);
BOOST_TEST(wp2.use_count() == wp.use_count());
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
@ -435,6 +474,7 @@ void conversion_constructor()
BOOST_TEST(!(wp < wp2 || wp2 < wp));
boost::weak_ptr<Y> wp3(wp);
BOOST_TEST(wp3.use_count() == wp.use_count());
BOOST_TEST(wp3.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
}