📄 weak_ptr_test.cpp
字号:
using std::swap;
swap(wp, wp2);
BOOST_TEST(wp.use_count() == 1);
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp2 < wp3 || wp3 < wp2));
sp.reset();
wp.swap(wp2);
BOOST_TEST(wp.use_count() == 1);
BOOST_TEST(wp2.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
using std::swap;
swap(wp, wp2);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp2.use_count() == 1);
BOOST_TEST(!(wp2 < wp3 || wp3 < wp2));
sp2.reset();
wp.swap(wp2);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp2.use_count() == 0);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
using std::swap;
swap(wp, wp2);
BOOST_TEST(wp.use_count() == 0);
BOOST_TEST(wp2.use_count() == 0);
BOOST_TEST(!(wp2 < wp3 || wp3 < wp2));
}
}
} // namespace n_swap
namespace n_comparison
{
void test()
{
{
boost::weak_ptr<X> wp;
BOOST_TEST(!(wp < wp));
boost::weak_ptr<X> wp2;
BOOST_TEST(!(wp < wp2 && wp2 < wp));
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp3 < wp3));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
}
{
boost::shared_ptr<X> sp(new X);
boost::weak_ptr<X> wp(sp);
BOOST_TEST(!(wp < wp));
boost::weak_ptr<X> wp2;
BOOST_TEST(wp < wp2 || wp2 < wp);
BOOST_TEST(!(wp < wp2 && wp2 < wp));
bool b1 = wp < wp2;
bool b2 = wp2 < wp;
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(wp2 < wp3 || wp3 < wp2);
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(wp4 < wp3 || wp3 < wp4);
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
sp.reset();
BOOST_TEST(b1 == (wp < wp2));
BOOST_TEST(b2 == (wp2 < wp));
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(wp2 < wp3 || wp3 < wp2);
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(wp4 < wp3 || wp3 < wp4);
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
}
{
boost::shared_ptr<X> sp(new X);
boost::shared_ptr<X> sp2(new X);
boost::weak_ptr<X> wp(sp);
boost::weak_ptr<X> wp2(sp2);
BOOST_TEST(wp < wp2 || wp2 < wp);
BOOST_TEST(!(wp < wp2 && wp2 < wp));
bool b1 = wp < wp2;
bool b2 = wp2 < wp;
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(wp2 < wp3 || wp3 < wp2);
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(wp4 < wp3 || wp3 < wp4);
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
sp.reset();
BOOST_TEST(b1 == (wp < wp2));
BOOST_TEST(b2 == (wp2 < wp));
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(wp2 < wp3 || wp3 < wp2);
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(wp4 < wp3 || wp3 < wp4);
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
sp2.reset();
BOOST_TEST(b1 == (wp < wp2));
BOOST_TEST(b2 == (wp2 < wp));
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(wp2 < wp3 || wp3 < wp2);
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(wp4 < wp3 || wp3 < wp4);
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
}
{
boost::shared_ptr<X> sp(new X);
boost::shared_ptr<X> sp2(sp);
boost::weak_ptr<X> wp(sp);
boost::weak_ptr<X> wp2(sp2);
BOOST_TEST(!(wp < wp2 || wp2 < wp));
BOOST_TEST(!(wp < wp2 && wp2 < wp));
bool b1 = wp < wp2;
bool b2 = wp2 < wp;
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(!(wp2 < wp3 || wp3 < wp2));
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(!(wp4 < wp3 || wp3 < wp4));
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
sp.reset();
sp2.reset();
BOOST_TEST(b1 == (wp < wp2));
BOOST_TEST(b2 == (wp2 < wp));
{
boost::weak_ptr<X> wp3(wp);
BOOST_TEST(!(wp < wp3 || wp3 < wp));
BOOST_TEST(!(wp < wp3 && wp3 < wp));
BOOST_TEST(!(wp2 < wp3 || wp3 < wp2));
BOOST_TEST(!(wp2 < wp3 && wp3 < wp2));
boost::weak_ptr<X> wp4(wp2);
BOOST_TEST(!(wp4 < wp3 || wp3 < wp4));
BOOST_TEST(!(wp4 < wp3 && wp3 < wp4));
}
}
{
boost::shared_ptr<X> spx(new X);
boost::shared_ptr<Y> spy(new Y);
boost::shared_ptr<Z> spz(new Z);
boost::weak_ptr<X> px(spx);
boost::weak_ptr<Y> py(spy);
boost::weak_ptr<Z> pz(spz);
BOOST_TEST(px < py || py < px);
BOOST_TEST(px < pz || pz < px);
BOOST_TEST(py < pz || pz < py);
BOOST_TEST(!(px < py && py < px));
BOOST_TEST(!(px < pz && pz < px));
BOOST_TEST(!(py < pz && pz < py));
boost::weak_ptr<void> pvx(px);
BOOST_TEST(!(pvx < pvx));
boost::weak_ptr<void> pvy(py);
BOOST_TEST(!(pvy < pvy));
boost::weak_ptr<void> pvz(pz);
BOOST_TEST(!(pvz < pvz));
BOOST_TEST(pvx < pvy || pvy < pvx);
BOOST_TEST(pvx < pvz || pvz < pvx);
BOOST_TEST(pvy < pvz || pvz < pvy);
BOOST_TEST(!(pvx < pvy && pvy < pvx));
BOOST_TEST(!(pvx < pvz && pvz < pvx));
BOOST_TEST(!(pvy < pvz && pvz < pvy));
spx.reset();
spy.reset();
spz.reset();
BOOST_TEST(px < py || py < px);
BOOST_TEST(px < pz || pz < px);
BOOST_TEST(py < pz || pz < py);
BOOST_TEST(!(px < py && py < px));
BOOST_TEST(!(px < pz && pz < px));
BOOST_TEST(!(py < pz && pz < py));
BOOST_TEST(!(pvx < pvx));
BOOST_TEST(!(pvy < pvy));
BOOST_TEST(!(pvz < pvz));
BOOST_TEST(pvx < pvy || pvy < pvx);
BOOST_TEST(pvx < pvz || pvz < pvx);
BOOST_TEST(pvy < pvz || pvz < pvy);
BOOST_TEST(!(pvx < pvy && pvy < pvx));
BOOST_TEST(!(pvx < pvz && pvz < pvx));
BOOST_TEST(!(pvy < pvz && pvz < pvy));
}
{
boost::shared_ptr<Z> spz(new Z);
boost::shared_ptr<X> spx(spz);
boost::weak_ptr<Z> pz(spz);
boost::weak_ptr<X> px(spx);
boost::weak_ptr<Y> py(spz);
BOOST_TEST(!(px < px));
BOOST_TEST(!(py < py));
BOOST_TEST(!(px < py || py < px));
BOOST_TEST(!(px < pz || pz < px));
BOOST_TEST(!(py < pz || pz < py));
boost::weak_ptr<void> pvx(px);
boost::weak_ptr<void> pvy(py);
boost::weak_ptr<void> pvz(pz);
BOOST_TEST(!(pvx < pvy || pvy < pvx));
BOOST_TEST(!(pvx < pvz || pvz < pvx));
BOOST_TEST(!(pvy < pvz || pvz < pvy));
spx.reset();
spz.reset();
BOOST_TEST(!(px < px));
BOOST_TEST(!(py < py));
BOOST_TEST(!(px < py || py < px));
BOOST_TEST(!(px < pz || pz < px));
BOOST_TEST(!(py < pz || pz < py));
BOOST_TEST(!(pvx < pvy || pvy < pvx));
BOOST_TEST(!(pvx < pvz || pvz < pvx));
BOOST_TEST(!(pvy < pvz || pvz < pvy));
}
}
} // namespace n_comparison
namespace n_lock
{
void test()
{
}
} // namespace n_lock
namespace n_map
{
void test()
{
std::vector< boost::shared_ptr<int> > vi;
{
boost::shared_ptr<int> pi1(new int);
boost::shared_ptr<int> pi2(new int);
boost::shared_ptr<int> pi3(new int);
vi.push_back(pi1);
vi.push_back(pi1);
vi.push_back(pi1);
vi.push_back(pi2);
vi.push_back(pi1);
vi.push_back(pi2);
vi.push_back(pi1);
vi.push_back(pi3);
vi.push_back(pi3);
vi.push_back(pi2);
vi.push_back(pi1);
}
std::vector< boost::shared_ptr<X> > vx;
{
boost::shared_ptr<X> px1(new X);
boost::shared_ptr<X> px2(new X);
boost::shared_ptr<X> px3(new X);
vx.push_back(px2);
vx.push_back(px2);
vx.push_back(px1);
vx.push_back(px2);
vx.push_back(px1);
vx.push_back(px1);
vx.push_back(px1);
vx.push_back(px2);
vx.push_back(px1);
vx.push_back(px3);
vx.push_back(px2);
}
std::map< boost::weak_ptr<void>, long > m;
{
for(std::vector< boost::shared_ptr<int> >::iterator i = vi.begin(); i != vi.end(); ++i)
{
++m[*i];
}
}
{
for(std::vector< boost::shared_ptr<X> >::iterator i = vx.begin(); i != vx.end(); ++i)
{
++m[*i];
}
}
{
for(std::map< boost::weak_ptr<void>, long >::iterator i = m.begin(); i != m.end(); ++i)
{
BOOST_TEST(i->first.use_count() == i->second);
}
}
}
} // namespace n_map
int main()
{
n_element_type::test();
n_constructors::test();
n_assignment::test();
n_reset::test();
n_use_count::test();
n_swap::test();
n_comparison::test();
n_lock::test();
n_map::test();
return boost::report_errors();
}
class incomplete
{
};
boost::shared_ptr<incomplete> create_incomplete()
{
boost::shared_ptr<incomplete> px(new incomplete);
return px;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -