51de75799b
- Refactored hashtable containers to reduce template instantiations.
82 lines
2.2 KiB
C++
82 lines
2.2 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// (C) Copyright Ion Gaztanaga 2006-2013
|
|
//
|
|
// 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
|
|
|
|
#include <boost/intrusive/intrusive_fwd.hpp>
|
|
#include <algorithm> //std::unique
|
|
|
|
namespace boost{
|
|
namespace intrusive{
|
|
namespace test{
|
|
|
|
template <class T>
|
|
struct is_multikey_true
|
|
{
|
|
typedef char yes_type;
|
|
template<bool IsMultikey>
|
|
struct two { yes_type _[1+IsMultikey]; };
|
|
template <class U> static yes_type test(...);
|
|
template <class U> static two<U::is_multikey>test(int);
|
|
static const bool value = sizeof(test<T>(0)) != sizeof(yes_type);
|
|
};
|
|
|
|
} //namespace test{
|
|
|
|
template<class It1, class It2>
|
|
bool test_equal(It1 f1, It1 l1, It2 f2)
|
|
{
|
|
while(f1 != l1){
|
|
if(*f1 != *f2){
|
|
return false;
|
|
}
|
|
++f1;
|
|
++f2;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
#define TEST_INTRUSIVE_SEQUENCE( INTVALUES, ITERATOR )\
|
|
{ \
|
|
BOOST_TEST (boost::intrusive::test_equal(&INTVALUES[0], &INTVALUES[0] + sizeof(INTVALUES)/sizeof(INTVALUES[0]), ITERATOR) ); \
|
|
}
|
|
|
|
#define TEST_INTRUSIVE_SEQUENCE_EXPECTED( EXPECTEDVECTOR, ITERATOR )\
|
|
{ \
|
|
BOOST_TEST (boost::intrusive::test_equal(EXPECTEDVECTOR.begin(), EXPECTEDVECTOR.end(), ITERATOR) ); \
|
|
}
|
|
|
|
namespace test{
|
|
|
|
template<class Container, class Vector>
|
|
void test_intrusive_maybe_unique(const Container &c, Vector &v)
|
|
{
|
|
if(!is_multikey_true<Container>::value)
|
|
v.erase(std::unique(v.begin(), v.end()), v.end());
|
|
BOOST_TEST (boost::intrusive::test_equal(v.begin(), v.end(), c.begin()) );
|
|
}
|
|
|
|
} //namespace test{
|
|
|
|
#define TEST_INTRUSIVE_SEQUENCE_MAYBEUNIQUE(INTVALUES, CONTAINER)\
|
|
{\
|
|
boost::container::vector<int>v(&INTVALUES[0], &INTVALUES[0] + sizeof(INTVALUES)/sizeof(INTVALUES[0]));\
|
|
boost::intrusive::test::test_intrusive_maybe_unique(CONTAINER, v);\
|
|
}\
|
|
//
|
|
|
|
} //namespace boost{
|
|
} //namespace intrusive{
|
|
|
|
#endif
|