|
Boost-Commit : |
From: nesotto_at_[hidden]
Date: 2008-06-24 16:36:59
Author: nesotto
Date: 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
New Revision: 46661
URL: http://svn.boost.org/trac/boost/changeset/46661
Log:
update from trunk
Added:
branches/release/libs/ptr_container/test/ptr_circular_buffer.cpp
- copied unchanged from r46660, /trunk/libs/ptr_container/test/ptr_circular_buffer.cpp
branches/release/libs/ptr_container/test/ptr_inserter.cpp
- copied unchanged from r46660, /trunk/libs/ptr_container/test/ptr_inserter.cpp
branches/release/libs/ptr_container/test/ptr_unordered_map.cpp
- copied unchanged from r46660, /trunk/libs/ptr_container/test/ptr_unordered_map.cpp
branches/release/libs/ptr_container/test/ptr_unordered_set.cpp
- copied unchanged from r46660, /trunk/libs/ptr_container/test/ptr_unordered_set.cpp
Text files modified:
branches/release/libs/ptr_container/test/Jamfile.v2 | 8 ++
branches/release/libs/ptr_container/test/associative_test_data.hpp | 55 +++++++++++++++++----
branches/release/libs/ptr_container/test/ptr_map.cpp | 31 ++++++++++++
branches/release/libs/ptr_container/test/ptr_map_adapter.cpp | 37 ++++++++++----
branches/release/libs/ptr_container/test/ptr_set.cpp | 8 +-
branches/release/libs/ptr_container/test/sequence_test_data.hpp | 28 +++++++++-
branches/release/libs/ptr_container/test/serialization.cpp | 99 +++++++++++++++++++++++++++++++++++++--
branches/release/libs/ptr_container/test/test_data.hpp | 61 ++++++++++++++++++++++--
8 files changed, 282 insertions(+), 45 deletions(-)
Modified: branches/release/libs/ptr_container/test/Jamfile.v2
==============================================================================
--- branches/release/libs/ptr_container/test/Jamfile.v2 (original)
+++ branches/release/libs/ptr_container/test/Jamfile.v2 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -18,11 +18,13 @@
test-suite ptr_container :
+ [ sc-test ptr_inserter ]
[ sc-test ptr_vector ]
[ sc-test ptr_list ]
[ sc-test ptr_deque ]
[ sc-test ptr_set ]
[ sc-test ptr_map ]
+ [ sc-test ptr_map_adapter ]
[ sc-test ptr_array ]
[ sc-test tree_test ]
[ sc-test incomplete_type_test ]
@@ -32,5 +34,9 @@
[ sc-test indirect_fun ]
[ sc-test serialization : /boost/serialization//boost_serialization ]
[ sc-test no_exceptions ]
-
+
+ [ sc-test ptr_unordered_set ]
+ [ sc-test ptr_unordered_map ]
+ [ sc-test ptr_circular_buffer ]
+
;
Modified: branches/release/libs/ptr_container/test/associative_test_data.hpp
==============================================================================
--- branches/release/libs/ptr_container/test/associative_test_data.hpp (original)
+++ branches/release/libs/ptr_container/test/associative_test_data.hpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -13,10 +13,44 @@
#include <boost/ptr_container/exception.hpp>
#include <boost/range/sub_range.hpp>
-template< typename C, typename B, typename T >
+template< typename C, typename B, typename T, bool Ordered >
void ptr_set_test();
-template< typename C, typename B, typename T >
+template< class T, bool Ordered >
+struct test_algorithms
+{
+ template< class Cont >
+ void operator()( Cont& c, const Cont& c2 ) const
+ {
+ typename Cont::iterator i;
+ typename Cont::const_iterator ci;
+
+ T* t = new T;
+ i = c.lower_bound( *t );
+ ci = c2.lower_bound( *t );
+ i = c.upper_bound( *t );
+ ci = c2.upper_bound( *t );
+ delete t;
+
+ BOOST_DEDUCED_TYPENAME Cont::reverse_iterator ri = c.rbegin();
+ BOOST_DEDUCED_TYPENAME Cont::const_reverse_iterator cri = c2.rbegin();
+ BOOST_DEDUCED_TYPENAME Cont::reverse_iterator rv2 = c.rend();
+ BOOST_DEDUCED_TYPENAME Cont::const_reverse_iterator cvr2 = c2.rend();
+ cri = c.crbegin();
+ cri = c.crend();
+ }
+};
+
+template< class T >
+struct test_algorithms<T,false>
+{
+ template< class Cont>
+ void operator()( Cont& c, const Cont& c2 ) const
+ {
+ }
+};
+
+template< typename C, typename B, typename T, bool Ordered >
void ptr_set_test()
{
using namespace boost;
@@ -27,7 +61,7 @@
BOOST_CHECK( c.size() == 0 );
c.insert( c.end(), new T );
c.insert( c.end(), new T );
-
+
const C c2( c.begin(), c.end() );
BOOST_CHECK( c.size() == c2.size() );
@@ -49,12 +83,10 @@
BOOST_DEDUCED_TYPENAME C::allocator_type alloc = c.get_allocator();
BOOST_DEDUCED_TYPENAME C::iterator i = c.begin();
BOOST_DEDUCED_TYPENAME C::const_iterator ci = c2.begin();
+ ci = c.cbegin();
+ ci = c.cend();
BOOST_DEDUCED_TYPENAME C::iterator i2 = c.end();
BOOST_DEDUCED_TYPENAME C::const_iterator ci2 = c2.begin();
- BOOST_DEDUCED_TYPENAME C::reverse_iterator ri = c.rbegin();
- BOOST_DEDUCED_TYPENAME C::const_reverse_iterator cri = c2.rbegin();
- BOOST_DEDUCED_TYPENAME C::reverse_iterator rv2 = c.rend();
- BOOST_DEDUCED_TYPENAME C::const_reverse_iterator cvr2 = c2.rend();
BOOST_MESSAGE( "finished iterator test" );
@@ -111,6 +143,7 @@
BOOST_CHECK( c3.empty() == false );
c.clear();
unsigned long c3size = c3.size();
+ hide_warning( c3size );
unsigned long num = c. BOOST_NESTED_TEMPLATE transfer<C>( c3.begin(),
c3.end(),
c3 );
@@ -142,14 +175,12 @@
i = c.find( *t );
ci = c2.find( *t );
c2.count( *t );
- i = c.lower_bound( *t );
- ci = c2.lower_bound( *t );
- i = c.upper_bound( *t );
- ci = c2.upper_bound( *t );
+
+ test_algorithms<T,Ordered>()( c, c2 );
sub = c.equal_range( *t );
csub = c2.equal_range( *t );
delete t;
-
+
BOOST_MESSAGE( "finished algorithms interface test" );
}
Modified: branches/release/libs/ptr_container/test/ptr_map.cpp
==============================================================================
--- branches/release/libs/ptr_container/test/ptr_map.cpp (original)
+++ branches/release/libs/ptr_container/test/ptr_map.cpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -381,6 +381,36 @@
}
+#include <boost/tuple/tuple.hpp>
+#include <boost/iterator/zip_iterator.hpp>
+#include <map>
+#include <boost/ptr_container/ptr_map.hpp>
+
+void test_map_iterators()
+{
+ using boost::zip_iterator;
+ using boost::tuple;
+ using boost::make_tuple;
+ using boost::ptr_map;
+ using std::map;
+
+ //typedef map<int, int> theMapType;
+ /*
+ @remark: the following will not compile
+ because of the proxy (non-reference) returned by operator*()
+ of the ptr_map's iterator type.
+
+ typedef boost::ptr_map<int, int> theMapType;
+ typedef zip_iterator
+ <tuple<theMapType::iterator, theMapType::iterator> > zipIter;
+ theMapType map1;
+ theMapType map2;
+ zipIter zip(make_tuple(map1.begin(), map2.begin()));
+ */
+}
+
+
+
using boost::unit_test::test_suite;
test_suite* init_unit_test_suite( int argc, char* argv[] )
@@ -388,6 +418,7 @@
test_suite* test = BOOST_TEST_SUITE( "Pointer Container Test Suite" );
test->add( BOOST_TEST_CASE( &test_map ) );
+ test->add( BOOST_TEST_CASE( &test_map_iterators ) );
return test;
}
Modified: branches/release/libs/ptr_container/test/ptr_map_adapter.cpp
==============================================================================
--- branches/release/libs/ptr_container/test/ptr_map_adapter.cpp (original)
+++ branches/release/libs/ptr_container/test/ptr_map_adapter.cpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -8,25 +8,26 @@
//
// For more information, see http://www.boost.org/libs/ptr_container/
//
-
+
+#include "test_data.hpp"
#include <boost/ptr_container/ptr_map.hpp>
#include <string>
using namespace std;
-int test_main( int, char*[] )
+void test_ptr_map_adapter()
{
- typedef_test< ptr_map<int, Base>, Derived >();
- typedef_test< ptr_map<int, Value>, Value >();
+ //typedef_test< ptr_map<int, Base>, Derived >();
+ //typedef_test< ptr_map<int, Value>, Value >();
- associative_container_test< ptr_map<int, Base>, Base, Derived >();
- associative_container_test< ptr_map<int, Value>, Value, Value >();
+ //associative_container_test< ptr_map<int, Base>, Base, Derived >();
+ //associative_container_test< ptr_map<int, Value>, Value, Value >();
- typedef_test< ptr_multimap<int, Base>, Derived >();
- typedef_test< ptr_multimap<int, Value>, Value >();
+ //typedef_test< ptr_multimap<int, Base>, Derived >();
+ //typedef_test< ptr_multimap<int, Value>, Value >();
- associative_container_test< ptr_multimap<int, Base>, Base, Derived >();
- associative_container_test< ptr_multimap<int, Value>, Value, Value >();
+ //associative_container_test< ptr_multimap<int, Base>, Base, Derived >();
+ //associative_container_test< ptr_multimap<int, Value>, Value, Value >();
string joe = "joe";
string brian = "brian";
@@ -44,7 +45,19 @@
catch( const bad_ptr_container_operation& )
{ }
- return 0;
+ ptr_map<string,int> m2;
+ m2.insert( m2.begin(), *m.begin() );
+ BOOST_CHECK( m != m2 );
+ BOOST_CHECK( m2 < m );
+ m2.insert( m2.begin(), joe, new int(5) );
+ BOOST_CHECK( m != m2 );
+ BOOST_CHECK( m2 > m );
+
+ ptr_multimap<string,int> m3;
+ m3.insert( m3.begin(), *m.begin() );
+ BOOST_CHECK( m3.size() == 1u );
+ m3.insert( m3.begin(), brian, new int(11 ) );
+ BOOST_CHECK( m3.size() == 2u );
}
@@ -56,7 +69,7 @@
{
test_suite* test = BOOST_TEST_SUITE( "Pointer Container Test Suite" );
- test->add( BOOST_TEST_CASE( &test_container_adapter ) );
+ test->add( BOOST_TEST_CASE( &test_ptr_map_adapter ) );
return test;
}
Modified: branches/release/libs/ptr_container/test/ptr_set.cpp
==============================================================================
--- branches/release/libs/ptr_container/test/ptr_set.cpp (original)
+++ branches/release/libs/ptr_container/test/ptr_set.cpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -41,11 +41,11 @@
void test_set()
{
srand( 0 );
- ptr_set_test< ptr_set<Base>, Base, Derived_class >();
- ptr_set_test< ptr_set<Value>, Value, Value >();
+ ptr_set_test< ptr_set<Base>, Base, Derived_class, true >();
+ ptr_set_test< ptr_set<Value>, Value, Value, true >();
- ptr_set_test< ptr_multiset<Base>, Base, Derived_class >();
- ptr_set_test< ptr_multiset<Value>, Value, Value >();
+ ptr_set_test< ptr_multiset<Base>, Base, Derived_class, true >();
+ ptr_set_test< ptr_multiset<Value>, Value, Value, true >();
test_copy< ptr_set<Base>, ptr_set<Derived_class>,
Derived_class>();
Modified: branches/release/libs/ptr_container/test/sequence_test_data.hpp
==============================================================================
--- branches/release/libs/ptr_container/test/sequence_test_data.hpp (original)
+++ branches/release/libs/ptr_container/test/sequence_test_data.hpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -27,20 +27,25 @@
BOOST_MESSAGE( "starting reversible container test" );
enum { max_cnt = 10, size = 100 };
C c;
+ set_capacity<C>()( c );
BOOST_CHECK( c.size() == 0 );
c.push_back( new T );
BOOST_CHECK( c.size() == 1 );
+ const C c2_dummy( c.begin(), c.end() );
+ BOOST_CHECK_EQUAL( c2_dummy.size(), c.size() );
const C c2( c.clone() );
- BOOST_CHECK( c2.size() == c.size() );
+ BOOST_CHECK_EQUAL( c2.size(), c.size() );
C c3( c.begin(), c.end() );
- BOOST_CHECK( c.size() == c3.size() );
+ set_capacity<C>()( c3 );
+ BOOST_CHECK_EQUAL( c.size(), c3.size() );
c.assign( c3.begin(), c3.end() );
- BOOST_CHECK( c.size() == c3.size() );
+ BOOST_CHECK_EQUAL( c.size(), c3.size() );
c.assign( c3 );
+ set_capacity<C>()( c );
BOOST_MESSAGE( "finished construction test" );
C a_copy( c );
@@ -50,10 +55,11 @@
a_copy.clear();
a_copy = a_copy;
BOOST_CHECK( a_copy.empty() );
+ BOOST_CHECK( !c.empty() );
BOOST_MESSAGE( "finished copying test" );
BOOST_DEDUCED_TYPENAME C::allocator_type alloc = c.get_allocator();
- hide_warning(alloc);
+ hide_warning(alloc);
BOOST_DEDUCED_TYPENAME C::iterator i = c.begin();
BOOST_DEDUCED_TYPENAME C::const_iterator ci = c2.begin();
BOOST_DEDUCED_TYPENAME C::iterator i2 = c.end();
@@ -92,10 +98,13 @@
BOOST_MESSAGE( "finished accessors test" );
c.push_back( new T );
+ BOOST_CHECK_EQUAL( c.size(), 4u );
c.pop_back();
+ BOOST_CHECK( !c.empty() );
c.insert( c.end(), new T );
c.insert( c.end(), std::auto_ptr<T>( new T ) );
+ BOOST_CHECK_EQUAL( c.size(), 5u );
#if defined(BOOST_NO_SFINAE) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
#else
@@ -106,6 +115,7 @@
c3.erase( c3.begin(), c3.end() );
c3.erase( boost::make_iterator_range(c3) );
BOOST_CHECK( c3.empty() );
+ BOOST_CHECK( !c.empty() );
c.swap( c3 );
BOOST_CHECK( !c3.empty() );
c3.clear();
@@ -163,12 +173,17 @@
template< class CDerived, class CBase, class T >
void test_transfer()
{
+ BOOST_MESSAGE( "starting transfer test" );
CDerived from;
CBase to;
+ set_capacity<CDerived>()( from );
+ set_capacity<CBase>()( to );
+
from.push_back( new T );
from.push_back( new T );
to. BOOST_NESTED_TEMPLATE transfer<CDerived>( to.end(), from );
+ BOOST_MESSAGE( "finished transfer test" );
}
@@ -220,7 +235,10 @@
template< class IntContainer >
void random_access_algorithms_test()
{
+ BOOST_MESSAGE( "starting random accessors algorithms test" );
+
IntContainer c;
+ set_capacity<IntContainer>()( c );
assign::push_back( c )
( new int(1) )
( new int(3) )
@@ -265,6 +283,7 @@
// C = [0,2,3,6]
IntContainer c2;
+ set_capacity<IntContainer>()( c2 );
assign::push_back( c2 )
( new int(-1) )
( new int(1) )
@@ -276,5 +295,6 @@
BOOST_CHECK( c2.empty() );
BOOST_CHECK( c.size() == 9u );
BOOST_CHECK( is_sorted< std::less_equal<int> >( c ) );
+ BOOST_MESSAGE( "finished random accessors algorithms test" );
}
Modified: branches/release/libs/ptr_container/test/serialization.cpp
==============================================================================
--- branches/release/libs/ptr_container/test/serialization.cpp (original)
+++ branches/release/libs/ptr_container/test/serialization.cpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -19,6 +19,7 @@
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
+#include <boost/functional/hash.hpp>
#include <boost/ptr_container/ptr_container.hpp>
#include <boost/ptr_container/serialize_ptr_container.hpp>
#include <boost/serialization/export.hpp>
@@ -38,6 +39,25 @@
}
//
+// used to customize tests for circular_buffer
+//
+template< class Cont >
+struct set_capacity
+{
+ void operator()( Cont& ) const
+ { }
+};
+
+template<class T>
+struct set_capacity< boost::ptr_circular_buffer<T> >
+{
+ void operator()( boost::ptr_circular_buffer<T>& c ) const
+ {
+ c.set_capacity( 100u );
+ }
+};
+
+//
// class hierarchy
//
struct Base
@@ -48,7 +68,7 @@
template< class Archive >
- void serialize( Archive& ar, const unsigned int version )
+ void serialize( Archive& ar, const unsigned int /*version*/ )
{
ar & boost::serialization::make_nvp( "i", i );
}
@@ -68,12 +88,22 @@
return l.i < r.i;
}
+inline bool operator==( const Base& l, const Base& r )
+{
+ return l.i == r.i;
+}
+
+inline std::size_t hash_value( const Base& b )
+{
+ return boost::hash_value( b.i );
+}
+
struct Derived : Base
{
int i2;
template< class Archive >
- void serialize( Archive& ar, const unsigned int version )
+ void serialize( Archive& ar, const unsigned int /*version*/ )
{
ar & boost::serialization::make_nvp( "Base",
boost::serialization::base_object<Base>( *this ) );
@@ -95,7 +125,7 @@
//
template< class C, class T >
-void add( C& c, T* r, unsigned n )
+void add( C& c, T* r, unsigned /*n*/ )
{
c.insert( c.end(), r );
}
@@ -110,8 +140,10 @@
void test_serialization_helper()
{
Cont vec;
+ set_capacity<Cont>()( vec );
add( vec, new Base( -1 ), 0u );
add( vec, new Derived( 1 ), 1u );
+ BOOST_CHECK_EQUAL( vec.size(), 2u );
std::ofstream ofs("filename");
OArchive oa(ofs);
@@ -127,15 +159,41 @@
BOOST_CHECK_EQUAL( vec.size(), vec2.size() );
BOOST_CHECK_EQUAL( (*vec2.begin()).i, -1 );
- BOOST_CHECK_EQUAL( (*--vec2.end()).i, 0 );
+ BOOST_CHECK_EQUAL( (*++vec2.begin()).i, 0 );
- typename Cont::iterator i = vec2.end();
- --i;
+ typename Cont::iterator i = vec2.begin();
+ ++i;
Derived* d = dynamic_cast<Derived*>( &*i );
BOOST_CHECK_EQUAL( d->i2, 1 );
}
+template< class Cont, class OArchive, class IArchive >
+void test_serialization_unordered_set_helper()
+{
+ Cont vec;
+ set_capacity<Cont>()( vec );
+ add( vec, new Base( -1 ), 0u );
+ add( vec, new Derived( 1 ), 1u );
+ BOOST_CHECK_EQUAL( vec.size(), 2u );
+
+ std::ofstream ofs("filename");
+ OArchive oa(ofs);
+ oa << boost::serialization::make_nvp( "container", as_const(vec) );
+ ofs.close();
+
+
+ std::ifstream ifs("filename", std::ios::binary);
+ IArchive ia(ifs);
+ Cont vec2;
+ ia >> boost::serialization::make_nvp( "container", vec2 );
+ ifs.close();
+
+ BOOST_CHECK_EQUAL( vec.size(), vec2.size() );
+ BOOST_CHECK_EQUAL( (*vec2.begin()).i, 0 );
+ BOOST_CHECK_EQUAL( (*++vec2.begin()).i, -1 );
+}
+
template< class Map, class OArchive, class IArchive >
void test_serialization_map_helper()
{
@@ -209,6 +267,12 @@
test_serialization_helper< boost::ptr_vector<Base>,
boost::archive::xml_oarchive,
boost::archive::xml_iarchive>();
+ test_serialization_helper< boost::ptr_circular_buffer<Base>,
+ boost::archive::text_oarchive,
+ boost::archive::text_iarchive>();
+ test_serialization_helper< boost::ptr_circular_buffer<Base>,
+ boost::archive::xml_oarchive,
+ boost::archive::xml_iarchive>();
test_serialization_helper< boost::ptr_array<Base,2>,
boost::archive::text_oarchive,
boost::archive::text_iarchive>();
@@ -218,7 +282,14 @@
test_serialization_helper< boost::ptr_multiset<Base>,
boost::archive::text_oarchive,
boost::archive::text_iarchive>();
-
+
+ test_serialization_unordered_set_helper< boost::ptr_unordered_set<Base>,
+ boost::archive::text_oarchive,
+ boost::archive::text_iarchive>();
+ test_serialization_unordered_set_helper<boost::ptr_unordered_multiset<Base>,
+ boost::archive::text_oarchive,
+ boost::archive::text_iarchive>();
+
test_serialization_map_helper< boost::ptr_map<std::string,Base>,
boost::archive::text_oarchive,
boost::archive::text_iarchive>();
@@ -233,6 +304,20 @@
boost::archive::xml_oarchive,
boost::archive::xml_iarchive>();
+ test_serialization_map_helper< boost::ptr_unordered_map<std::string,Base>,
+ boost::archive::text_oarchive,
+ boost::archive::text_iarchive>();
+ test_serialization_map_helper< boost::ptr_unordered_multimap<std::string,Base>,
+ boost::archive::text_oarchive,
+ boost::archive::text_iarchive>();
+
+ test_serialization_map_helper< boost::ptr_unordered_map<std::string,Base>,
+ boost::archive::xml_oarchive,
+ boost::archive::xml_iarchive>();
+ test_serialization_map_helper< boost::ptr_unordered_multimap<std::string,Base>,
+ boost::archive::xml_oarchive,
+ boost::archive::xml_iarchive>();
+
}
Modified: branches/release/libs/ptr_container/test/test_data.hpp
==============================================================================
--- branches/release/libs/ptr_container/test/test_data.hpp (original)
+++ branches/release/libs/ptr_container/test/test_data.hpp 2008-06-24 16:36:58 EDT (Tue, 24 Jun 2008)
@@ -14,6 +14,7 @@
#include <boost/config.hpp>
#include <boost/test/test_tools.hpp>
#include <boost/lexical_cast.hpp>
+#include <boost/functional/hash.hpp>
#include <algorithm>
#include <iostream>
#include <string>
@@ -39,6 +40,8 @@
}
Base& operator=( const Base& );
+
+public: // for test reasons only
int data1, data2, data3;
string data;
@@ -67,7 +70,7 @@
Base* clone() const { return do_clone(); }
void foo() { do_foo(); }
- virtual bool less_than( const Base& b ) const
+ virtual bool less_than( const Base& /*b*/ ) const
{
return true;
}
@@ -92,9 +95,9 @@
#endif
private:
- virtual void do_print( ostream& out ) const { };
- virtual Base* do_clone() const { return new Base( *this ); };
- virtual void do_foo() { };
+ virtual void do_print( ostream& /*out*/ ) const { };
+ virtual Base* do_clone() const { return new Base( *this ); };
+ virtual void do_foo() { };
};
#ifdef PTR_CONTAINER_DEBUG
@@ -149,9 +152,23 @@
+inline std::size_t hash_value( const Base& b )
+{
+ std::size_t seed = 0;
+ boost::hash_combine( seed, b.data );
+ boost::hash_combine( seed, b.data1 );
+ boost::hash_combine( seed, b.data2 );
+ boost::hash_combine( seed, b.data3 );
+ return seed;
+}
+
+
class Derived_class : public Base
{
+public: // for test reasons only
int i_;
+
+private:
virtual void do_print( ostream& out ) const
{
@@ -180,12 +197,22 @@
}
};
+
+
+inline std::size_t hash_value( const Derived_class& b )
+{
+ std::size_t seed = hash_value( static_cast<const Base&>( b ) );
+ boost::hash_combine( seed, b.i_ );
+ return seed;
+}
+
//////////////////////////////////////////////////////////////////////////////
// Test class 2: a value class
//////////////////////////////////////////////////////////////////////////////
class Value
{
+public: // for test reasons only
string s_;
public:
@@ -236,23 +263,42 @@
return out << v.name() << " ";
}
+
+
+inline std::size_t hash_value( const Value& v )
+{
+ return boost::hash_value( v.s_ );
+}
+
//
// used to hide "unused variable" warnings
//
template< class T >
-inline void hide_warning( T& r )
+inline void hide_warning( T& /*r*/ )
{ }
//
+// used to customize tests for circular_buffer
+//
+template< class Cont >
+struct set_capacity
+{
+ void operator()( Cont& ) const
+ { }
+};
+
+//
// transfer() test
//
template< class Cont1, class Cont2 >
void transfer_test( Cont1& from, Cont2& to )
{
+ BOOST_MESSAGE( "starting container transfer test" );
BOOST_CHECK( !from.empty() );
to. BOOST_NESTED_TEMPLATE transfer<Cont1>( from );
BOOST_CHECK( !to.empty() );
+ BOOST_MESSAGE( "finishing container transfer test" );
}
@@ -263,7 +309,10 @@
template< class BaseContainer, class DerivedContainer, class Derived >
void container_assignment_test()
{
+ BOOST_MESSAGE( "starting container assignment test" );
+
DerivedContainer derived;
+ set_capacity<DerivedContainer>()( derived );
derived.insert( derived.begin(), new Derived );
derived.insert( derived.begin(), new Derived );
@@ -277,6 +326,8 @@
base2 = base;
BOOST_CHECK_EQUAL( base2.size(), base.size() );
base = base;
+
+ BOOST_MESSAGE( "finished container assignment test" );
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk