123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /////////////////////////////////////////////////////////////////////////////
- //
- // (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
|