test_interval_set_laws_shared.hpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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_INTERVAL_SET_LAWS_SHARED_HPP_JOFA_090201
  9. #define LIBS_ICL_TEST_TEST_INTERVAL_SET_LAWS_SHARED_HPP_JOFA_090201
  10. //------------------------------------------------------------------------------
  11. // Monoid EAN
  12. //------------------------------------------------------------------------------
  13. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  14. void interval_set_check_monoid_plus_4_bicremental_types()
  15. {
  16. typedef IntervalSet<T> IntervalSetT;
  17. IntervalSetT set_a, set_b, set_c;
  18. set_a.add(I_D(3,6)).add(I_I(5,7));
  19. set_b.add(C_D(1,3)).add(I_D(8,9));
  20. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  21. typename IntervalSetT::segment_type segm = I_D(6,9);
  22. T elem = make<T>(5);
  23. CHECK_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, segm, elem);
  24. CHECK_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, segm, elem);
  25. }
  26. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  27. void interval_set_check_monoid_et_4_bicremental_types()
  28. {
  29. typedef IntervalSet<T> IntervalSetT;
  30. IntervalSetT set_a, set_b, set_c;
  31. set_a.add(I_D(3,6)).add(I_I(5,7));
  32. set_b.add(C_D(1,3)).add(I_D(8,9));
  33. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  34. typename IntervalSetT::segment_type segm = I_D(6,9);
  35. T elem = make<T>(5);
  36. CHECK_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, segm, elem);
  37. CHECK_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, segm, elem);
  38. }
  39. //------------------------------------------------------------------------------
  40. // Abelian monoid EANC
  41. //------------------------------------------------------------------------------
  42. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  43. void interval_set_check_abelian_monoid_plus_4_bicremental_types()
  44. {
  45. typedef IntervalSet<T> IntervalSetT;
  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 segm = I_D(6,9);
  51. T elem = make<T>(5);
  52. CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, segm, elem);
  53. CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, segm, elem);
  54. }
  55. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  56. void interval_set_check_abelian_monoid_et_4_bicremental_types()
  57. {
  58. typedef IntervalSet<T> IntervalSetT;
  59. IntervalSetT set_a, set_b, set_c;
  60. set_a.add(I_D(3,6)).add(I_I(5,7));
  61. set_b.add(C_D(1,3)).add(I_D(8,9));
  62. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  63. typename IntervalSetT::segment_type segm = I_D(6,9);
  64. T elem = make<T>(5);
  65. CHECK_ABELIAN_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, segm, elem);
  66. CHECK_ABELIAN_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, segm, elem);
  67. }
  68. //------------------------------------------------------------------------------
  69. // Abelian partial invertive monoid
  70. //------------------------------------------------------------------------------
  71. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  72. void interval_set_check_partial_invertive_monoid_plus_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 segm = I_D(6,9);
  80. T elem = make<T>(5);
  81. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, segm, elem);
  82. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, segm, elem);
  83. }
  84. //------------------------------------------------------------------------------
  85. // Abelian partial invertive monoid with distinct equality for inversion
  86. //------------------------------------------------------------------------------
  87. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  88. void interval_set_check_partial_invertive_monoid_plus_prot_inv_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 segm = I_D(6,9);
  96. T elem = make<T>(5);
  97. CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus)(set_a, set_b, set_c, segm, elem);
  98. CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe)(set_a, set_b, set_c, segm, elem);
  99. #if !defined(_MSC_VER) || (_MSC_VER >= 1400) // 1310==MSVC-7.1 1400 ==MSVC-8.0
  100. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT_EQUAL(plus)(is_distinct_equal, set_a, set_b, set_c, segm, elem);
  101. CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT_EQUAL(pipe)(is_distinct_equal, set_a, set_b, set_c, segm, elem);
  102. #endif
  103. }
  104. //------------------------------------------------------------------------------
  105. // Abelian group EANIC
  106. //------------------------------------------------------------------------------
  107. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  108. void interval_set_check_abelian_group_plus_4_bicremental_types()
  109. {
  110. typedef IntervalSet<T> IntervalSetT;
  111. IntervalSetT set_a, set_b, set_c;
  112. set_a.add(I_D(3,6)).add(I_I(5,7));
  113. set_b.add(C_D(1,3)).add(I_D(8,9));
  114. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  115. typename IntervalSetT::segment_type segm = I_D(6,9);
  116. T elem = make<T>(5);
  117. CHECK_ABELIAN_GROUP_INSTANCE_WRT(plus) (set_a, set_b, set_c, segm, elem);
  118. CHECK_ABELIAN_GROUP_INSTANCE_WRT(pipe) (set_a, set_b, set_c, segm, elem);
  119. }
  120. //------------------------------------------------------------------------------
  121. // (0 - x) + x =d= 0 |
  122. //------------------------------------------------------------------------------
  123. template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
  124. void interval_set_check_abelian_group_plus_prot_inv_4_bicremental_types()
  125. {
  126. typedef IntervalSet<T> IntervalSetT;
  127. IntervalSetT set_a, set_b, set_c;
  128. set_a.add(I_D(3,6)).add(I_I(5,7));
  129. set_b.add(C_D(1,3)).add(I_D(8,9));
  130. set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
  131. typename IntervalSetT::segment_type segm = I_D(6,9);
  132. T elem = make<T>(5);
  133. CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, segm, elem);
  134. CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, segm, elem);
  135. #if !defined(_MSC_VER) || (_MSC_VER >= 1400) // 1310==MSVC-7.1 1400 ==MSVC-8.0
  136. CHECK_ABELIAN_GROUP_INSTANCE_WRT_EQUAL(plus) (is_distinct_equal, set_a, set_b, set_c, segm, elem);
  137. CHECK_ABELIAN_GROUP_INSTANCE_WRT_EQUAL(pipe) (is_distinct_equal, set_a, set_b, set_c, segm, elem);
  138. #endif
  139. }
  140. #endif // LIBS_ICL_TEST_TEST_INTERVAL_SET_LAWS_SHARED_HPP_JOFA_090201