test_set_interval_set_shared.hpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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_SET_INTERVAL_SET_SHARED_HPP_JOFA_090119
  9. #define LIBS_ICL_TEST_TEST_SET_INTERVAL_SET_SHARED_HPP_JOFA_090119
  10. #include "portability.hpp"
  11. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  12. void make_3_interval_sets_and_derivatives_1
  13. (ICL_PORT_msvc_7_1_IntervalSet(T)& set_a,
  14. ICL_PORT_msvc_7_1_IntervalSet(T)& set_b,
  15. ICL_PORT_msvc_7_1_IntervalSet(T)& set_c,
  16. typename ICL_PORT_msvc_7_1_IntervalSet(T)::segment_type& segm_d,
  17. typename ICL_PORT_msvc_7_1_IntervalSet(T)::element_type& elem_e)
  18. {
  19. segm_d = I_D(6,9);
  20. elem_e = MK_v(5);
  21. set_a.add(I_D(3,6)).add(I_I(5,7));
  22. set_b.add(C_D(1,3)).add(I_D(8,9));
  23. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  24. }
  25. //------------------------------------------------------------------------------
  26. // Monoid EAN
  27. //------------------------------------------------------------------------------
  28. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  29. void interval_set_check_monoid_plus_4_bicremental_types()
  30. {
  31. typedef IntervalSet<T> IntervalSetT;
  32. IntervalSetT set_a, set_b, set_c;
  33. set_a.add(I_D(3,6)).add(I_I(5,7));
  34. set_b.add(C_D(1,3)).add(I_D(8,9));
  35. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  36. typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
  37. typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
  38. CHECK_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
  39. CHECK_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
  40. }
  41. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  42. void interval_set_check_monoid_et_4_bicremental_types()
  43. {
  44. typedef IntervalSet<T> IntervalSetT;
  45. //CJ typedef typename IntervalSetT::interval_type IntervalT;
  46. IntervalSetT set_a, set_b, set_c;
  47. set_a.add(I_D(3,6)).add(I_I(5,7));
  48. set_b.add(C_D(1,3)).add(I_D(8,9));
  49. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  50. typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
  51. typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
  52. CHECK_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, inter_val1, inter_val2);
  53. CHECK_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, inter_val1, inter_val2);
  54. }
  55. //------------------------------------------------------------------------------
  56. // Abelian monoid EANC
  57. //------------------------------------------------------------------------------
  58. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  59. void interval_set_check_abelian_monoid_plus_4_bicremental_types()
  60. {
  61. typedef IntervalSet<T> IntervalSetT;
  62. IntervalSetT set_a, set_b, set_c;
  63. set_a.add(I_D(3,6)).add(I_I(5,7));
  64. set_b.add(C_D(1,3)).add(I_D(8,9));
  65. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  66. typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
  67. typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
  68. CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
  69. CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
  70. }
  71. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  72. void interval_set_check_abelian_monoid_et_4_bicremental_types()
  73. {
  74. typedef IntervalSet<T> IntervalSetT;
  75. IntervalSetT set_a, set_b, set_c;
  76. set_a.add(I_D(3,6)).add(I_I(5,7));
  77. set_b.add(C_D(1,3)).add(I_D(8,9));
  78. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  79. typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
  80. typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
  81. CHECK_ABELIAN_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, inter_val1, inter_val2);
  82. CHECK_ABELIAN_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, inter_val1, inter_val2);
  83. }
  84. //------------------------------------------------------------------------------
  85. // Abelian partial invertive monoid
  86. //------------------------------------------------------------------------------
  87. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  88. void interval_set_check_partial_invertive_monoid_plus_4_bicremental_types()
  89. {
  90. typedef IntervalSet<T> IntervalSetT;
  91. IntervalSetT set_a, set_b, set_c;
  92. set_a.add(I_D(3,6)).add(I_I(5,7));
  93. set_b.add(C_D(1,3)).add(I_D(8,9));
  94. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  95. typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
  96. typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
  97. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
  98. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
  99. }
  100. //------------------------------------------------------------------------------
  101. // Containedness
  102. //------------------------------------------------------------------------------
  103. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  104. void interval_set_check_containedness_4_bicremental_types()
  105. {
  106. typedef IntervalSet<T> IntervalSetT;
  107. typedef typename IntervalSetT::segment_type segment_type;
  108. typedef typename IntervalSetT::element_type element_type;
  109. IntervalSetT set_a, set_b, set_c;
  110. segment_type segm_d;
  111. element_type elem_e;
  112. make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
  113. check_intersection_containedness(set_a, set_c);
  114. check_intersection_containedness(set_b, segm_d);
  115. check_intersection_containedness(set_c, elem_e);
  116. check_union_containedness(set_c, set_c);
  117. check_union_containedness(set_b, segm_d);
  118. check_union_containedness(set_a, elem_e);
  119. }
  120. //------------------------------------------------------------------------------
  121. // Inner complement
  122. //------------------------------------------------------------------------------
  123. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  124. void interval_set_check_inner_complementarity_4_bicremental_types()
  125. {
  126. typedef IntervalSet<T> IntervalSetT;
  127. typedef typename IntervalSetT::segment_type segment_type;
  128. typedef typename IntervalSetT::element_type element_type;
  129. IntervalSetT set_a, set_b, set_c;
  130. segment_type segm_d;
  131. element_type elem_e;
  132. make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
  133. has_inner_complementarity<IntervalSetT,IntervalSetT>(set_a);
  134. has_inner_complementarity<IntervalSetT,IntervalSetT>(set_b);
  135. has_inner_complementarity<IntervalSetT,IntervalSetT>(set_c);
  136. }
  137. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  138. void interval_set_check_length_complementarity_4_bicremental_types()
  139. {
  140. typedef IntervalSet<T> IntervalSetT;
  141. typedef typename IntervalSetT::segment_type segment_type;
  142. typedef typename IntervalSetT::element_type element_type;
  143. IntervalSetT set_a, set_b, set_c;
  144. segment_type segm_d;
  145. element_type elem_e;
  146. make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
  147. has_length_complementarity(set_a);
  148. has_length_complementarity(set_b);
  149. has_length_complementarity(set_c);
  150. has_length_as_distance<IntervalSetT,IntervalSetT>(set_a);
  151. has_length_as_distance<IntervalSetT,IntervalSetT>(set_b);
  152. has_length_as_distance<IntervalSetT,IntervalSetT>(set_c);
  153. }
  154. #endif // LIBS_ICL_TEST_TEST_SET_INTERVAL_SET_SHARED_HPP_JOFA_090119