diff options
Diffstat (limited to 'libs/intrusive/test/pointer_traits_test.cpp')
-rw-r--r-- | libs/intrusive/test/pointer_traits_test.cpp | 103 |
1 files changed, 53 insertions, 50 deletions
diff --git a/libs/intrusive/test/pointer_traits_test.cpp b/libs/intrusive/test/pointer_traits_test.cpp index 8c70fcb3b..1455e8730 100644 --- a/libs/intrusive/test/pointer_traits_test.cpp +++ b/libs/intrusive/test/pointer_traits_test.cpp @@ -10,6 +10,28 @@ #include <boost/intrusive/detail/mpl.hpp> #include <boost/static_assert.hpp> #include <boost/intrusive/pointer_traits.hpp> +#include <boost/core/lightweight_test.hpp> + +struct CompleteSmartPtrStats +{ + static unsigned static_cast_called; + static unsigned dynamic_cast_called; + static unsigned const_cast_called; + static unsigned pointer_to_called; + + static void reset_stats() + { + static_cast_called = 0; + dynamic_cast_called = 0; + const_cast_called = 0; + pointer_to_called = 0; + } +}; + +unsigned CompleteSmartPtrStats::static_cast_called= 0; +unsigned CompleteSmartPtrStats::dynamic_cast_called = 0; +unsigned CompleteSmartPtrStats::const_cast_called = 0; +unsigned CompleteSmartPtrStats::pointer_to_called = 0; template<class T> class CompleteSmartPtr @@ -18,7 +40,6 @@ class CompleteSmartPtr friend class CompleteSmartPtr; public: - #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) template <class U> using rebind = CompleteSmartPtr<U>; #else @@ -44,7 +65,7 @@ class CompleteSmartPtr { this->ptr_ = c.ptr_; } static CompleteSmartPtr pointer_to(T &r) - { return CompleteSmartPtr(r); } + { ++CompleteSmartPtrStats::pointer_to_called; return CompleteSmartPtr(r); } T * operator->() const { return ptr_; } @@ -54,15 +75,15 @@ class CompleteSmartPtr template<class U> static CompleteSmartPtr static_cast_from(const CompleteSmartPtr<U> &uptr) - { return CompleteSmartPtr(*static_cast<element_type*>(uptr.ptr_)); } + { ++CompleteSmartPtrStats::static_cast_called; return CompleteSmartPtr(*static_cast<element_type*>(uptr.ptr_)); } template<class U> static CompleteSmartPtr const_cast_from(const CompleteSmartPtr<U> &uptr) - { return CompleteSmartPtr(*const_cast<element_type*>(uptr.ptr_)); } + { ++CompleteSmartPtrStats::const_cast_called; return CompleteSmartPtr(*const_cast<element_type*>(uptr.ptr_)); } template<class U> static CompleteSmartPtr dynamic_cast_from(const CompleteSmartPtr<U> &uptr) - { return CompleteSmartPtr(*dynamic_cast<element_type*>(uptr.ptr_)); } + { ++CompleteSmartPtrStats::dynamic_cast_called; return CompleteSmartPtr(*dynamic_cast<element_type*>(uptr.ptr_)); } friend bool operator ==(const CompleteSmartPtr &l, const CompleteSmartPtr &r) { return l.ptr_ == r.ptr_; } @@ -128,18 +149,10 @@ int main() BOOST_STATIC_ASSERT(( boost::intrusive::detail::is_same<boost::intrusive::pointer_traits <int*>::rebind_pointer<double>::type , double*>::value )); - if(boost::intrusive::pointer_traits<int*>::pointer_to(dummy) != &dummy){ - return 1; - } - if(boost::intrusive::pointer_traits<D*>::static_cast_from((B*)0)){ - return 1; - } - if(boost::intrusive::pointer_traits<D*>::const_cast_from((const D*)0)){ - return 1; - } - if(boost::intrusive::pointer_traits<DD*>::dynamic_cast_from((B*)0)){ - return 1; - } + BOOST_TEST(boost::intrusive::pointer_traits<int*>::pointer_to(dummy) == &dummy); + BOOST_TEST(boost::intrusive::pointer_traits<D*>:: static_cast_from((B*)0) == 0); + BOOST_TEST(boost::intrusive::pointer_traits<D*>:: const_cast_from((const D*)0) == 0); + BOOST_TEST(boost::intrusive::pointer_traits<DD*>:: dynamic_cast_from((B*)0) == 0); //Complete smart pointer BOOST_STATIC_ASSERT(( boost::intrusive::detail::is_same<boost::intrusive::pointer_traits @@ -151,22 +164,22 @@ int main() BOOST_STATIC_ASSERT(( boost::intrusive::detail::is_same<boost::intrusive::pointer_traits < CompleteSmartPtr<int> >::rebind_pointer<double>::type , CompleteSmartPtr<double> >::value )); - if(boost::intrusive::pointer_traits< CompleteSmartPtr<int> > - ::pointer_to(dummy) != CompleteSmartPtr<int>(dummy)){ - return 1; - } - if(boost::intrusive::pointer_traits< CompleteSmartPtr<D> >:: - static_cast_from(CompleteSmartPtr<B>()) != CompleteSmartPtr<D>()){ - return 1; - } - if(boost::intrusive::pointer_traits< CompleteSmartPtr<D> >:: - const_cast_from(CompleteSmartPtr<const D>()) != CompleteSmartPtr<D>()){ - return 1; - } - if(boost::intrusive::pointer_traits< CompleteSmartPtr<DD> >:: - dynamic_cast_from(CompleteSmartPtr<B>()) != CompleteSmartPtr<DD>()){ - return 1; - } + //pointer_to + CompleteSmartPtrStats::reset_stats(); + BOOST_TEST(boost::intrusive::pointer_traits< CompleteSmartPtr<int> >::pointer_to(dummy) == CompleteSmartPtr<int>(dummy)); + BOOST_TEST(CompleteSmartPtrStats::pointer_to_called == 1); + //static_cast_from + CompleteSmartPtrStats::reset_stats(); + BOOST_TEST(boost::intrusive::pointer_traits< CompleteSmartPtr<D> >::static_cast_from(CompleteSmartPtr<B>()) == CompleteSmartPtr<D>()); + BOOST_TEST(CompleteSmartPtrStats::static_cast_called == 1); + //const_cast_from + CompleteSmartPtrStats::reset_stats(); + BOOST_TEST(boost::intrusive::pointer_traits< CompleteSmartPtr<D> >::const_cast_from(CompleteSmartPtr<const D>()) == CompleteSmartPtr<D>()); + BOOST_TEST(CompleteSmartPtrStats::const_cast_called == 1); + //dynamic_cast_from + CompleteSmartPtrStats::reset_stats(); + BOOST_TEST(boost::intrusive::pointer_traits< CompleteSmartPtr<DD> >::dynamic_cast_from(CompleteSmartPtr<B>()) == CompleteSmartPtr<DD>()); + BOOST_TEST(CompleteSmartPtrStats::dynamic_cast_called == 1); //Simple smart pointer BOOST_STATIC_ASSERT(( boost::intrusive::detail::is_same<boost::intrusive::pointer_traits @@ -178,21 +191,11 @@ int main() BOOST_STATIC_ASSERT(( boost::intrusive::detail::is_same<boost::intrusive::pointer_traits < SimpleSmartPtr<int> >::rebind_pointer<double>::type , SimpleSmartPtr<double> >::value )); - if(boost::intrusive::pointer_traits< SimpleSmartPtr<int> > - ::pointer_to(dummy) != SimpleSmartPtr<int>(&dummy)){ - return 1; - } - if(boost::intrusive::pointer_traits< SimpleSmartPtr<D> >:: - static_cast_from(SimpleSmartPtr<B>()) != SimpleSmartPtr<D>()){ - return 1; - } - if(boost::intrusive::pointer_traits< SimpleSmartPtr<D> >:: - const_cast_from(SimpleSmartPtr<const D>()) != SimpleSmartPtr<D>()){ - return 1; - } - if(boost::intrusive::pointer_traits< SimpleSmartPtr<DD> >:: - dynamic_cast_from(SimpleSmartPtr<B>()) != SimpleSmartPtr<DD>()){ - return 1; - } - return 0; + + BOOST_TEST(boost::intrusive::pointer_traits< SimpleSmartPtr<int> >::pointer_to(dummy) == SimpleSmartPtr<int>(&dummy)); + BOOST_TEST(boost::intrusive::pointer_traits< SimpleSmartPtr<D> > ::static_cast_from(SimpleSmartPtr<B>()) == SimpleSmartPtr<D>()); + BOOST_TEST(boost::intrusive::pointer_traits< SimpleSmartPtr<D> > ::const_cast_from(SimpleSmartPtr<const D>()) == SimpleSmartPtr<D>()); + BOOST_TEST(boost::intrusive::pointer_traits< SimpleSmartPtr<DD> >::dynamic_cast_from(SimpleSmartPtr<B>()) == SimpleSmartPtr<DD>()); + + return boost::report_errors(); } |