⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weak_ptr_test.cpp

📁 boost库提供标准的C++ API 配合dev c++使用,功能更加强大
💻 CPP
📖 第 1 页 / 共 3 页
字号:

        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 + -