///////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2006-2015. // // 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. // ///////////////////////////////////////////////////////////////////////////// #include #include #include #include "itestvalue.hpp" #include "smart_ptr.hpp" #include "common_functors.hpp" #include #include //std::sort #include #include #include "test_macros.hpp" #include "test_container.hpp" #include "unordered_test_common.hpp" #include "unordered_test.hpp" using namespace boost::intrusive; template < class ValueTraits, bool ConstantTimeSize, bool CacheBegin, bool CompareHash, bool Incremental, bool Map, bool DefaultHolder > struct rebinder { typedef unordered_rebinder_common common_t; typedef typename ValueContainer< typename ValueTraits::value_type >::type value_cont_type; template < class Option1 =void , class Option2 =void > struct container { typedef unordered_multiset < typename common_t::value_type , value_traits , constant_time_size , cache_begin , compare_hash , incremental , typename common_t::holder_opt , typename common_t::key_of_value_opt , Option1 , Option2 > type; BOOST_STATIC_ASSERT((key_type_tester::value)); BOOST_STATIC_ASSERT((boost::intrusive::test::is_multikey_true::value)); }; }; enum HookType { Base, Member, NonMember }; template class test_main_template; template class test_main_template { public: static void execute() { typedef testvalue > value_type; static const int random_init[6] = { 3, 2, 4, 1, 5, 2 }; typedef typename ValueContainer< value_type >::type value_cont_type; value_cont_type data (6); for (int i = 0; i < 6; ++i) data[i].value_ = random_init[i]; typedef testvalue_traits< unordered_hooks > testval_traits_t; //base typedef typename detail::if_c < ConstantTimeSize , typename testval_traits_t::base_value_traits , typename testval_traits_t::auto_base_value_traits //store_hash >::type base_hook_t; test::test_unordered < //cache_begin, compare_hash, incremental rebinder >::test_all(data); } }; template class test_main_template { public: static void execute() { typedef testvalue > value_type; static const int random_init[6] = { 3, 2, 4, 1, 5, 2 }; typedef typename ValueContainer< value_type >::type value_cont_type; value_cont_type data (6); for (int i = 0; i < 6; ++i) data[i].value_ = random_init[i]; typedef testvalue_traits< unordered_hooks > testval_traits_t; //member typedef typename detail::if_c < ConstantTimeSize , typename testval_traits_t::member_value_traits //optimize_multikey , typename testval_traits_t::auto_member_value_traits //store_hash, optimize_multikey >::type member_hook_t; test::test_unordered < //cache_begin, compare_hash, incremental rebinder >::test_all(data); } }; template class test_main_template { public: static void execute() { typedef testvalue > value_type; static const int random_init[6] = { 3, 2, 4, 1, 5, 2 }; typedef typename ValueContainer< value_type >::type value_cont_type; value_cont_type data (6); for (int i = 0; i < 6; ++i) data[i].value_ = random_init[i]; typedef testvalue_traits< unordered_hooks > testval_traits_t; //nonmember test::test_unordered < //cache_begin, compare_hash, incremental rebinder >::test_all(data); } }; int main() { //VoidPointer x ConstantTimeSize x Map x DefaultHolder //void pointer test_main_template::execute(); test_main_template::execute(); test_main_template::execute(); test_main_template::execute(); //smart_ptr test_main_template, false, false, false, Member>::execute(); test_main_template, false, true, false, NonMember>::execute(); test_main_template, true, false, false, Base>::execute(); test_main_template, true, true, false, Member>::execute(); ////bounded_ptr (bool ConstantTimeSize, bool Map) //test_main_template_bptr< false, false >::execute(); //test_main_template_bptr< false, true >::execute(); //test_main_template_bptr< true, false >::execute(); //test_main_template_bptr< true, true >::execute(); return boost::report_errors(); }