bs_set_test.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2006-2015.
  4. //
  5. // Distributed under the Boost Software License, Version 1.0.
  6. // (See accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. // See http://www.boost.org/libs/intrusive for documentation.
  10. //
  11. /////////////////////////////////////////////////////////////////////////////
  12. #include <boost/intrusive/bs_set.hpp>
  13. #include "itestvalue.hpp"
  14. #include "bptr_value.hpp"
  15. #include "smart_ptr.hpp"
  16. #include "generic_set_test.hpp"
  17. #include "bs_test_common.hpp"
  18. using namespace boost::intrusive;
  19. template < class ValueTraits, bool ConstantTimeSize, bool DefaultHolder, bool Map >
  20. struct rebinder
  21. {
  22. typedef tree_rebinder_common<ValueTraits, DefaultHolder, Map> common_t;
  23. typedef typename ValueContainer< typename ValueTraits::value_type >::type value_cont_type;
  24. template < class Option1 =void
  25. , class Option2 =void
  26. >
  27. struct container
  28. {
  29. typedef bs_set
  30. < typename common_t::value_type
  31. , value_traits<ValueTraits>
  32. , constant_time_size<ConstantTimeSize>
  33. , typename common_t::holder_opt
  34. , typename common_t::key_of_value_opt
  35. , Option1
  36. , Option2
  37. > type;
  38. BOOST_STATIC_ASSERT((key_type_tester<typename common_t::key_of_value_opt, type>::value));
  39. };
  40. };
  41. enum HookType
  42. {
  43. Base,
  44. Member,
  45. NonMember
  46. };
  47. template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map, HookType Type>
  48. class test_main_template;
  49. template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
  50. class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, Base>
  51. {
  52. public:
  53. static void execute()
  54. {
  55. typedef testvalue_traits< bs_hooks<VoidPointer> > testval_traits_t;
  56. //base
  57. typedef typename detail::if_c
  58. < ConstantTimeSize
  59. , typename testval_traits_t::base_value_traits
  60. , typename testval_traits_t::auto_base_value_traits
  61. >::type base_hook_t;
  62. test::test_generic_set
  63. < rebinder<base_hook_t, ConstantTimeSize, DefaultHolder, Map>
  64. >::test_all();
  65. }
  66. };
  67. template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
  68. class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, Member>
  69. {
  70. public:
  71. static void execute()
  72. {
  73. typedef testvalue_traits< bs_hooks<VoidPointer> > testval_traits_t;
  74. //member
  75. typedef typename detail::if_c
  76. < ConstantTimeSize
  77. , typename testval_traits_t::member_value_traits
  78. , typename testval_traits_t::auto_member_value_traits
  79. >::type member_hook_t;
  80. test::test_generic_set
  81. < rebinder<member_hook_t, ConstantTimeSize, DefaultHolder, Map>
  82. >::test_all();
  83. }
  84. };
  85. template<class VoidPointer, bool ConstantTimeSize, bool DefaultHolder, bool Map>
  86. class test_main_template<VoidPointer, ConstantTimeSize, DefaultHolder, Map, NonMember>
  87. {
  88. public:
  89. static void execute()
  90. {
  91. typedef testvalue_traits< bs_hooks<VoidPointer> > testval_traits_t;
  92. //nonmember
  93. test::test_generic_set
  94. < rebinder<typename testval_traits_t::nonhook_value_traits, ConstantTimeSize, DefaultHolder, Map>
  95. >::test_all();
  96. }
  97. };
  98. template < bool ConstantTimeSize, bool Map >
  99. struct test_main_template_bptr
  100. {
  101. static void execute()
  102. {
  103. typedef BPtr_Value_Traits< Tree_BPtr_Node_Traits > value_traits;
  104. typedef bounded_allocator< BPtr_Value > allocator_type;
  105. bounded_allocator_scope<allocator_type> bounded_scope; (void)bounded_scope;
  106. test::test_generic_set
  107. < rebinder< value_traits, ConstantTimeSize, true, Map>
  108. >::test_all();
  109. }
  110. };
  111. int main()
  112. {
  113. //Combinations: VoidPointer x ConstantTimeSize x DefaultHolder x Map
  114. //Minimize them selecting different combinations for raw and smart pointers
  115. //Start with ('false', 'false', 'false') in sets and 'false', 'false', 'true' in multisets
  116. //void pointer
  117. test_main_template<void*, false, false, false, Base>::execute();
  118. //test_main_template<void*, false, false, true>::execute();
  119. test_main_template<void*, false, true, false, Member>::execute();
  120. //test_main_template<void*, false, true, true>::execute();
  121. test_main_template<void*, true, false, false, Base>::execute();
  122. //test_main_template<void*, true, false, true>::execute();
  123. test_main_template<void*, true, true, false, Member>::execute();
  124. test_main_template<void*, true, true, true, NonMember>::execute();
  125. //smart_ptr
  126. //test_main_template<smart_ptr<void>, false, false, false>::execute();
  127. test_main_template<smart_ptr<void>, false, false, true, Base>::execute();
  128. //test_main_template<smart_ptr<void>, false, true, false>::execute();
  129. test_main_template<smart_ptr<void>, false, true, true, Member>::execute();
  130. //test_main_template<smart_ptr<void>, true, false, false>::execute();
  131. test_main_template<smart_ptr<void>, true, false, true, NonMember>::execute();
  132. //test_main_template<smart_ptr<void>, true, true, false>::execute();
  133. //test_main_template<smart_ptr<void>, true, true, true>::execute();
  134. //bounded_ptr (bool ConstantTimeSize, bool Map)
  135. test_main_template_bptr< false, false >::execute();
  136. //test_main_template_bptr< false, true >::execute();
  137. //test_main_template_bptr< true, false >::execute();
  138. test_main_template_bptr< true, true >::execute();
  139. return boost::report_errors();
  140. }