summaryrefslogtreecommitdiff
path: root/libs/intrusive/test/pointer_traits_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/intrusive/test/pointer_traits_test.cpp')
-rw-r--r--libs/intrusive/test/pointer_traits_test.cpp103
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();
}