test_icl_map.hpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*-----------------------------------------------------------------------------+
  2. Copyright (c) 2008-2010: Joachim Faulhaber
  3. +------------------------------------------------------------------------------+
  4. Distributed under the Boost Software License, Version 1.0.
  5. (See accompanying file LICENCE.txt or copy at
  6. http://www.boost.org/LICENSE_1_0.txt)
  7. +-----------------------------------------------------------------------------*/
  8. #ifndef LIBS_ICL_TEST_TEST_ICL_MAP_HPP_JOFA_090119
  9. #define LIBS_ICL_TEST_TEST_ICL_MAP_HPP_JOFA_090119
  10. #include "portability.hpp"
  11. template
  12. <
  13. class T, class U, class Trt,
  14. #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
  15. ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
  16. #else
  17. ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
  18. #endif
  19. >
  20. void icl_map_contains_4_bicremental_types()
  21. {
  22. typedef IntervalMap<T,U,Trt> IntervalMapT;
  23. typedef icl::map<T,U,Trt> MapT;
  24. //CL typedef std::set<T> SetT;
  25. typedef typename MapT::element_type map_element_type;
  26. IntervalMapT itv_map_a;
  27. itv_map_a.add(IDv(2,4,1)).add(IIv(6,7,3));
  28. MapT map_a;
  29. segmental::atomize(map_a, itv_map_a);
  30. BOOST_CHECK_EQUAL( contains(map_a, MK_v(3)), true );
  31. BOOST_CHECK_EQUAL( within(MK_v(3), map_a), true );
  32. map_element_type key_value_pair(MK_v(6), MK_u(3));
  33. BOOST_CHECK( contains(map_a, key_value_pair) );
  34. BOOST_CHECK( within(key_value_pair, map_a) );
  35. }
  36. template
  37. <
  38. class T, class U, class Trt,
  39. #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
  40. ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
  41. #else
  42. ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
  43. #endif
  44. >
  45. void icl_map_find_4_bicremental_types()
  46. {
  47. typedef IntervalMap<T,U,Trt> IntervalMapT;
  48. typedef icl::map<T,U,Trt> MapT;
  49. IntervalMapT itv_map_a;
  50. itv_map_a.add(IDv(2,4,1)).add(IIv(6,7,3));
  51. MapT map_a;
  52. segmental::atomize(map_a, itv_map_a);
  53. typename MapT::const_iterator found = map_a.find(MK_v(6));
  54. BOOST_CHECK_EQUAL( found->second, MK_u(3) );
  55. BOOST_CHECK_EQUAL( map_a(MK_v(6)), MK_u(3) );
  56. found = map_a.find(MK_v(5));
  57. BOOST_CHECK_EQUAL( found == map_a.end(), true );
  58. BOOST_CHECK_EQUAL( map_a(MK_v(5)), MK_u(0) );
  59. }
  60. template
  61. <
  62. class T, class U, class Trt,
  63. #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
  64. ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
  65. #else
  66. ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
  67. #endif
  68. >
  69. void icl_map_inclusion_compare_4_bicremental_types()
  70. {
  71. typedef IntervalMap<T,U,Trt> IntervalMapT;
  72. typedef icl::map<T,U,Trt> MapT;
  73. typedef std::set<T> SetT;
  74. IntervalMapT itv_map_sub_a, itv_map_a, itv_map_super_a,
  75. itv_map_b, itv_map_c;
  76. itv_map_sub_a.add(IDv(2,4,1)).add(IIv(6,7,3));
  77. itv_map_a = itv_map_sub_a;
  78. itv_map_a.add(IIv(9,9,1));
  79. itv_map_c = itv_map_sub_a;
  80. itv_map_c.erase(MK_v(7)).add(IIv(11,11,2));
  81. itv_map_b = itv_map_a;
  82. itv_map_b.set(IIv(6,7,2));
  83. MapT map_sub_a, map_a, map_a2, map_b, map_c;
  84. segmental::atomize(map_a, itv_map_a);
  85. segmental::atomize(map_b, itv_map_b);
  86. segmental::atomize(map_c, itv_map_c);
  87. segmental::atomize(map_sub_a, itv_map_sub_a);
  88. map_a2 = map_a;
  89. BOOST_CHECK_EQUAL( inclusion_compare(MapT(), MapT()), inclusion::equal );
  90. BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_a), inclusion::equal );
  91. BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_a2), inclusion::equal );
  92. BOOST_CHECK_EQUAL( inclusion_compare(map_a, MapT()), inclusion::superset );
  93. BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_sub_a), inclusion::superset );
  94. BOOST_CHECK_EQUAL( inclusion_compare(MapT(), map_a), inclusion::subset );
  95. BOOST_CHECK_EQUAL( inclusion_compare(map_sub_a, map_a), inclusion::subset );
  96. BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_b), inclusion::unrelated );
  97. BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_c), inclusion::unrelated );
  98. SetT set_sub_a, set_a, set_a2, set_b, set_c;
  99. icl::domain(set_a, map_a);
  100. icl::domain(set_a2, map_a2);
  101. icl::domain(set_sub_a, map_sub_a);
  102. BOOST_CHECK_EQUAL( inclusion_compare(MapT(), SetT()), inclusion::equal );
  103. BOOST_CHECK_EQUAL( inclusion_compare(SetT(), MapT()), inclusion::equal );
  104. BOOST_CHECK_EQUAL( inclusion_compare(SetT(), SetT()), inclusion::equal );
  105. BOOST_CHECK_EQUAL( inclusion_compare(map_a, set_a), inclusion::equal );
  106. BOOST_CHECK_EQUAL( inclusion_compare(set_a, map_a), inclusion::equal );
  107. BOOST_CHECK_EQUAL( inclusion_compare(set_a, set_a2), inclusion::equal );
  108. BOOST_CHECK_EQUAL( inclusion_compare(map_a, SetT()), inclusion::superset );
  109. BOOST_CHECK_EQUAL( inclusion_compare(map_a, set_sub_a), inclusion::superset );
  110. BOOST_CHECK_EQUAL( inclusion_compare(SetT(), map_a), inclusion::subset );
  111. BOOST_CHECK_EQUAL( inclusion_compare(set_sub_a, map_a), inclusion::subset );
  112. BOOST_CHECK_EQUAL( inclusion_compare(set_a, SetT()), inclusion::superset );
  113. BOOST_CHECK_EQUAL( inclusion_compare(set_a, set_sub_a), inclusion::superset );
  114. BOOST_CHECK_EQUAL( inclusion_compare(SetT(), set_a), inclusion::subset );
  115. BOOST_CHECK_EQUAL( inclusion_compare(set_sub_a, set_a), inclusion::subset );
  116. BOOST_CHECK_EQUAL( inclusion_compare(set_a, map_c), inclusion::unrelated );
  117. BOOST_CHECK_EQUAL( inclusion_compare(map_c, set_a), inclusion::unrelated );
  118. }
  119. template
  120. <
  121. class T, class U, class Trt,
  122. #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
  123. ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
  124. #else
  125. ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
  126. #endif
  127. >
  128. void icl_map_move_4_discrete_types()
  129. {
  130. typedef icl::map<T,U,Trt> MapT;
  131. typedef typename MapT::element_type map_element_type;
  132. map_element_type kv_6_3(MK_v(6), MK_u(3));
  133. MapT map_b;
  134. map_b.add(kv_6_3);
  135. MapT mv_cons_1(boost::move(MapT().add(kv_6_3)));
  136. MapT cp_cons_1(map_b);
  137. BOOST_CHECK_EQUAL( mv_cons_1, cp_cons_1 );
  138. BOOST_CHECK_EQUAL( map_b, cp_cons_1 );
  139. MapT mv_ass_1, cp_ass_1;
  140. mv_ass_1 = boost::move(MapT().add(kv_6_3));
  141. cp_ass_1 = map_b;
  142. BOOST_CHECK_EQUAL( mv_ass_1, cp_ass_1 );
  143. BOOST_CHECK_EQUAL( map_b, cp_ass_1 );
  144. }
  145. #endif // LIBS_ICL_TEST_TEST_ICL_MAP_HPP_JOFA_090119