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
11 #include "portability.hpp"
13 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
14 void make_3_interval_sets_and_derivatives_1
15 (ICL_PORT_msvc_7_1_IntervalSet(T)& set_a,
16 ICL_PORT_msvc_7_1_IntervalSet(T)& set_b,
17 ICL_PORT_msvc_7_1_IntervalSet(T)& set_c,
18 typename ICL_PORT_msvc_7_1_IntervalSet(T)::segment_type& segm_d,
19 typename ICL_PORT_msvc_7_1_IntervalSet(T)::element_type& elem_e)
21 typedef IntervalSet<T> IntervalSetT;
22 typedef typename IntervalSetT::segment_type IntervalT;
23 typedef typename IntervalSetT::segment_type segment_type;
24 typedef typename IntervalSetT::element_type element_type;
29 set_a.add(I_D(3,6)).add(I_I(5,7));
30 set_b.add(C_D(1,3)).add(I_D(8,9));
31 set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
36 //------------------------------------------------------------------------------
38 //------------------------------------------------------------------------------
39 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
40 void interval_set_check_monoid_plus_4_bicremental_types()
42 typedef IntervalSet<T> IntervalSetT;
43 typedef typename IntervalSetT::interval_type IntervalT;
45 IntervalSetT set_a, set_b, set_c;
46 set_a.add(I_D(3,6)).add(I_I(5,7));
47 set_b.add(C_D(1,3)).add(I_D(8,9));
48 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);
53 CHECK_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
54 CHECK_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
57 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
58 void interval_set_check_monoid_et_4_bicremental_types()
60 typedef IntervalSet<T> IntervalSetT;
61 typedef typename IntervalSetT::interval_type IntervalT;
63 IntervalSetT set_a, set_b, set_c;
64 set_a.add(I_D(3,6)).add(I_I(5,7));
65 set_b.add(C_D(1,3)).add(I_D(8,9));
66 set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
68 typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
69 typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
71 CHECK_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, inter_val1, inter_val2);
72 CHECK_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, inter_val1, inter_val2);
75 //------------------------------------------------------------------------------
76 // Abelian monoid EANC
77 //------------------------------------------------------------------------------
79 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
80 void interval_set_check_abelian_monoid_plus_4_bicremental_types()
82 typedef IntervalSet<T> IntervalSetT;
83 typedef typename IntervalSetT::interval_type IntervalT;
85 IntervalSetT set_a, set_b, set_c;
86 set_a.add(I_D(3,6)).add(I_I(5,7));
87 set_b.add(C_D(1,3)).add(I_D(8,9));
88 set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
90 typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
91 typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
93 CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
94 CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
97 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
98 void interval_set_check_abelian_monoid_et_4_bicremental_types()
100 typedef IntervalSet<T> IntervalSetT;
101 typedef typename IntervalSetT::interval_type IntervalT;
103 IntervalSetT set_a, set_b, set_c;
104 set_a.add(I_D(3,6)).add(I_I(5,7));
105 set_b.add(C_D(1,3)).add(I_D(8,9));
106 set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
108 typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
109 typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
111 CHECK_ABELIAN_MONOID_INSTANCE_WRT(et) (set_a, set_b, set_c, inter_val1, inter_val2);
112 CHECK_ABELIAN_MONOID_INSTANCE_WRT(caret)(set_a, set_b, set_c, inter_val1, inter_val2);
116 //------------------------------------------------------------------------------
117 // Abelian partial invertive monoid
118 //------------------------------------------------------------------------------
119 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
120 void interval_set_check_partial_invertive_monoid_plus_4_bicremental_types()
122 typedef IntervalSet<T> IntervalSetT;
123 typedef typename IntervalSetT::interval_type IntervalT;
125 IntervalSetT set_a, set_b, set_c;
126 set_a.add(I_D(3,6)).add(I_I(5,7));
127 set_b.add(C_D(1,3)).add(I_D(8,9));
128 set_c.add(I_D(0,9)).add(I_I(3,6)).add(I_D(5,7));
130 typename IntervalSetT::segment_type inter_val1 = I_D(6,9);
131 typename IntervalSetT::segment_type inter_val2 = I_I(5,5);
133 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(plus) (set_a, set_b, set_c, inter_val1, inter_val2);
134 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(pipe) (set_a, set_b, set_c, inter_val1, inter_val2);
138 //------------------------------------------------------------------------------
140 //------------------------------------------------------------------------------
141 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
142 void interval_set_check_containedness_4_bicremental_types()
144 typedef IntervalSet<T> IntervalSetT;
145 typedef typename IntervalSetT::segment_type segment_type;
146 typedef typename IntervalSetT::element_type element_type;
148 IntervalSetT set_a, set_b, set_c;
151 make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
153 check_intersection_containedness(set_a, set_c);
154 check_intersection_containedness(set_b, segm_d);
155 check_intersection_containedness(set_c, elem_e);
157 check_union_containedness(set_c, set_c);
158 check_union_containedness(set_b, segm_d);
159 check_union_containedness(set_a, elem_e);
163 //------------------------------------------------------------------------------
165 //------------------------------------------------------------------------------
166 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
167 void interval_set_check_inner_complementarity_4_bicremental_types()
169 typedef IntervalSet<T> IntervalSetT;
170 typedef typename IntervalSetT::segment_type segment_type;
171 typedef typename IntervalSetT::element_type element_type;
173 IntervalSetT set_a, set_b, set_c;
176 make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
178 has_inner_complementarity<IntervalSetT,IntervalSetT>(set_a);
179 has_inner_complementarity<IntervalSetT,IntervalSetT>(set_b);
180 has_inner_complementarity<IntervalSetT,IntervalSetT>(set_c);
183 template <class T, ICL_IntervalSet_TEMPLATE(_T) IntervalSet>
184 void interval_set_check_length_complementarity_4_bicremental_types()
186 typedef IntervalSet<T> IntervalSetT;
187 typedef typename IntervalSetT::segment_type segment_type;
188 typedef typename IntervalSetT::element_type element_type;
190 IntervalSetT set_a, set_b, set_c;
193 make_3_interval_sets_and_derivatives_1(set_a, set_b, set_c, segm_d, elem_e);
195 has_length_complementarity(set_a);
196 has_length_complementarity(set_b);
197 has_length_complementarity(set_c);
199 has_length_as_distance<IntervalSetT,IntervalSetT>(set_a);
200 has_length_as_distance<IntervalSetT,IntervalSetT>(set_b);
201 has_length_as_distance<IntervalSetT,IntervalSetT>(set_c);
204 #endif // LIBS_ICL_TEST_TEST_SET_INTERVAL_SET_SHARED_HPP_JOFA_090119