X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2Fintrusive_refcount.test.cc;h=ca05e18437d378341c30235dd141edf830f39162;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=ab547a9b70e2fb6d3c90119d90b00be493c86911;hpb=31d85cd6b8e03c5ecc924ca8892906be1bab702f;p=senf.git diff --git a/Utils/intrusive_refcount.test.cc b/Utils/intrusive_refcount.test.cc index ab547a9..ca05e18 100644 --- a/Utils/intrusive_refcount.test.cc +++ b/Utils/intrusive_refcount.test.cc @@ -48,6 +48,25 @@ namespace { }; unsigned Tester::counter = 0; + + struct TesterCustom + : public senf::intrusive_refcount_t + { + typedef boost::intrusive_ptr ptr; + typedef senf::intrusive_refcount_t super; + + TesterCustom() { ++counter; } + ~TesterCustom() { --counter; } + + void add_ref() { super::add_ref(); ++refs; } + bool release() { --refs; super::release(); return false; } + + static unsigned counter; + static unsigned refs; + }; + + unsigned TesterCustom::counter = 0; + unsigned TesterCustom::refs = 0; } BOOST_AUTO_UNIT_TEST(intrusive_refcount) @@ -74,6 +93,42 @@ BOOST_AUTO_UNIT_TEST(intrusive_refcount) BOOST_CHECK_EQUAL(Tester::counter,0u); } +BOOST_AUTO_UNIT_TEST(intrusive_refcount_t) +{ + BOOST_CHECK_EQUAL(TesterCustom::counter,0u); + BOOST_CHECK_EQUAL(TesterCustom::refs,0u); + + TesterCustom::ptr p (new TesterCustom); + BOOST_CHECK_EQUAL(TesterCustom::counter,1u); + BOOST_CHECK_EQUAL(p->refcount(),1u); + BOOST_CHECK_EQUAL(p->is_shared(),false); + BOOST_CHECK_EQUAL(TesterCustom::refs,1u); + + + { + TesterCustom::ptr pp (p); + BOOST_CHECK_EQUAL(TesterCustom::counter,1u); + BOOST_CHECK_EQUAL(p->refcount(),2u); + BOOST_CHECK_EQUAL(p->is_shared(),true); + BOOST_CHECK_EQUAL(TesterCustom::refs,2u); + } + + BOOST_CHECK_EQUAL(TesterCustom::counter,1u); + BOOST_CHECK_EQUAL(p->refcount(),1u); + BOOST_CHECK_EQUAL(p->is_shared(),false); + BOOST_CHECK_EQUAL(TesterCustom::refs,1u); + + { + TesterCustom * pp (p.get()); + p = 0; + BOOST_CHECK_EQUAL(TesterCustom::counter,1u); + BOOST_CHECK_EQUAL(TesterCustom::refs,0u); + // The TesterCustom leaks ... + delete pp; + BOOST_CHECK_EQUAL(TesterCustom::counter,0u); + } +} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ @@ -85,4 +140,5 @@ BOOST_AUTO_UNIT_TEST(intrusive_refcount) // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" +// comment-column: 40 // End: