forked from boostorg/intrusive
Changes to correct regression tests for intel-win-9.1 & cw-9.4
[SVN r37675]
This commit is contained in:
@@ -2410,7 +2410,7 @@ helpful discussions.
|
||||
|
||||
* [*Jaap Suter] for the initial hint, which eventually leads to the member value_traits.
|
||||
|
||||
[*Ion Gaztañaga] would like to thank:
|
||||
[*Ion Gaztanaga] would like to thank:
|
||||
|
||||
* [*Olaf Krzikalla] for the permission to continue his great work.
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -34,6 +34,8 @@ class MyClass : public set_base_hook<>
|
||||
{ return a.get() < b.get(); }
|
||||
friend bool operator> (const MyClass &a, const MyClass &b)
|
||||
{ return a.get() > b.get(); }
|
||||
friend bool operator== (const MyClass &a, const MyClass &b)
|
||||
{ return a.get() < b.get(); }
|
||||
};
|
||||
|
||||
//Define an set that will store MyClass
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -107,4 +107,3 @@ int main()
|
||||
return 0;
|
||||
}
|
||||
//]
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2007
|
||||
// (C) Copyright Ion Gaztanaga 2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
@@ -172,7 +172,7 @@
|
||||
RelativePath="..\..\..\..\..\boost\intrusive\detail\hashtable_node.hpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\..\boost\intrusive\detail\pointed_node.hpp">
|
||||
RelativePath="..\..\..\..\..\boost\intrusive\detail\list_node.hpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\..\..\boost\intrusive\detail\parent_from_member.hpp">
|
||||
@@ -277,6 +277,9 @@
|
||||
<File
|
||||
RelativePath="..\..\..\example\doc_window.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\example\Jamfile.v2">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="perf"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -13,6 +13,8 @@
|
||||
#ifndef BOOST_INTRUSIVE_TEST_COMMON_FUNCTORS_HPP
|
||||
#define BOOST_INTRUSIVE_TEST_COMMON_FUNCTORS_HPP
|
||||
|
||||
#include<boost/intrusive/detail/utilities.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace intrusive {
|
||||
namespace test {
|
||||
@@ -23,8 +25,7 @@ public:
|
||||
template <class Pointer>
|
||||
void operator()(Pointer p)
|
||||
{
|
||||
using boost::get_pointer;
|
||||
delete get_pointer(p);
|
||||
delete detail::get_pointer(p);
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -13,17 +13,11 @@
|
||||
#ifndef BOOST_INTRUSIVE_ITESTVALUE
|
||||
#define BOOST_INTRUSIVE_ITESTVALUE
|
||||
|
||||
#ifdef _MSC_VER
|
||||
//#pragma warning(disable : 4584)
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
#include <boost/intrusive/set.hpp>
|
||||
#include <boost/intrusive/list.hpp>
|
||||
#include <boost/intrusive/slist.hpp>
|
||||
#include <boost/intrusive/unordered_set.hpp>
|
||||
#include <boost/intrusive/detail/pointer_to_other.hpp>
|
||||
#include <boost/functional/hash.hpp>
|
||||
#include <boost/intrusive/set_hook.hpp>
|
||||
#include <boost/intrusive/list_hook.hpp>
|
||||
#include <boost/intrusive/slist_hook.hpp>
|
||||
#include <boost/intrusive/unordered_set_hook.hpp>
|
||||
#include "smart_ptr.hpp"
|
||||
|
||||
namespace boost{
|
||||
@@ -40,46 +34,39 @@ struct testvalue
|
||||
, slist_base_hook<tag, safe_link, VoidPointer>
|
||||
, slist_base_hook<tag, auto_unlink, VoidPointer>
|
||||
{
|
||||
typedef set_base_hook<tag, auto_unlink, VoidPointer> set_auto_base_hook;
|
||||
typedef set_base_hook<tag, safe_link, VoidPointer>set_base_hook;
|
||||
typedef set_member_hook<auto_unlink, VoidPointer> set_auto_member_hook;
|
||||
typedef set_member_hook<safe_link, VoidPointer> set_member_hook;
|
||||
typedef set_base_hook<tag, auto_unlink, VoidPointer> set_auto_base_hook_t;
|
||||
typedef set_base_hook<tag, safe_link, VoidPointer> set_base_hook_t;
|
||||
typedef set_member_hook<auto_unlink, VoidPointer> set_auto_member_hook_t;
|
||||
typedef set_member_hook<safe_link, VoidPointer> set_member_hook_t;
|
||||
|
||||
typedef unordered_set_base_hook<tag, auto_unlink, VoidPointer> unordered_set_auto_base_hook;
|
||||
typedef unordered_set_base_hook<tag, safe_link, VoidPointer> unordered_set_base_hook;
|
||||
typedef unordered_set_member_hook<auto_unlink, VoidPointer> unordered_set_auto_member_hook;
|
||||
typedef unordered_set_member_hook<safe_link, VoidPointer> unordered_set_member_hook;
|
||||
typedef unordered_set_base_hook<tag, auto_unlink, VoidPointer> unordered_set_auto_base_hook_t;
|
||||
typedef unordered_set_base_hook<tag, safe_link, VoidPointer> unordered_set_base_hook_t;
|
||||
typedef unordered_set_member_hook<auto_unlink, VoidPointer> unordered_set_auto_member_hook_t;
|
||||
typedef unordered_set_member_hook<safe_link, VoidPointer> unordered_set_member_hook_t;
|
||||
|
||||
typedef list_base_hook<tag, auto_unlink, VoidPointer> list_auto_base_hook;
|
||||
typedef list_base_hook<tag, safe_link, VoidPointer> list_base_hook;
|
||||
typedef list_member_hook<auto_unlink, VoidPointer> list_auto_member_hook;
|
||||
typedef list_member_hook<safe_link, VoidPointer> list_member_hook;
|
||||
typedef list_base_hook<tag, auto_unlink, VoidPointer> list_auto_base_hook_t;
|
||||
typedef list_base_hook<tag, safe_link, VoidPointer> list_base_hook_t;
|
||||
typedef list_member_hook<auto_unlink, VoidPointer> list_auto_member_hook_t;
|
||||
typedef list_member_hook<safe_link, VoidPointer> list_member_hook_t;
|
||||
|
||||
typedef slist_base_hook<tag, auto_unlink, VoidPointer> slist_auto_base_hook;
|
||||
typedef slist_base_hook<tag, safe_link, VoidPointer> slist_base_hook;
|
||||
typedef slist_member_hook<auto_unlink, VoidPointer> slist_auto_member_hook;
|
||||
typedef slist_member_hook<safe_link, VoidPointer> slist_member_hook;
|
||||
|
||||
typedef typename boost::pointer_to_other
|
||||
<VoidPointer, testvalue>::type pointer;
|
||||
typedef slist_base_hook<tag, auto_unlink, VoidPointer> slist_auto_base_hook_t;
|
||||
typedef slist_base_hook<tag, safe_link, VoidPointer> slist_base_hook_t;
|
||||
typedef slist_member_hook<auto_unlink, VoidPointer> slist_auto_member_hook_t;
|
||||
typedef slist_member_hook<safe_link, VoidPointer> slist_member_hook_t;
|
||||
|
||||
//Set members
|
||||
//pointer set_parent_, set_left_, set_right_;
|
||||
//int set_color_;
|
||||
set_member_hook set_node_;
|
||||
set_auto_member_hook set_auto_node_;
|
||||
unordered_set_member_hook unordered_set_node_;
|
||||
unordered_set_auto_member_hook unordered_set_auto_node_;
|
||||
set_member_hook_t set_node_;
|
||||
set_auto_member_hook_t set_auto_node_;
|
||||
unordered_set_member_hook_t unordered_set_node_;
|
||||
unordered_set_auto_member_hook_t unordered_set_auto_node_;
|
||||
|
||||
//List members
|
||||
//pointer list_next_, list_prev_;
|
||||
list_member_hook list_node_;
|
||||
list_auto_member_hook list_auto_node_;
|
||||
list_member_hook_t list_node_;
|
||||
list_auto_member_hook_t list_auto_node_;
|
||||
|
||||
//Slist members
|
||||
//pointer slist_next_;
|
||||
slist_member_hook slist_node_;
|
||||
slist_auto_member_hook slist_auto_node_;
|
||||
slist_member_hook_t slist_node_;
|
||||
slist_auto_member_hook_t slist_auto_node_;
|
||||
|
||||
int value_;
|
||||
|
||||
@@ -101,24 +88,24 @@ struct testvalue
|
||||
|
||||
testvalue & operator= (const testvalue& src)
|
||||
{
|
||||
set_base_hook::operator=(src);
|
||||
set_base_hook_t::operator=(src);
|
||||
this->set_node_ = src.set_node_;
|
||||
set_auto_base_hook::operator=(src);
|
||||
set_auto_base_hook_t::operator=(src);
|
||||
this->set_auto_node_ = src.set_auto_node_;
|
||||
|
||||
unordered_set_base_hook::operator=(src);
|
||||
unordered_set_base_hook_t::operator=(src);
|
||||
this->unordered_set_node_ = src.unordered_set_node_;
|
||||
unordered_set_auto_base_hook::operator=(src);
|
||||
unordered_set_auto_base_hook_t::operator=(src);
|
||||
this->unordered_set_auto_node_ = src.unordered_set_auto_node_;
|
||||
|
||||
list_base_hook::operator=(src);
|
||||
list_base_hook_t::operator=(src);
|
||||
this->list_node_ = src.list_node_;
|
||||
list_auto_base_hook::operator=(src);
|
||||
list_auto_base_hook_t::operator=(src);
|
||||
this->list_auto_node_ = src.list_auto_node_;
|
||||
|
||||
slist_base_hook::operator=(src);
|
||||
slist_base_hook_t::operator=(src);
|
||||
this->slist_node_ = src.slist_node_;
|
||||
slist_auto_base_hook::operator=(src);
|
||||
slist_auto_base_hook_t::operator=(src);
|
||||
this->slist_auto_node_ = src.slist_auto_node_;
|
||||
value_ = src.value_;
|
||||
return *this;
|
||||
@@ -131,15 +118,15 @@ struct testvalue
|
||||
//...
|
||||
|
||||
//List
|
||||
list_base_hook::swap_nodes(other);
|
||||
list_base_hook_t::swap_nodes(other);
|
||||
list_node_.swap_nodes(other.list_node_);
|
||||
list_auto_base_hook::swap_nodes(other);
|
||||
list_auto_base_hook_t::swap_nodes(other);
|
||||
list_auto_node_.swap_nodes(other.list_auto_node_);
|
||||
|
||||
//Slist
|
||||
slist_base_hook::swap_nodes(other);
|
||||
slist_base_hook_t::swap_nodes(other);
|
||||
slist_node_.swap_nodes(other.slist_node_);
|
||||
slist_auto_base_hook::swap_nodes(other);
|
||||
slist_auto_base_hook_t::swap_nodes(other);
|
||||
slist_auto_node_.swap_nodes(other.slist_auto_node_);
|
||||
}
|
||||
|
||||
@@ -151,6 +138,18 @@ struct testvalue
|
||||
|
||||
bool operator==(const testvalue &other) const
|
||||
{ return value_ == other.value_; }
|
||||
|
||||
friend bool operator< (int other1, const testvalue &other2)
|
||||
{ return other1 < other2.value_; }
|
||||
|
||||
friend bool operator< (const testvalue &other1, int other2)
|
||||
{ return other1.value_ < other2; }
|
||||
|
||||
friend bool operator== (int other1, const testvalue &other2)
|
||||
{ return other1 == other2.value_; }
|
||||
|
||||
friend bool operator== (const testvalue &other1, int other2)
|
||||
{ return other1.value_ == other2; }
|
||||
};
|
||||
|
||||
template<class VoidPointer, bool ConstantTimeSize>
|
||||
@@ -185,151 +184,151 @@ typedef testvalue<void *, true> value_r_t;
|
||||
typedef testvalue<smart_ptr<void>, true> value_s_t;
|
||||
|
||||
//Typedefs
|
||||
typedef value_r_f::set_base_hook::
|
||||
typedef value_r_f::set_base_hook_t::
|
||||
value_traits<value_r_f > set_base_raw;
|
||||
|
||||
typedef value_r_f::set_member_hook::
|
||||
typedef value_r_f::set_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::set_node_> set_member_raw;
|
||||
|
||||
typedef value_r_f::set_auto_base_hook::
|
||||
typedef value_r_f::set_auto_base_hook_t::
|
||||
value_traits<value_r_f> set_auto_base_raw;
|
||||
|
||||
typedef value_r_f::set_auto_member_hook::
|
||||
typedef value_r_f::set_auto_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::set_auto_node_> set_auto_member_raw;
|
||||
|
||||
|
||||
typedef value_s_f::set_base_hook::
|
||||
typedef value_s_f::set_base_hook_t::
|
||||
value_traits<value_s_f > set_base_smart;
|
||||
|
||||
typedef value_s_f::set_member_hook::
|
||||
typedef value_s_f::set_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::set_node_> set_member_smart;
|
||||
|
||||
typedef value_s_f::set_auto_base_hook::
|
||||
typedef value_s_f::set_auto_base_hook_t::
|
||||
value_traits<value_s_f> set_auto_base_smart;
|
||||
|
||||
typedef value_s_f::set_auto_member_hook::
|
||||
typedef value_s_f::set_auto_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::set_auto_node_> set_auto_member_smart;
|
||||
|
||||
typedef value_r_t::set_base_hook::
|
||||
typedef value_r_t::set_base_hook_t::
|
||||
value_traits<value_r_t > set_base_raw_t;
|
||||
|
||||
typedef value_r_t::set_member_hook::
|
||||
typedef value_r_t::set_member_hook_t::
|
||||
value_traits<value_r_t, &value_r_t::set_node_> set_member_raw_t;
|
||||
|
||||
typedef value_s_t::set_base_hook::
|
||||
typedef value_s_t::set_base_hook_t::
|
||||
value_traits<value_s_t > set_base_smart_t;
|
||||
|
||||
typedef value_s_t::set_member_hook::
|
||||
typedef value_s_t::set_member_hook_t::
|
||||
value_traits<value_s_t, &value_s_t::set_node_> set_member_smart_t;
|
||||
|
||||
//Typedefs
|
||||
typedef value_r_f::unordered_set_base_hook::
|
||||
typedef value_r_f::unordered_set_base_hook_t::
|
||||
value_traits<value_r_f > unordered_set_base_raw;
|
||||
|
||||
typedef value_r_f::unordered_set_member_hook::
|
||||
typedef value_r_f::unordered_set_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::unordered_set_node_> unordered_set_member_raw;
|
||||
|
||||
typedef value_r_f::unordered_set_auto_base_hook::
|
||||
typedef value_r_f::unordered_set_auto_base_hook_t::
|
||||
value_traits<value_r_f> unordered_set_auto_base_raw;
|
||||
|
||||
typedef value_r_f::unordered_set_auto_member_hook::
|
||||
typedef value_r_f::unordered_set_auto_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::unordered_set_auto_node_> unordered_set_auto_member_raw;
|
||||
|
||||
typedef value_s_f::unordered_set_base_hook::
|
||||
typedef value_s_f::unordered_set_base_hook_t::
|
||||
value_traits<value_s_f > unordered_set_base_smart;
|
||||
|
||||
typedef value_s_f::unordered_set_member_hook::
|
||||
typedef value_s_f::unordered_set_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::unordered_set_node_> unordered_set_member_smart;
|
||||
|
||||
typedef value_s_f::unordered_set_auto_base_hook::
|
||||
typedef value_s_f::unordered_set_auto_base_hook_t::
|
||||
value_traits<value_s_f> unordered_set_auto_base_smart;
|
||||
|
||||
typedef value_s_f::unordered_set_auto_member_hook::
|
||||
typedef value_s_f::unordered_set_auto_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::unordered_set_auto_node_> unordered_set_auto_member_smart;
|
||||
|
||||
typedef value_r_t::unordered_set_base_hook::
|
||||
typedef value_r_t::unordered_set_base_hook_t::
|
||||
value_traits<value_r_t > unordered_set_base_raw_t;
|
||||
|
||||
typedef value_r_t::unordered_set_member_hook::
|
||||
typedef value_r_t::unordered_set_member_hook_t::
|
||||
value_traits<value_r_t, &value_r_t::unordered_set_node_> unordered_set_member_raw_t;
|
||||
|
||||
typedef value_s_t::unordered_set_base_hook::
|
||||
typedef value_s_t::unordered_set_base_hook_t::
|
||||
value_traits<value_s_t > unordered_set_base_smart_t;
|
||||
|
||||
typedef value_s_t::unordered_set_member_hook::
|
||||
typedef value_s_t::unordered_set_member_hook_t::
|
||||
value_traits<value_s_t, &value_s_t::unordered_set_node_> unordered_set_member_smart_t;
|
||||
|
||||
//Explicit instantiations
|
||||
typedef value_r_f::list_base_hook::
|
||||
typedef value_r_f::list_base_hook_t::
|
||||
value_traits<value_r_f> list_base_raw;
|
||||
|
||||
typedef value_r_f::list_member_hook::
|
||||
typedef value_r_f::list_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::list_node_> list_member_raw;
|
||||
|
||||
typedef value_r_f::list_auto_base_hook::
|
||||
typedef value_r_f::list_auto_base_hook_t::
|
||||
value_traits<value_r_f> list_auto_base_raw;
|
||||
|
||||
typedef value_r_f::list_auto_member_hook::
|
||||
typedef value_r_f::list_auto_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::list_auto_node_> list_auto_member_raw;
|
||||
|
||||
typedef value_s_f::list_base_hook::
|
||||
typedef value_s_f::list_base_hook_t::
|
||||
value_traits<value_s_f> list_base_smart;
|
||||
|
||||
typedef value_s_f::list_member_hook::
|
||||
typedef value_s_f::list_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::list_node_> list_member_smart;
|
||||
|
||||
typedef value_s_f::list_auto_base_hook::
|
||||
typedef value_s_f::list_auto_base_hook_t::
|
||||
value_traits<value_s_f> list_auto_base_smart;
|
||||
|
||||
typedef value_s_f::list_auto_member_hook::
|
||||
typedef value_s_f::list_auto_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::list_auto_node_> list_auto_member_smart;
|
||||
|
||||
typedef value_r_t::list_base_hook::
|
||||
typedef value_r_t::list_base_hook_t::
|
||||
value_traits<value_r_t> list_base_raw_t;
|
||||
|
||||
typedef value_r_t::list_member_hook::
|
||||
typedef value_r_t::list_member_hook_t::
|
||||
value_traits<value_r_t, &value_r_t::list_node_> list_member_raw_t;
|
||||
|
||||
typedef value_s_t::list_base_hook::
|
||||
typedef value_s_t::list_base_hook_t::
|
||||
value_traits<value_s_t> list_base_smart_t;
|
||||
|
||||
typedef value_s_t::list_member_hook::
|
||||
typedef value_s_t::list_member_hook_t::
|
||||
value_traits<value_s_t, &value_s_t::list_node_> list_member_smart_t;
|
||||
|
||||
typedef value_r_f::slist_base_hook::
|
||||
typedef value_r_f::slist_base_hook_t::
|
||||
value_traits<value_r_f> slist_base_raw;
|
||||
|
||||
typedef value_r_f::slist_member_hook::
|
||||
typedef value_r_f::slist_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::slist_node_> slist_member_raw;
|
||||
|
||||
typedef value_r_f::slist_auto_base_hook::
|
||||
typedef value_r_f::slist_auto_base_hook_t::
|
||||
value_traits<value_r_f> slist_auto_base_raw;
|
||||
|
||||
typedef value_r_f::slist_auto_member_hook::
|
||||
typedef value_r_f::slist_auto_member_hook_t::
|
||||
value_traits<value_r_f, &value_r_f::slist_auto_node_> slist_auto_member_raw;
|
||||
|
||||
typedef value_s_f::slist_base_hook::
|
||||
typedef value_s_f::slist_base_hook_t::
|
||||
value_traits<value_s_f> slist_base_smart;
|
||||
|
||||
typedef value_s_f::slist_member_hook::
|
||||
typedef value_s_f::slist_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::slist_node_> slist_member_smart;
|
||||
|
||||
typedef value_s_f::slist_auto_base_hook::
|
||||
typedef value_s_f::slist_auto_base_hook_t::
|
||||
value_traits<value_s_f> slist_auto_base_smart;
|
||||
|
||||
typedef value_s_f::slist_auto_member_hook::
|
||||
typedef value_s_f::slist_auto_member_hook_t::
|
||||
value_traits<value_s_f, &value_s_f::slist_auto_node_> slist_auto_member_smart;
|
||||
|
||||
typedef value_r_t::slist_base_hook::
|
||||
typedef value_r_t::slist_base_hook_t::
|
||||
value_traits<value_r_t> slist_base_raw_t;
|
||||
|
||||
typedef value_r_t::slist_member_hook::
|
||||
typedef value_r_t::slist_member_hook_t::
|
||||
value_traits<value_r_t, &value_r_t::slist_node_> slist_member_raw_t;
|
||||
|
||||
typedef value_s_t::slist_base_hook::
|
||||
typedef value_s_t::slist_base_hook_t::
|
||||
value_traits<value_s_t> slist_base_smart_t;
|
||||
|
||||
typedef value_s_t::slist_member_hook::
|
||||
typedef value_s_t::slist_member_hook_t::
|
||||
value_traits<value_s_t, &value_s_t::slist_node_> slist_member_smart_t;
|
||||
|
||||
} //namespace boost{
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -16,10 +16,8 @@
|
||||
#include "smart_ptr.hpp"
|
||||
#include "common_functors.hpp"
|
||||
#include <vector>
|
||||
#include <boost/intrusive/linking_policy.hpp>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -66,26 +64,26 @@ void test_list<ValueTraits>
|
||||
, std::size_t
|
||||
> list_type;
|
||||
list_type testlist;
|
||||
BOOST_CHECK (testlist.empty());
|
||||
BOOST_TEST (testlist.empty());
|
||||
|
||||
testlist.push_back (values[0]);
|
||||
BOOST_CHECK (testlist.size() == 1);
|
||||
BOOST_CHECK (&testlist.front() == &values[0]);
|
||||
BOOST_CHECK (&testlist.back() == &values[0]);
|
||||
BOOST_TEST (testlist.size() == 1);
|
||||
BOOST_TEST (&testlist.front() == &values[0]);
|
||||
BOOST_TEST (&testlist.back() == &values[0]);
|
||||
|
||||
testlist.push_front (values[1]);
|
||||
BOOST_CHECK (testlist.size() == 2);
|
||||
BOOST_CHECK (&testlist.front() == &values[1]);
|
||||
BOOST_CHECK (&testlist.back() == &values[0]);
|
||||
BOOST_TEST (testlist.size() == 2);
|
||||
BOOST_TEST (&testlist.front() == &values[1]);
|
||||
BOOST_TEST (&testlist.back() == &values[0]);
|
||||
|
||||
testlist.pop_back();
|
||||
BOOST_CHECK (testlist.size() == 1);
|
||||
BOOST_TEST (testlist.size() == 1);
|
||||
const list_type &const_testlist = testlist;
|
||||
BOOST_CHECK (&const_testlist.front() == &values[1]);
|
||||
BOOST_CHECK (&const_testlist.back() == &values[1]);
|
||||
BOOST_TEST (&const_testlist.front() == &values[1]);
|
||||
BOOST_TEST (&const_testlist.back() == &values[1]);
|
||||
|
||||
testlist.pop_front();
|
||||
BOOST_CHECK (testlist.empty());
|
||||
BOOST_TEST (testlist.empty());
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +93,7 @@ void test_list<ValueTraits>
|
||||
::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
std::vector<int> expected;
|
||||
typedef boost::intrusive::list
|
||||
< ValueTraits
|
||||
, ValueTraits::value_type::constant_time_size
|
||||
@@ -103,21 +101,16 @@ void test_list<ValueTraits>
|
||||
> list_type;
|
||||
list_type testlist(values.begin(), values.end());
|
||||
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
|
||||
|
||||
testlist.sort (even_odd());
|
||||
std::copy (testlist.rbegin(), testlist.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("53142"));
|
||||
{ int init_values [] = { 5, 3, 1, 4, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.rbegin() ); }
|
||||
|
||||
testlist.reverse();
|
||||
//test postincrement:
|
||||
for (BOOST_DEDUCED_TYPENAME list_type::iterator i =
|
||||
testlist.begin(), e = testlist.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("53142"));
|
||||
{ int init_values [] = { 5, 3, 1, 4, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
|
||||
}
|
||||
|
||||
//test: assign, insert, const_iterator, const_reverse_iterator, erase, iterator_to:
|
||||
@@ -126,7 +119,7 @@ void test_list<ValueTraits>
|
||||
::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
std::vector<int> expected;
|
||||
typedef boost::intrusive::list
|
||||
< ValueTraits
|
||||
, ValueTraits::value_type::constant_time_size
|
||||
@@ -136,29 +129,29 @@ void test_list<ValueTraits>
|
||||
testlist.assign (&values[0] + 2, &values[0] + 5);
|
||||
|
||||
const list_type& const_testlist = testlist;
|
||||
std::copy (const_testlist.begin(), const_testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("345"));
|
||||
{ int init_values [] = { 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME list_type::iterator i = ++testlist.begin();
|
||||
BOOST_CHECK (i->value_ == 4);
|
||||
typename list_type::iterator i = ++testlist.begin();
|
||||
BOOST_TEST (i->value_ == 4);
|
||||
|
||||
{
|
||||
typename list_type::const_iterator ci = typename list_type::iterator();
|
||||
//typename list_type::iterator i = typename list_type::const_iterator();
|
||||
}
|
||||
|
||||
testlist.insert (i, values[0]);
|
||||
std::copy (const_testlist.rbegin(), const_testlist.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("5413"));
|
||||
{ int init_values [] = { 5, 4, 1, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.rbegin() ); }
|
||||
|
||||
i = testlist.iterator_to (values[4]);
|
||||
BOOST_CHECK (&*i == &values[4]);
|
||||
BOOST_TEST (&*i == &values[4]);
|
||||
|
||||
i = testlist.erase (i);
|
||||
BOOST_CHECK (i == testlist.end());
|
||||
BOOST_TEST (i == testlist.end());
|
||||
|
||||
//test postincrement:
|
||||
for (BOOST_DEDUCED_TYPENAME list_type::const_iterator i =
|
||||
const_testlist.begin(), e = const_testlist.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("314"));
|
||||
{ int init_values [] = { 3, 1, 4 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
}
|
||||
|
||||
template<class ValueTraits>
|
||||
@@ -166,13 +159,13 @@ void test_list<ValueTraits>
|
||||
::test_shift(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::list
|
||||
< ValueTraits
|
||||
, ValueTraits::value_type::constant_time_size
|
||||
, std::size_t
|
||||
> list_type;
|
||||
list_type testlist;
|
||||
std::vector<int> expected;
|
||||
|
||||
const int num_values = (int)values.size();
|
||||
std::vector<int> expected_values(num_values);
|
||||
@@ -184,13 +177,7 @@ void test_list<ValueTraits>
|
||||
for(int j = 0; j < num_values; ++j){
|
||||
expected_values[(j + num_values - i%num_values) % num_values] = (j + 1);
|
||||
}
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
std::stringstream stream;
|
||||
std::copy (expected_values.begin(), expected_values.end(),
|
||||
std::ostream_iterator<testvalue_t> (stream));
|
||||
stream << std::ends;
|
||||
BOOST_CHECK (test_seq.is_equal (stream.str().c_str()));
|
||||
TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
|
||||
testlist.clear();
|
||||
}
|
||||
|
||||
@@ -201,13 +188,7 @@ void test_list<ValueTraits>
|
||||
for(int j = 0; j < num_values; ++j){
|
||||
expected_values[(j + i) % num_values] = (j + 1);
|
||||
}
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
std::stringstream stream;
|
||||
std::copy (expected_values.begin(), expected_values.end(),
|
||||
std::ostream_iterator<testvalue_t> (stream));
|
||||
stream << std::ends;
|
||||
BOOST_CHECK (test_seq.is_equal (stream.str().c_str()));
|
||||
TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
|
||||
testlist.clear();
|
||||
}
|
||||
}
|
||||
@@ -218,68 +199,59 @@ void test_list<ValueTraits>
|
||||
::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::list
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> list_type;
|
||||
|
||||
std::vector<int> expected;
|
||||
{
|
||||
list_type testlist1 (&values[0], &values[0] + 2);
|
||||
list_type testlist2;
|
||||
testlist2.insert (testlist2.end(), &values[0] + 2, &values[0] + 5);
|
||||
testlist1.swap (testlist2);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("345"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12"));
|
||||
|
||||
{ int init_values [] = { 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 1, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
|
||||
testlist2.splice (++testlist2.begin(), testlist1);
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("13452"));
|
||||
BOOST_CHECK (testlist1.empty());
|
||||
{ int init_values [] = { 1, 3, 4, 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
|
||||
BOOST_TEST (testlist1.empty());
|
||||
|
||||
testlist1.splice (testlist1.end(), testlist2, ++(++testlist2.begin()));
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("4"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1352"));
|
||||
{ int init_values [] = { 4 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
|
||||
{ int init_values [] = { 1, 3, 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
|
||||
testlist1.splice (testlist1.end(), testlist2,
|
||||
testlist2.begin(), ----testlist2.end());
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("413"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("52"));
|
||||
{ int init_values [] = { 4, 1, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
|
||||
testlist1.erase (testlist1.iterator_to(values[0]), testlist1.end());
|
||||
BOOST_CHECK (testlist1.size() == 1);
|
||||
BOOST_CHECK (&testlist1.front() == &values[3]);
|
||||
BOOST_TEST (testlist1.size() == 1);
|
||||
BOOST_TEST (&testlist1.front() == &values[3]);
|
||||
}
|
||||
{
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
list_type testlist1 (&values[0], &values[0] + 2);
|
||||
list_type testlist2 (&values[0] + 3, &values[0] + 5);
|
||||
|
||||
values[0].swap_nodes(values[2]);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("32"));
|
||||
{ int init_values [] = { 3, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
|
||||
values[2].swap_nodes(values[4]);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("52"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("43"));
|
||||
{ int init_values [] = { 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 4, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,7 +260,7 @@ void test_list<ValueTraits>
|
||||
::test_clone(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
std::vector<int> expected;
|
||||
typedef boost::intrusive::list
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -298,9 +270,9 @@ void test_list<ValueTraits>
|
||||
list_type testlist2;
|
||||
|
||||
testlist2.clone_from(testlist1, test::new_cloner(), test::delete_destroyer());
|
||||
BOOST_CHECK (testlist2 == testlist1);
|
||||
BOOST_TEST (testlist2 == testlist1);
|
||||
testlist2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testlist2.empty());
|
||||
BOOST_TEST (testlist2.empty());
|
||||
}
|
||||
|
||||
template<class VoidPointer, bool constant_time_size>
|
||||
@@ -314,10 +286,10 @@ class test_main_template
|
||||
for (int i = 0; i < 5; ++i)
|
||||
data[i].value_ = i + 1;
|
||||
|
||||
test_list <typename testvalue_t::list_base_hook::template
|
||||
test_list <typename testvalue_t::list_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_list <typename testvalue_t::list_member_hook::template
|
||||
test_list <typename testvalue_t::list_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::list_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -335,21 +307,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 5; ++i)
|
||||
data[i].value_ = i + 1;
|
||||
|
||||
test_list <typename testvalue_t::list_base_hook::template
|
||||
test_list <typename testvalue_t::list_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_list <typename testvalue_t::list_member_hook::template
|
||||
test_list <typename testvalue_t::list_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::list_node_> >::test_all(data);
|
||||
|
||||
test_list <typename testvalue_t::list_auto_base_hook::template
|
||||
test_list <typename testvalue_t::list_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_list <typename testvalue_t::list_auto_member_hook::template
|
||||
test_list <typename testvalue_t::list_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::list_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
//Explicit instantiations of non-counted classes
|
||||
template class boost::intrusive::list<list_base_raw, false>;
|
||||
template class boost::intrusive::list<list_member_raw, false>;
|
||||
@@ -365,12 +337,12 @@ template class boost::intrusive::list<list_base_raw_t, true>;
|
||||
template class boost::intrusive::list<list_member_raw_t, true>;
|
||||
template class boost::intrusive::list<list_base_smart_t, true>;
|
||||
template class boost::intrusive::list<list_member_smart_t, true>;
|
||||
|
||||
int test_main( int, char* [] )
|
||||
*/
|
||||
int main( int, char* [] )
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -16,11 +16,9 @@
|
||||
#include "itestvalue.hpp"
|
||||
#include "smart_ptr.hpp"
|
||||
#include "common_functors.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -78,21 +76,17 @@ template<class ValueTraits>
|
||||
void test_multiset<ValueTraits>::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef multiset
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> multiset_type;
|
||||
multiset_type testset1 (values.begin(), values.end());
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
testset1.clear();
|
||||
BOOST_CHECK (testset1.empty());
|
||||
BOOST_TEST (testset1.empty());
|
||||
|
||||
typedef multiset
|
||||
<ValueTraits
|
||||
@@ -100,11 +94,11 @@ void test_multiset<ValueTraits>::test_sort(std::vector<typename ValueTraits::val
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> multiset_type2;
|
||||
multiset_type2 testset2 (&values[0], &values[0] + 6);
|
||||
std::copy (testset2.rbegin(), testset2.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("531422"));
|
||||
BOOST_CHECK (testset2.begin()->value_ == 2);
|
||||
BOOST_CHECK (testset2.rbegin()->value_ == 5);
|
||||
{ int init_values [] = { 5, 3, 1, 4, 2, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.rbegin() ); }
|
||||
|
||||
BOOST_TEST (testset2.begin()->value_ == 2);
|
||||
BOOST_TEST (testset2.rbegin()->value_ == 5);
|
||||
}
|
||||
|
||||
//test: insert, const_iterator, const_reverse_iterator, erase, iterator_to:
|
||||
@@ -112,8 +106,6 @@ template<class ValueTraits>
|
||||
void test_multiset<ValueTraits>::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef multiset
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
@@ -122,31 +114,24 @@ void test_multiset<ValueTraits>::test_insert(std::vector<typename ValueTraits::v
|
||||
|
||||
multiset_type testset;
|
||||
testset.insert(&values[0] + 2, &values[0] + 5);
|
||||
{ int init_values [] = { 1, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset.begin() ); }
|
||||
|
||||
const multiset_type& const_testset = testset;
|
||||
std::copy (const_testset.begin(), const_testset.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("145"));
|
||||
|
||||
BOOST_DEDUCED_TYPENAME multiset_type::iterator i = testset.begin();
|
||||
BOOST_CHECK (i->value_ == 1);
|
||||
typename multiset_type::iterator i = testset.begin();
|
||||
BOOST_TEST (i->value_ == 1);
|
||||
|
||||
i = testset.insert (i, values[0]);
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
|
||||
std::copy (const_testset.rbegin(), const_testset.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("5431"));
|
||||
{ int init_values [] = { 5, 4, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset.rbegin() ); }
|
||||
|
||||
i = testset.iterator_to (values[2]);
|
||||
BOOST_CHECK (&*i == &values[2]);
|
||||
BOOST_TEST (&*i == &values[2]);
|
||||
testset.erase(i);
|
||||
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME multiset_type::const_iterator i = const_testset.begin(),
|
||||
e = const_testset.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("135"));
|
||||
{ int init_values [] = { 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset.begin() ); }
|
||||
}
|
||||
|
||||
//test: insert (seq-version), swap, erase (seq-version), size:
|
||||
@@ -154,7 +139,6 @@ template<class ValueTraits>
|
||||
void test_multiset<ValueTraits>::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef multiset
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
@@ -165,18 +149,14 @@ void test_multiset<ValueTraits>::test_swap(std::vector<typename ValueTraits::val
|
||||
testset2.insert (&values[0] + 2, &values[0] + 6);
|
||||
testset1.swap (testset2);
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1245"));
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME multiset_type::iterator i = testset2.begin(),
|
||||
e = testset2.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("23"));
|
||||
{ int init_values [] = { 1, 2, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
{ int init_values [] = { 2, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.begin() ); }
|
||||
|
||||
testset1.erase (testset1.iterator_to(values[5]), testset1.end());
|
||||
BOOST_CHECK (testset1.size() == 1);
|
||||
BOOST_CHECK (&*testset1.begin() == &values[3]);
|
||||
BOOST_TEST (testset1.size() == 1);
|
||||
BOOST_TEST (&*testset1.begin() == &values[3]);
|
||||
}
|
||||
|
||||
//test: find, equal_range (lower_bound, upper_bound):
|
||||
@@ -184,28 +164,27 @@ template<class ValueTraits>
|
||||
void test_multiset<ValueTraits>::test_find(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef multiset
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> multiset_type;
|
||||
multiset_type testset (values.begin(), values.end());
|
||||
typedef BOOST_DEDUCED_TYPENAME multiset_type::iterator iterator;
|
||||
typedef typename multiset_type::iterator iterator;
|
||||
|
||||
testvalue_t cmp_val;
|
||||
cmp_val.value_ = 2;
|
||||
iterator i = testset.find (cmp_val);
|
||||
BOOST_CHECK (i->value_ == 2);
|
||||
BOOST_CHECK ((++i)->value_ == 2);
|
||||
BOOST_TEST (i->value_ == 2);
|
||||
BOOST_TEST ((++i)->value_ == 2);
|
||||
std::pair<iterator,iterator> range = testset.equal_range (cmp_val);
|
||||
|
||||
BOOST_CHECK (range.first->value_ == 2);
|
||||
BOOST_CHECK (range.second->value_ == 3);
|
||||
BOOST_CHECK (std::distance (range.first, range.second) == 2);
|
||||
BOOST_TEST (range.first->value_ == 2);
|
||||
BOOST_TEST (range.second->value_ == 3);
|
||||
BOOST_TEST (std::distance (range.first, range.second) == 2);
|
||||
|
||||
cmp_val.value_ = 7;
|
||||
BOOST_CHECK (testset.find (cmp_val) == testset.end());
|
||||
BOOST_TEST (testset.find (cmp_val) == testset.end());
|
||||
}
|
||||
|
||||
template<class ValueTraits>
|
||||
@@ -223,9 +202,9 @@ void test_multiset<ValueTraits>
|
||||
multiset_type testmultiset2;
|
||||
|
||||
testmultiset2.clone_from(testmultiset1, test::new_cloner(), test::delete_destroyer());
|
||||
BOOST_CHECK (testmultiset2 == testmultiset1);
|
||||
BOOST_TEST (testmultiset2 == testmultiset1);
|
||||
testmultiset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testmultiset2.empty());
|
||||
BOOST_TEST (testmultiset2.empty());
|
||||
}
|
||||
|
||||
template<class VoidPointer, bool constant_time_size>
|
||||
@@ -240,10 +219,10 @@ class test_main_template
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_multiset <typename testvalue_t::set_base_hook::template
|
||||
test_multiset <typename testvalue_t::set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_multiset <typename testvalue_t::set_member_hook::template
|
||||
test_multiset <typename testvalue_t::set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -262,21 +241,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_multiset <typename testvalue_t::set_base_hook::template
|
||||
test_multiset <typename testvalue_t::set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_multiset <typename testvalue_t::set_member_hook::template
|
||||
test_multiset <typename testvalue_t::set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_node_> >::test_all(data);
|
||||
|
||||
test_multiset <typename testvalue_t::set_auto_base_hook::template
|
||||
test_multiset <typename testvalue_t::set_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_multiset <typename testvalue_t::set_auto_member_hook::template
|
||||
test_multiset <typename testvalue_t::set_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
//Explicit instantiations of non-counted classes
|
||||
template class multiset
|
||||
<set_base_raw, std::less<set_base_raw::value_type>, false>;
|
||||
@@ -304,14 +283,14 @@ template class multiset
|
||||
<set_base_smart_t, std::less<set_base_smart_t::value_type>, true>;
|
||||
template class multiset
|
||||
<set_member_smart_t, std::less<set_member_smart_t::value_type>, true>;
|
||||
|
||||
int test_main( int, char* [] )
|
||||
*/
|
||||
int main( int, char* [] )
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -17,9 +17,8 @@
|
||||
#include "smart_ptr.hpp"
|
||||
#include "common_functors.hpp"
|
||||
#include <vector>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -78,20 +77,17 @@ template<class ValueTraits>
|
||||
void test_set<ValueTraits>::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::set
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> set_type;
|
||||
set_type testset1 (values.begin(), values.end());
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
testset1.clear();
|
||||
BOOST_CHECK (testset1.empty());
|
||||
BOOST_TEST (testset1.empty());
|
||||
|
||||
typedef boost::intrusive::set
|
||||
<ValueTraits
|
||||
@@ -99,11 +95,10 @@ void test_set<ValueTraits>::test_sort(std::vector<typename ValueTraits::value_ty
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> set_type2;
|
||||
set_type2 testset2 (&values[0], &values[0] + 6);
|
||||
std::copy (testset2.rbegin(), testset2.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("53142"));
|
||||
BOOST_CHECK (testset2.begin()->value_ == 2);
|
||||
BOOST_CHECK (testset2.rbegin()->value_ == 5);
|
||||
{ int init_values [] = { 5, 3, 1, 4, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.rbegin() ); }
|
||||
BOOST_TEST (testset2.begin()->value_ == 2);
|
||||
BOOST_TEST (testset2.rbegin()->value_ == 5);
|
||||
}
|
||||
|
||||
//test: insert, const_iterator, const_reverse_iterator, erase, iterator_to:
|
||||
@@ -111,7 +106,6 @@ template<class ValueTraits>
|
||||
void test_set<ValueTraits>::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::set
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
@@ -121,29 +115,24 @@ void test_set<ValueTraits>::test_insert(std::vector<typename ValueTraits::value_
|
||||
testset.insert(&values[0] + 2, &values[0] + 5);
|
||||
|
||||
const set_type& const_testset = testset;
|
||||
std::copy (const_testset.begin(), const_testset.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("145"));
|
||||
{ int init_values [] = { 1, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME set_type::iterator i = testset.begin();
|
||||
BOOST_CHECK (i->value_ == 1);
|
||||
typename set_type::iterator i = testset.begin();
|
||||
BOOST_TEST (i->value_ == 1);
|
||||
|
||||
i = testset.insert (i, values[0]);
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
|
||||
std::copy (const_testset.rbegin(), const_testset.rend(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("5431"));
|
||||
{ int init_values [] = { 5, 4, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset.rbegin() ); }
|
||||
|
||||
i = testset.iterator_to (values[2]);
|
||||
BOOST_CHECK (&*i == &values[2]);
|
||||
BOOST_TEST (&*i == &values[2]);
|
||||
|
||||
testset.erase (i);
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME set_type::const_iterator i = const_testset.begin(),
|
||||
e = const_testset.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("135"));
|
||||
{ int init_values [] = { 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset.begin() ); }
|
||||
}
|
||||
|
||||
//test: insert (seq-version), swap, erase (seq-version), size:
|
||||
@@ -151,8 +140,6 @@ template<class ValueTraits>
|
||||
void test_set<ValueTraits>::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::set
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
@@ -163,19 +150,16 @@ void test_set<ValueTraits>::test_swap(std::vector<typename ValueTraits::value_ty
|
||||
testset2.insert (&values[0] + 2, &values[0] + 6);
|
||||
testset1.swap (testset2);
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1245"));
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME set_type::iterator i = testset2.begin(),
|
||||
e = testset2.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("23"));
|
||||
{ int init_values [] = { 1, 2, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
{ int init_values [] = { 2, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.begin() ); }
|
||||
|
||||
testset1.erase (testset1.iterator_to(values[5]), testset1.end());
|
||||
BOOST_CHECK (testset1.size() == 1);
|
||||
// BOOST_CHECK (&testset1.front() == &values[3]);
|
||||
BOOST_CHECK (&*testset1.begin() == &values[3]);
|
||||
BOOST_TEST (testset1.size() == 1);
|
||||
// BOOST_TEST (&testset1.front() == &values[3]);
|
||||
BOOST_TEST (&*testset1.begin() == &values[3]);
|
||||
}
|
||||
|
||||
//test: find, equal_range (lower_bound, upper_bound):
|
||||
@@ -183,29 +167,27 @@ template<class ValueTraits>
|
||||
void test_set<ValueTraits>::test_find(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::set
|
||||
<ValueTraits
|
||||
,std::less<typename ValueTraits::value_type>
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> set_type;
|
||||
set_type testset (values.begin(), values.end());
|
||||
typedef BOOST_DEDUCED_TYPENAME set_type::iterator iterator;
|
||||
typedef typename set_type::iterator iterator;
|
||||
|
||||
testvalue_t cmp_val;
|
||||
cmp_val.value_ = 2;
|
||||
iterator i = testset.find (cmp_val);
|
||||
BOOST_CHECK (i->value_ == 2);
|
||||
BOOST_CHECK ((++i)->value_ != 2);
|
||||
BOOST_TEST (i->value_ == 2);
|
||||
BOOST_TEST ((++i)->value_ != 2);
|
||||
std::pair<iterator,iterator> range = testset.equal_range (cmp_val);
|
||||
|
||||
BOOST_CHECK (range.first->value_ == 2);
|
||||
BOOST_CHECK (range.second->value_ == 3);
|
||||
BOOST_CHECK (std::distance (range.first, range.second) == 1);
|
||||
BOOST_TEST (range.first->value_ == 2);
|
||||
BOOST_TEST (range.second->value_ == 3);
|
||||
BOOST_TEST (std::distance (range.first, range.second) == 1);
|
||||
|
||||
cmp_val.value_ = 7;
|
||||
BOOST_CHECK (testset.find (cmp_val) == testset.end());
|
||||
BOOST_TEST (testset.find (cmp_val) == testset.end());
|
||||
}
|
||||
|
||||
template<class ValueTraits>
|
||||
@@ -223,9 +205,9 @@ void test_set<ValueTraits>
|
||||
set_type testset2;
|
||||
|
||||
testset2.clone_from(testset1, test::new_cloner(), test::delete_destroyer());
|
||||
BOOST_CHECK (testset2 == testset1);
|
||||
BOOST_TEST (testset2 == testset1);
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
|
||||
template<class VoidPointer, bool constant_time_size>
|
||||
@@ -240,10 +222,10 @@ class test_main_template
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_set <typename testvalue_t::set_base_hook::template
|
||||
test_set <typename testvalue_t::set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_set <typename testvalue_t::set_member_hook::template
|
||||
test_set <typename testvalue_t::set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -262,21 +244,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_set <typename testvalue_t::set_base_hook::template
|
||||
test_set <typename testvalue_t::set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_set <typename testvalue_t::set_member_hook::template
|
||||
test_set <typename testvalue_t::set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_node_> >::test_all(data);
|
||||
|
||||
test_set <typename testvalue_t::set_auto_base_hook::template
|
||||
test_set <typename testvalue_t::set_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_set <typename testvalue_t::set_auto_member_hook::template
|
||||
test_set <typename testvalue_t::set_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::set_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
//Explicit instantiations of non-counted classes
|
||||
template class boost::intrusive::set
|
||||
<set_base_raw, std::less<set_base_raw::value_type>, false>;
|
||||
@@ -304,12 +286,12 @@ template class boost::intrusive::set
|
||||
<set_base_smart_t, std::less<set_base_smart_t::value_type>, true>;
|
||||
template class boost::intrusive::set
|
||||
<set_member_smart_t, std::less<set_member_smart_t::value_type>, true>;
|
||||
|
||||
int test_main( int, char* [] )
|
||||
*/
|
||||
int main( int, char* [] )
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -16,10 +16,8 @@
|
||||
#include "smart_ptr.hpp"
|
||||
#include "common_functors.hpp"
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -62,22 +60,22 @@ void test_slist<ValueTraits>
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> list_type;
|
||||
list_type testlist;
|
||||
BOOST_CHECK (testlist.empty());
|
||||
BOOST_TEST (testlist.empty());
|
||||
|
||||
testlist.push_front (values[0]);
|
||||
BOOST_CHECK (testlist.size() == 1);
|
||||
BOOST_CHECK (&testlist.front() == &values[0]);
|
||||
BOOST_TEST (testlist.size() == 1);
|
||||
BOOST_TEST (&testlist.front() == &values[0]);
|
||||
|
||||
testlist.push_front (values[1]);
|
||||
BOOST_CHECK (testlist.size() == 2);
|
||||
BOOST_CHECK (&testlist.front() == &values[1]);
|
||||
BOOST_TEST (testlist.size() == 2);
|
||||
BOOST_TEST (&testlist.front() == &values[1]);
|
||||
|
||||
testlist.pop_front();
|
||||
BOOST_CHECK (testlist.size() == 1);
|
||||
BOOST_CHECK (&testlist.front() == &values[0]);
|
||||
BOOST_TEST (testlist.size() == 1);
|
||||
BOOST_TEST (&testlist.front() == &values[0]);
|
||||
|
||||
testlist.pop_front();
|
||||
BOOST_CHECK (testlist.empty());
|
||||
BOOST_TEST (testlist.empty());
|
||||
}
|
||||
|
||||
//test: merge due to error in merge implementation:
|
||||
@@ -86,7 +84,6 @@ void test_slist<ValueTraits>
|
||||
::test_merge (std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -98,9 +95,8 @@ void test_slist<ValueTraits>
|
||||
testlist2.push_front (values[2]);
|
||||
testlist1.merge (testlist2);
|
||||
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1345"));
|
||||
int init_values [] = { 1, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() );
|
||||
}
|
||||
|
||||
//test: constructor, iterator, sort, reverse:
|
||||
@@ -109,27 +105,22 @@ void test_slist<ValueTraits>
|
||||
::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
> list_type;
|
||||
list_type testlist (values.begin(), values.end());
|
||||
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
|
||||
|
||||
testlist.sort (even_odd());
|
||||
for (BOOST_DEDUCED_TYPENAME list_type::iterator i = testlist.begin(),
|
||||
e = testlist.end(); i != e; i++) //test postincrement
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("24135"));
|
||||
{ int init_values [] = { 2, 4, 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
|
||||
|
||||
testlist.reverse();
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("53142"));
|
||||
{ int init_values [] = { 5, 3, 1, 4, 2, };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
|
||||
}
|
||||
|
||||
//test: assign, insert_after, const_iterator, erase_after, iterator_to, previous:
|
||||
@@ -138,7 +129,6 @@ void test_slist<ValueTraits>
|
||||
::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -147,30 +137,25 @@ void test_slist<ValueTraits>
|
||||
testlist.assign (&values[0] + 2, &values[0] + 5);
|
||||
|
||||
const list_type& const_testlist = testlist;
|
||||
std::copy (const_testlist.begin(), const_testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("345"));
|
||||
{ int init_values [] = { 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME list_type::iterator i = ++testlist.begin();
|
||||
BOOST_CHECK (i->value_ == 4);
|
||||
typename list_type::iterator i = ++testlist.begin();
|
||||
BOOST_TEST (i->value_ == 4);
|
||||
|
||||
testlist.insert_after (i, values[0]);
|
||||
for (BOOST_DEDUCED_TYPENAME list_type::const_iterator i2 = const_testlist.begin(),
|
||||
e = const_testlist.end(); i2 != e; i2++) //test postincrement
|
||||
test_seq << *i2;
|
||||
BOOST_CHECK (test_seq.is_equal ("3415"));
|
||||
{ int init_values [] = { 3, 4, 1, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
i = testlist.iterator_to (values[4]);
|
||||
BOOST_CHECK (&*i == &values[4]);
|
||||
BOOST_TEST (&*i == &values[4]);
|
||||
i = testlist.previous (i);
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
|
||||
testlist.erase_after (i);
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
|
||||
std::copy (const_testlist.begin(), const_testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("341"));
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
{ int init_values [] = { 3, 4, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
}
|
||||
|
||||
//test: insert, const_iterator, erase, iterator_to:
|
||||
@@ -179,7 +164,6 @@ void test_slist<ValueTraits>
|
||||
::test_slow_insert (std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -189,32 +173,28 @@ void test_slist<ValueTraits>
|
||||
testlist.insert (testlist.begin(), &values[0] + 2, &values[0] + 4);
|
||||
|
||||
const list_type& const_testlist = testlist;
|
||||
std::copy (const_testlist.begin(), const_testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("345"));
|
||||
{ int init_values [] = { 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME list_type::iterator i = ++testlist.begin();
|
||||
BOOST_CHECK (i->value_ == 4);
|
||||
typename list_type::iterator i = ++testlist.begin();
|
||||
BOOST_TEST (i->value_ == 4);
|
||||
|
||||
testlist.insert (i, values[0]);
|
||||
std::copy (const_testlist.begin(), const_testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("3145"));
|
||||
{ int init_values [] = { 3, 1, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
i = testlist.iterator_to (values[4]);
|
||||
BOOST_CHECK (&*i == &values[4]);
|
||||
BOOST_TEST (&*i == &values[4]);
|
||||
|
||||
i = testlist.erase (i);
|
||||
BOOST_CHECK (i == testlist.end());
|
||||
BOOST_TEST (i == testlist.end());
|
||||
|
||||
{ int init_values [] = { 3, 1, 4 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testlist.begin() ); }
|
||||
|
||||
//test postincrement:
|
||||
for (BOOST_DEDUCED_TYPENAME list_type::const_iterator i =
|
||||
const_testlist.begin(), e = const_testlist.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("314"));
|
||||
testlist.erase (++testlist.begin(), testlist.end());
|
||||
BOOST_CHECK (testlist.size() == 1);
|
||||
BOOST_CHECK (testlist.front().value_ == 3);
|
||||
BOOST_TEST (testlist.size() == 1);
|
||||
BOOST_TEST (testlist.front().value_ == 3);
|
||||
}
|
||||
|
||||
template<class ValueTraits>
|
||||
@@ -222,7 +202,6 @@ void test_slist<ValueTraits>
|
||||
::test_shift(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -239,13 +218,8 @@ void test_slist<ValueTraits>
|
||||
for(int j = 0; j < num_values; ++j){
|
||||
expected_values[(j + num_values - i%num_values) % num_values] = (j + 1);
|
||||
}
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
std::stringstream stream;
|
||||
std::copy (expected_values.begin(), expected_values.end(),
|
||||
std::ostream_iterator<testvalue_t> (stream));
|
||||
stream << std::ends;
|
||||
BOOST_CHECK (test_seq.is_equal (stream.str().c_str()));
|
||||
|
||||
TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
|
||||
testlist.clear();
|
||||
}
|
||||
|
||||
@@ -256,19 +230,8 @@ void test_slist<ValueTraits>
|
||||
for(int j = 0; j < num_values; ++j){
|
||||
expected_values[(j + i) % num_values] = (j + 1);
|
||||
}
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
|
||||
std::stringstream stream2;
|
||||
std::copy (testlist.begin(), testlist.end(),
|
||||
std::ostream_iterator<testvalue_t> (stream2));
|
||||
stream2 << std::ends;
|
||||
|
||||
std::stringstream stream;
|
||||
std::copy (expected_values.begin(), expected_values.end(),
|
||||
std::ostream_iterator<testvalue_t> (stream));
|
||||
stream << std::ends;
|
||||
BOOST_CHECK (test_seq.is_equal (stream.str().c_str()));
|
||||
TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
|
||||
testlist.clear();
|
||||
}
|
||||
}
|
||||
@@ -279,7 +242,6 @@ void test_slist<ValueTraits>
|
||||
::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -289,54 +251,41 @@ void test_slist<ValueTraits>
|
||||
list_type testlist2;
|
||||
testlist2.insert_after (testlist2.end(), &values[0] + 2, &values[0] + 5);
|
||||
testlist1.swap(testlist2);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("345"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12"));
|
||||
|
||||
{ int init_values [] = { 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 1, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
testlist2.splice_after (testlist2.begin(), testlist1);
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("13452"));
|
||||
BOOST_CHECK (testlist1.empty());
|
||||
{ int init_values [] = { 1, 3, 4, 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
BOOST_TEST (testlist1.empty());
|
||||
|
||||
testlist1.splice_after (testlist1.end(), testlist2, ++testlist2.begin());
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("4"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1352"));
|
||||
{ int init_values [] = { 4 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 1, 3, 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
|
||||
testlist1.splice_after (testlist1.begin(), testlist2,
|
||||
testlist2.end(), ++++testlist2.begin());
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("4135"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("2"));
|
||||
{ int init_values [] = { 4, 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
}
|
||||
{
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
list_type testlist1 (&values[0], &values[0] + 2);
|
||||
list_type testlist2 (&values[0] + 3, &values[0] + 5);
|
||||
|
||||
values[0].swap_nodes(values[2]);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("32"));
|
||||
{ int init_values [] = { 3, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
|
||||
values[2].swap_nodes(values[4]);
|
||||
std::copy (testlist1.begin(), testlist1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("52"));
|
||||
std::copy (testlist2.begin(), testlist2.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("43"));
|
||||
{ int init_values [] = { 5, 2 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
|
||||
{ int init_values [] = { 4, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,7 +294,6 @@ void test_slist<ValueTraits>
|
||||
::test_clone(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::slist
|
||||
<ValueTraits
|
||||
,ValueTraits::value_type::constant_time_size, std::size_t
|
||||
@@ -355,9 +303,9 @@ void test_slist<ValueTraits>
|
||||
list_type testlist2;
|
||||
|
||||
testlist2.clone_from(testlist1, test::new_cloner(), test::delete_destroyer());
|
||||
BOOST_CHECK (testlist2 == testlist1);
|
||||
BOOST_TEST (testlist2 == testlist1);
|
||||
testlist2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testlist2.empty());
|
||||
BOOST_TEST (testlist2.empty());
|
||||
}
|
||||
|
||||
template<class VoidPointer, bool constant_time_size>
|
||||
@@ -371,10 +319,10 @@ class test_main_template
|
||||
for (int i = 0; i < 5; ++i)
|
||||
data[i].value_ = i + 1;
|
||||
|
||||
test_slist <typename testvalue_t::slist_base_hook::template
|
||||
test_slist <typename testvalue_t::slist_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_slist <typename testvalue_t::slist_member_hook::template
|
||||
test_slist <typename testvalue_t::slist_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::slist_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -392,21 +340,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 5; ++i)
|
||||
data[i].value_ = i + 1;
|
||||
|
||||
test_slist <typename testvalue_t::slist_base_hook::template
|
||||
test_slist <typename testvalue_t::slist_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_slist <typename testvalue_t::slist_member_hook::template
|
||||
test_slist <typename testvalue_t::slist_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::slist_node_> >::test_all(data);
|
||||
|
||||
test_slist <typename testvalue_t::slist_auto_base_hook::template
|
||||
test_slist <typename testvalue_t::slist_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_slist <typename testvalue_t::slist_auto_member_hook::template
|
||||
test_slist <typename testvalue_t::slist_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::slist_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
//Explicit instantiations of non-counted classes
|
||||
template class boost::intrusive::slist<slist_base_raw, false>;
|
||||
template class boost::intrusive::slist<slist_member_raw, false>;
|
||||
@@ -422,12 +370,12 @@ template class boost::intrusive::slist<slist_base_raw_t, true>;
|
||||
template class boost::intrusive::slist<slist_member_raw_t, true>;
|
||||
template class boost::intrusive::slist<slist_base_smart_t, true>;
|
||||
template class boost::intrusive::slist<slist_member_smart_t, true>;
|
||||
|
||||
int test_main(int, char* [])
|
||||
*/
|
||||
int main(int, char* [])
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006. Distributed under the Boost
|
||||
// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost
|
||||
// Software License, Version 1.0. (See accompanying file
|
||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
@@ -43,44 +43,36 @@ struct random_it
|
||||
|
||||
template<> struct random_it<void>
|
||||
{
|
||||
typedef void * pointer;
|
||||
typedef const void * const_pointer;
|
||||
typedef empty_type& reference;
|
||||
typedef const empty_type& const_reference;
|
||||
typedef void value_type;
|
||||
typedef empty_type difference_type;
|
||||
typedef empty_type iterator_category;
|
||||
};
|
||||
|
||||
template<> struct random_it<const void>
|
||||
{
|
||||
typedef const void * pointer;
|
||||
typedef const void * const_pointer;
|
||||
typedef const empty_type & reference;
|
||||
typedef const empty_type & const_reference;
|
||||
typedef const void value_type;
|
||||
typedef empty_type difference_type;
|
||||
typedef empty_type iterator_category;
|
||||
};
|
||||
|
||||
template<> struct random_it<volatile void>
|
||||
{
|
||||
typedef volatile void * pointer;
|
||||
typedef const volatile void * const_pointer;
|
||||
typedef empty_type& reference;
|
||||
typedef const empty_type& const_reference;
|
||||
typedef volatile void value_type;
|
||||
typedef empty_type difference_type;
|
||||
typedef empty_type iterator_category;
|
||||
};
|
||||
|
||||
template<> struct random_it<const volatile void>
|
||||
{
|
||||
typedef const volatile void * pointer;
|
||||
typedef const volatile void * const_pointer;
|
||||
typedef const empty_type & reference;
|
||||
typedef const empty_type & const_reference;
|
||||
typedef const volatile void value_type;
|
||||
typedef empty_type difference_type;
|
||||
typedef empty_type iterator_category;
|
||||
};
|
||||
@@ -104,9 +96,9 @@ class smart_ptr
|
||||
typedef void (self_t::*unspecified_bool_type)() const;
|
||||
|
||||
public:
|
||||
typedef typename random_it_t::pointer pointer;
|
||||
typedef PointedType * pointer;
|
||||
typedef typename random_it_t::reference reference;
|
||||
typedef typename random_it_t::value_type value_type;
|
||||
typedef PointedType value_type;
|
||||
typedef typename random_it_t::difference_type difference_type;
|
||||
typedef typename random_it_t::iterator_category iterator_category;
|
||||
|
||||
@@ -314,7 +306,7 @@ inline void swap (smart_ptr<T> &pt,
|
||||
/*!get_pointer() enables boost::mem_fn to recognize smart_ptr.
|
||||
Never throws.*/
|
||||
template<class T>
|
||||
inline T * get_pointer(smart_ptr<T> const & p)
|
||||
inline T* get_pointer(const smart_ptr<T> & p)
|
||||
{ return p.get(); }
|
||||
|
||||
/*!Simulation of static_cast between pointers. Never throws.*/
|
||||
|
@@ -1,7 +1,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2006 Matias Capeletto
|
||||
// Copyright (c) 2007 Ion Gazta<EFBFBD>aga
|
||||
// Copyright (c) 2007 Ion Gaztanaga
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
|
29
test/test_macros.hpp
Normal file
29
test/test_macros.hpp
Normal file
@@ -0,0 +1,29 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
// See http://www.boost.org/libs/intrusive for documentation.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef BOOST_INTRUSIVE_TEST_TEST_MACROS_HPP
|
||||
#define BOOST_INTRUSIVE_TEST_TEST_MACROS_HPP
|
||||
|
||||
#define TEST_INTRUSIVE_SEQUENCE( INTVALUES, ITERATOR )\
|
||||
{ \
|
||||
const int init_values_size = sizeof(INTVALUES)/sizeof(INTVALUES[0]); \
|
||||
std::vector<int> expected; \
|
||||
expected.assign(&INTVALUES[0], &INTVALUES[0] + init_values_size); \
|
||||
BOOST_TEST (std::equal(expected.begin(), expected.end(), ITERATOR) ); \
|
||||
}
|
||||
|
||||
#define TEST_INTRUSIVE_SEQUENCE_EXPECTED( EXPECTEDVECTOR, ITERATOR )\
|
||||
{ \
|
||||
BOOST_TEST (std::equal(EXPECTEDVECTOR.begin(), EXPECTEDVECTOR.end(), ITERATOR) ); \
|
||||
}
|
||||
|
||||
#endif
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -16,11 +16,10 @@
|
||||
#include "itestvalue.hpp"
|
||||
#include "smart_ptr.hpp"
|
||||
#include "common_functors.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <set>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -85,8 +84,6 @@ template<class ValueTraits>
|
||||
void test_unordered_multiset<ValueTraits>::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_multiset
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -96,12 +93,10 @@ void test_unordered_multiset<ValueTraits>::test_sort(std::vector<typename ValueT
|
||||
typename unordered_multiset_type::bucket_type buckets [BucketSize];
|
||||
unordered_multiset_type testset1(buckets, BucketSize, values.begin(), values.end());
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
testset1.clear();
|
||||
BOOST_CHECK (testset1.empty());
|
||||
BOOST_TEST (testset1.empty());
|
||||
}
|
||||
|
||||
//test: insert, const_iterator, const_reverse_iterator, erase, iterator_to:
|
||||
@@ -109,8 +104,6 @@ template<class ValueTraits>
|
||||
void test_unordered_multiset<ValueTraits>::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_multiset
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -124,49 +117,44 @@ void test_unordered_multiset<ValueTraits>::test_insert(std::vector<typename Valu
|
||||
testset.insert(&values[0] + 2, &values[0] + 5);
|
||||
|
||||
const unordered_multiset_type& const_testset = testset;
|
||||
std::copy (const_testset.begin(), const_testset.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("145"));
|
||||
{ int init_values [] = { 1, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME unordered_multiset_type::iterator i = testset.begin();
|
||||
BOOST_CHECK (i->value_ == 1);
|
||||
typename unordered_multiset_type::iterator i = testset.begin();
|
||||
BOOST_TEST (i->value_ == 1);
|
||||
|
||||
i = testset.insert (values[0]);
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
|
||||
i = testset.iterator_to (values[2]);
|
||||
BOOST_CHECK (&*i == &values[2]);
|
||||
BOOST_TEST (&*i == &values[2]);
|
||||
testset.erase(i);
|
||||
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME unordered_multiset_type::const_iterator i = const_testset.begin(),
|
||||
e = const_testset.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("135"));
|
||||
{ int init_values [] = { 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
testset.clear();
|
||||
testset.insert(&values[0], &values[0] + values.size());
|
||||
test_seq.clear();
|
||||
for (BOOST_DEDUCED_TYPENAME unordered_multiset_type::const_iterator i = const_testset.begin(),
|
||||
e = const_testset.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
BOOST_CHECK (testset.erase(1) == 1);
|
||||
BOOST_CHECK (testset.erase(2) == 2);
|
||||
BOOST_CHECK (testset.erase(3) == 1);
|
||||
BOOST_CHECK (testset.erase(4) == 1);
|
||||
BOOST_CHECK (testset.erase(5) == 1);
|
||||
BOOST_CHECK (testset.empty() == true);
|
||||
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
|
||||
BOOST_TEST (testset.erase(1) == 1);
|
||||
BOOST_TEST (testset.erase(2) == 2);
|
||||
BOOST_TEST (testset.erase(3) == 1);
|
||||
BOOST_TEST (testset.erase(4) == 1);
|
||||
BOOST_TEST (testset.erase(5) == 1);
|
||||
BOOST_TEST (testset.empty() == true);
|
||||
|
||||
//Now with a single bucket
|
||||
typename unordered_multiset_type::bucket_type single_bucket[1];
|
||||
unordered_multiset_type testset2(single_bucket, 1);
|
||||
testset2.insert(&values[0], &values[0] + values.size());
|
||||
BOOST_CHECK (testset2.erase(5) == 1);
|
||||
BOOST_CHECK (testset2.erase(2) == 2);
|
||||
BOOST_CHECK (testset2.erase(1) == 1);
|
||||
BOOST_CHECK (testset2.erase(4) == 1);
|
||||
BOOST_CHECK (testset2.erase(3) == 1);
|
||||
BOOST_CHECK (testset2.empty() == true);
|
||||
BOOST_TEST (testset2.erase(5) == 1);
|
||||
BOOST_TEST (testset2.erase(2) == 2);
|
||||
BOOST_TEST (testset2.erase(1) == 1);
|
||||
BOOST_TEST (testset2.erase(4) == 1);
|
||||
BOOST_TEST (testset2.erase(3) == 1);
|
||||
BOOST_TEST (testset2.empty() == true);
|
||||
}
|
||||
|
||||
//test: insert (seq-version), swap, erase (seq-version), size:
|
||||
@@ -174,7 +162,6 @@ template<class ValueTraits>
|
||||
void test_unordered_multiset<ValueTraits>::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::unordered_multiset
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -190,19 +177,16 @@ void test_unordered_multiset<ValueTraits>::test_swap(std::vector<typename ValueT
|
||||
testset2.insert (&values[0] + 2, &values[0] + 6);
|
||||
testset1.swap (testset2);
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1245"));
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME unordered_multiset_type::iterator i = testset2.begin(),
|
||||
e = testset2.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("23"));
|
||||
{ int init_values [] = { 1, 2, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
{ int init_values [] = { 2, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.begin() ); }
|
||||
|
||||
testset1.erase (testset1.iterator_to(values[5]), testset1.end());
|
||||
BOOST_CHECK (testset1.size() == 1);
|
||||
// BOOST_CHECK (&testset1.front() == &values[3]);
|
||||
BOOST_CHECK (&*testset1.begin() == &values[3]);
|
||||
BOOST_TEST (testset1.size() == 1);
|
||||
// BOOST_TEST (&testset1.front() == &values[3]);
|
||||
BOOST_TEST (&*testset1.begin() == &values[3]);
|
||||
}
|
||||
|
||||
//test: rehash:
|
||||
@@ -210,8 +194,6 @@ template<class ValueTraits>
|
||||
void test_unordered_multiset<ValueTraits>::test_rehash(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_multiset
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -221,39 +203,33 @@ void test_unordered_multiset<ValueTraits>::test_rehash(std::vector<typename Valu
|
||||
|
||||
typename unordered_multiset_type::bucket_type buckets1 [BucketSize];
|
||||
unordered_multiset_type testset1(buckets1, BucketSize, &values[0], &values[0] + 6);
|
||||
BOOST_CHECK (testset1.size() == 6);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
BOOST_TEST (testset1.size() == 6);
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
typename unordered_multiset_type::bucket_type buckets2 [2];
|
||||
testset1.rehash(buckets2, 2);
|
||||
BOOST_CHECK (testset1.size() == 6);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("422531"));
|
||||
|
||||
BOOST_TEST (testset1.size() == 6);
|
||||
{ int init_values [] = { 4, 2, 2, 5, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
typename unordered_multiset_type::bucket_type buckets3 [BucketSize*2];
|
||||
testset1.rehash(buckets3, BucketSize*2);
|
||||
BOOST_CHECK (testset1.size() == 6);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
BOOST_TEST (testset1.size() == 6);
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
//Now rehash reducing the buckets
|
||||
testset1.rehash(buckets3, 2);
|
||||
BOOST_CHECK (testset1.size() == 6);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("422531"));
|
||||
BOOST_TEST (testset1.size() == 6);
|
||||
{ int init_values [] = { 4, 2, 2, 5, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
//Now rehash increasing the buckets
|
||||
testset1.rehash(buckets3, BucketSize*2);
|
||||
BOOST_CHECK (testset1.size() == 6);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("122345"));
|
||||
BOOST_TEST (testset1.size() == 6);
|
||||
{ int init_values [] = { 1, 2, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
}
|
||||
|
||||
//test: find, equal_range (lower_bound, upper_bound):
|
||||
@@ -261,7 +237,6 @@ template<class ValueTraits>
|
||||
void test_unordered_multiset<ValueTraits>::test_find(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::unordered_multiset
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -271,21 +246,21 @@ void test_unordered_multiset<ValueTraits>::test_find(std::vector<typename ValueT
|
||||
typename unordered_multiset_type::bucket_type buckets[BucketSize];
|
||||
unordered_multiset_type testset(buckets, BucketSize, values.begin(), values.end());
|
||||
|
||||
typedef BOOST_DEDUCED_TYPENAME unordered_multiset_type::iterator iterator;
|
||||
typedef typename unordered_multiset_type::iterator iterator;
|
||||
|
||||
testvalue_t cmp_val;
|
||||
cmp_val.value_ = 2;
|
||||
iterator i = testset.find (cmp_val);
|
||||
BOOST_CHECK (i->value_ == 2);
|
||||
BOOST_CHECK ((++i)->value_ == 2);
|
||||
BOOST_TEST (i->value_ == 2);
|
||||
BOOST_TEST ((++i)->value_ == 2);
|
||||
std::pair<iterator,iterator> range = testset.equal_range (cmp_val);
|
||||
|
||||
BOOST_CHECK (range.first->value_ == 2);
|
||||
BOOST_CHECK (range.second->value_ == 3);
|
||||
BOOST_CHECK (std::distance (range.first, range.second) == 2);
|
||||
BOOST_TEST (range.first->value_ == 2);
|
||||
BOOST_TEST (range.second->value_ == 3);
|
||||
BOOST_TEST (std::distance (range.first, range.second) == 2);
|
||||
|
||||
cmp_val.value_ = 7;
|
||||
BOOST_CHECK (testset.find (cmp_val) == testset.end());
|
||||
BOOST_TEST (testset.find (cmp_val) == testset.end());
|
||||
}
|
||||
|
||||
|
||||
@@ -312,9 +287,9 @@ void test_unordered_multiset<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::multiset<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst);
|
||||
BOOST_TEST (src == dst);
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
{
|
||||
//Test with bigger source bucket arrays
|
||||
@@ -329,9 +304,9 @@ void test_unordered_multiset<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::multiset<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst);
|
||||
BOOST_TEST (src == dst);
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
{
|
||||
//Test with smaller source bucket arrays
|
||||
@@ -346,9 +321,9 @@ void test_unordered_multiset<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::multiset<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst);
|
||||
BOOST_TEST (src == dst);
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -364,10 +339,10 @@ class test_main_template
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_base_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_member_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -386,21 +361,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_base_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_member_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_node_> >::test_all(data);
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_auto_base_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_auto_member_hook::template
|
||||
test_unordered_multiset <typename testvalue_t::unordered_set_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
//Explicit instantiations of non-counted classes
|
||||
template class boost::intrusive::unordered_multiset
|
||||
< unordered_set_base_raw_t
|
||||
@@ -452,12 +427,12 @@ template class boost::intrusive::unordered_multiset
|
||||
< unordered_set_member_smart_t
|
||||
, boost::hash<unordered_set_member_smart_t::value_type>
|
||||
, std::equal_to<unordered_set_member_smart_t::value_type>, true>;
|
||||
|
||||
int test_main( int, char* [] )
|
||||
*/
|
||||
int main( int, char* [] )
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Olaf Krzikalla 2004-2006.
|
||||
// (C) Copyright Ion Gazta<EFBFBD>aga 2006-2007.
|
||||
// (C) Copyright Ion Gaztanaga 2006-2007.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||
@@ -18,9 +18,8 @@
|
||||
#include "common_functors.hpp"
|
||||
#include <vector>
|
||||
#include <set>
|
||||
|
||||
// Boost.Test
|
||||
#include "boost/test/included/test_exec_monitor.hpp"
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include "test_macros.hpp"
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
@@ -75,7 +74,6 @@ void test_unordered_set<ValueTraits>::test_impl()
|
||||
testset.erase (testset.iterator_to (values[0]));
|
||||
testset.erase (testset.iterator_to (values[1]));
|
||||
testset.insert (values[1]);
|
||||
|
||||
testset.erase (testset.iterator_to (values[2]));
|
||||
testset.erase (testset.iterator_to (values[3]));
|
||||
}
|
||||
@@ -84,9 +82,7 @@ void test_unordered_set<ValueTraits>::test_impl()
|
||||
template<class ValueTraits>
|
||||
void test_unordered_set<ValueTraits>::test_sort(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::unordered_set
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -96,14 +92,12 @@ void test_unordered_set<ValueTraits>::test_sort(std::vector<typename ValueTraits
|
||||
typename unordered_set_type::bucket_type buckets [BucketSize];
|
||||
unordered_set_type testset1(buckets, BucketSize, values.begin(), values.end());
|
||||
|
||||
BOOST_CHECK (5 == std::distance(testset1.begin(), testset1.end()));
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
BOOST_TEST (5 == std::distance(testset1.begin(), testset1.end()));
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
testset1.clear();
|
||||
BOOST_CHECK (testset1.empty());
|
||||
BOOST_TEST (testset1.empty());
|
||||
}
|
||||
|
||||
//test: insert, const_iterator, const_reverse_iterator, erase, iterator_to:
|
||||
@@ -111,7 +105,6 @@ template<class ValueTraits>
|
||||
void test_unordered_set<ValueTraits>::test_insert(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
typedef boost::intrusive::unordered_set
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -123,25 +116,22 @@ void test_unordered_set<ValueTraits>::test_insert(std::vector<typename ValueTrai
|
||||
testset.insert(&values[0] + 2, &values[0] + 5);
|
||||
|
||||
const unordered_set_type& const_testset = testset;
|
||||
std::copy (const_testset.begin(), const_testset.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("145"));
|
||||
{ int init_values [] = { 1, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
|
||||
BOOST_DEDUCED_TYPENAME unordered_set_type::iterator i = testset.begin();
|
||||
BOOST_CHECK (i->value_ == 1);
|
||||
typename unordered_set_type::iterator i = testset.begin();
|
||||
BOOST_TEST (i->value_ == 1);
|
||||
|
||||
i = testset.insert(values[0]).first;
|
||||
BOOST_CHECK (&*i == &values[0]);
|
||||
BOOST_TEST (&*i == &values[0]);
|
||||
|
||||
i = testset.iterator_to (values[2]);
|
||||
BOOST_CHECK (&*i == &values[2]);
|
||||
BOOST_TEST (&*i == &values[2]);
|
||||
|
||||
testset.erase (i);
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME unordered_set_type::const_iterator i = const_testset.begin(),
|
||||
e = const_testset.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("135"));
|
||||
|
||||
{ int init_values [] = { 1, 3, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, const_testset.begin() ); }
|
||||
}
|
||||
|
||||
//test: insert (seq-version), swap, erase (seq-version), size:
|
||||
@@ -149,8 +139,6 @@ template<class ValueTraits>
|
||||
void test_unordered_set<ValueTraits>::test_swap(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_set
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -167,19 +155,15 @@ void test_unordered_set<ValueTraits>::test_swap(std::vector<typename ValueTraits
|
||||
testset2.insert (&values[0] + 2, &values[0] + 6);
|
||||
testset1.swap (testset2);
|
||||
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("1245"));
|
||||
//test post-increment:
|
||||
for (BOOST_DEDUCED_TYPENAME unordered_set_type::iterator i = testset2.begin(),
|
||||
e = testset2.end(); i != e; i++)
|
||||
test_seq << *i;
|
||||
BOOST_CHECK (test_seq.is_equal ("23"));
|
||||
{ int init_values [] = { 1, 2, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
{ int init_values [] = { 2, 3 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset2.begin() ); }
|
||||
|
||||
testset1.erase (testset1.iterator_to(values[5]), testset1.end());
|
||||
BOOST_CHECK (testset1.size() == 1);
|
||||
// BOOST_CHECK (&testset1.front() == &values[3]);
|
||||
BOOST_CHECK (&*testset1.begin() == &values[3]);
|
||||
BOOST_TEST (testset1.size() == 1);
|
||||
// BOOST_TEST (&testset1.front() == &values[3]);
|
||||
BOOST_TEST (&*testset1.begin() == &values[3]);
|
||||
}
|
||||
|
||||
//test: rehash:
|
||||
@@ -187,8 +171,6 @@ template<class ValueTraits>
|
||||
void test_unordered_set<ValueTraits>::test_rehash(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_set
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -198,38 +180,33 @@ void test_unordered_set<ValueTraits>::test_rehash(std::vector<typename ValueTrai
|
||||
|
||||
typename unordered_set_type::bucket_type buckets1 [BucketSize];
|
||||
unordered_set_type testset1(buckets1, BucketSize, &values[0], &values[0] + 6);
|
||||
BOOST_CHECK (testset1.size() == 5);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
BOOST_TEST (testset1.size() == 5);
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
typename unordered_set_type::bucket_type buckets2 [2];
|
||||
testset1.rehash(buckets2, 2);
|
||||
BOOST_CHECK (testset1.size() == 5);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("42531"));
|
||||
BOOST_TEST (testset1.size() == 5);
|
||||
{ int init_values [] = { 4, 2, 5, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
typename unordered_set_type::bucket_type buckets3 [BucketSize*2];
|
||||
testset1.rehash(buckets3, BucketSize*2);
|
||||
BOOST_CHECK (testset1.size() == 5);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
BOOST_TEST (testset1.size() == 5);
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
//Now rehash reducing the buckets
|
||||
testset1.rehash(buckets3, 2);
|
||||
BOOST_CHECK (testset1.size() == 5);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("42531"));
|
||||
BOOST_TEST (testset1.size() == 5);
|
||||
{ int init_values [] = { 4, 2, 5, 3, 1 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
|
||||
//Now rehash increasing the buckets
|
||||
testset1.rehash(buckets3, BucketSize*2);
|
||||
BOOST_CHECK (testset1.size() == 5);
|
||||
std::copy (testset1.begin(), testset1.end(),
|
||||
std::ostream_iterator<testvalue_t> (test_seq));
|
||||
BOOST_CHECK (test_seq.is_equal ("12345"));
|
||||
BOOST_TEST (testset1.size() == 5);
|
||||
{ int init_values [] = { 1, 2, 3, 4, 5 };
|
||||
TEST_INTRUSIVE_SEQUENCE( init_values, testset1.begin() ); }
|
||||
}
|
||||
|
||||
|
||||
@@ -238,8 +215,6 @@ template<class ValueTraits>
|
||||
void test_unordered_set<ValueTraits>::test_find(std::vector<typename ValueTraits::value_type>& values)
|
||||
{
|
||||
typedef typename ValueTraits::value_type testvalue_t;
|
||||
boost::test_tools::output_test_stream test_seq;
|
||||
|
||||
typedef boost::intrusive::unordered_set
|
||||
<ValueTraits
|
||||
,boost::hash<typename ValueTraits::value_type>
|
||||
@@ -248,21 +223,21 @@ void test_unordered_set<ValueTraits>::test_find(std::vector<typename ValueTraits
|
||||
> unordered_set_type;
|
||||
typename unordered_set_type::bucket_type buckets [BucketSize];
|
||||
unordered_set_type testset (buckets, BucketSize, values.begin(), values.end());
|
||||
typedef BOOST_DEDUCED_TYPENAME unordered_set_type::iterator iterator;
|
||||
typedef typename unordered_set_type::iterator iterator;
|
||||
|
||||
testvalue_t cmp_val;
|
||||
cmp_val.value_ = 2;
|
||||
iterator i = testset.find (cmp_val);
|
||||
BOOST_CHECK (i->value_ == 2);
|
||||
BOOST_CHECK ((++i)->value_ != 2);
|
||||
BOOST_TEST (i->value_ == 2);
|
||||
BOOST_TEST ((++i)->value_ != 2);
|
||||
std::pair<iterator,iterator> range = testset.equal_range (cmp_val);
|
||||
|
||||
BOOST_CHECK (range.first->value_ == 2);
|
||||
BOOST_CHECK (range.second->value_ == 3);
|
||||
BOOST_CHECK (std::distance (range.first, range.second) == 1);
|
||||
BOOST_TEST (range.first->value_ == 2);
|
||||
BOOST_TEST (range.second->value_ == 3);
|
||||
BOOST_TEST (std::distance (range.first, range.second) == 1);
|
||||
|
||||
cmp_val.value_ = 7;
|
||||
BOOST_CHECK (testset.find (cmp_val) == testset.end());
|
||||
BOOST_TEST (testset.find (cmp_val) == testset.end());
|
||||
}
|
||||
|
||||
template<class ValueTraits>
|
||||
@@ -288,9 +263,9 @@ void test_unordered_set<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::set<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst );
|
||||
BOOST_TEST (src == dst );
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
{
|
||||
//Test with bigger source bucket arrays
|
||||
@@ -305,9 +280,9 @@ void test_unordered_set<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::set<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst );
|
||||
BOOST_TEST (src == dst );
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
{
|
||||
//Test with smaller source bucket arrays
|
||||
@@ -322,9 +297,9 @@ void test_unordered_set<ValueTraits>
|
||||
src(testset1.begin(), testset1.end());
|
||||
std::set<typename ValueTraits::value_type>
|
||||
dst(testset2.begin(), testset2.end());
|
||||
BOOST_CHECK (src == dst );
|
||||
BOOST_TEST (src == dst );
|
||||
testset2.clear_and_destroy(test::delete_destroyer());
|
||||
BOOST_CHECK (testset2.empty());
|
||||
BOOST_TEST (testset2.empty());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,10 +315,10 @@ class test_main_template
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_base_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_member_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_node_> >::test_all(data);
|
||||
|
||||
return 0;
|
||||
@@ -362,21 +337,21 @@ class test_main_template<VoidPointer, false>
|
||||
for (int i = 0; i < 6; ++i)
|
||||
data[i].value_ = random_init[i];
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_base_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_member_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_node_> >::test_all(data);
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_auto_base_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_auto_base_hook_t::template
|
||||
value_traits<testvalue_t> >::test_all(data);
|
||||
|
||||
test_unordered_set <typename testvalue_t::unordered_set_auto_member_hook::template
|
||||
test_unordered_set <typename testvalue_t::unordered_set_auto_member_hook_t::template
|
||||
value_traits<testvalue_t, &testvalue_t::unordered_set_auto_node_> >::test_all(data);
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
template class boost::intrusive::unordered_set
|
||||
< unordered_set_base_raw_t
|
||||
, boost::hash<unordered_set_base_raw_t::value_type>
|
||||
@@ -427,12 +402,12 @@ template class boost::intrusive::unordered_set
|
||||
< unordered_set_member_smart_t
|
||||
, boost::hash<unordered_set_member_smart_t::value_type>
|
||||
, std::equal_to<unordered_set_member_smart_t::value_type>, true>;
|
||||
|
||||
int test_main( int, char* [] )
|
||||
*/
|
||||
int main( int, char* [] )
|
||||
{
|
||||
test_main_template<void*, false>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, false>()();
|
||||
test_main_template<void*, true>()();
|
||||
test_main_template<boost::intrusive::smart_ptr<void>, true>()();
|
||||
return 0;
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
Reference in New Issue
Block a user