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_QUANTIFIER_SHARED_HPP_JOFA_100819
9 #define LIBS_ICL_TEST_TEST_ICL_QUANTIFIER_SHARED_HPP_JOFA_100819
10
11 #include "portability.hpp"
12
13 template
14 <
15 class T, class U, class Trt,
16 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
17 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
18 #else
19 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
20 #endif
21 >
make_3_icl_maps_and_derivatives_1(icl::map<T,U,Trt> & map_a,icl::map<T,U,Trt> & map_b,icl::map<T,U,Trt> & map_c,std::pair<T,U> & map_pair_a,std::pair<T,U> & map_pair_b,ICL_PORT_msvc_7_1_IntervalMap (T,U,Trt)*)22 void make_3_icl_maps_and_derivatives_1
23 (icl::map<T,U,Trt>& map_a,
24 icl::map<T,U,Trt>& map_b,
25 icl::map<T,U,Trt>& map_c,
26 std::pair<T,U>& map_pair_a,
27 std::pair<T,U>& map_pair_b,
28 ICL_PORT_msvc_7_1_IntervalMap(T,U,Trt)*)
29 {
30 typedef IntervalMap<T,U,Trt> IntervalMapT;
31
32 map_pair_a = sK_v(5,1);
33 map_pair_b = sK_v(9,1);
34
35 add(map_a, sK_v(3,1));
36 add(map_a, sK_v(4,1));
37 add(map_a, sK_v(5,1));
38 add(map_a, sK_v(5,1));
39 add(map_a, sK_v(6,1));
40 add(map_a, sK_v(7,1));
41
42 add(map_b, sK_v(2,1));
43 add(map_b, sK_v(8,1));
44
45 add(map_c, sK_v(0,2));
46 add(map_c, sK_v(1,2));
47 add(map_c, sK_v(2,2));
48 add(map_c, sK_v(3,2));
49 add(map_c, sK_v(4,2));
50 add(map_c, sK_v(5,2));
51 add(map_c, sK_v(6,2));
52 add(map_c, sK_v(7,2));
53 add(map_c, sK_v(8,2));
54
55 add(map_c, sK_v(3,1));
56 add(map_c, sK_v(4,1));
57 add(map_c, sK_v(5,1));
58 add(map_c, sK_v(6,1));
59
60 add(map_c, sK_v(5,1));
61 add(map_c, sK_v(6,1));
62 }
63
64
65 //------------------------------------------------------------------------------
66 // Monoid EAN
67 //------------------------------------------------------------------------------
68 template
69 <
70 class T, class U, class Trt,
71 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
72 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
73 #else
74 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
75 #endif
76 >
icl_quantifier_check_monoid_plus_4_bicremental_types()77 void icl_quantifier_check_monoid_plus_4_bicremental_types()
78 {
79 typedef IntervalMap<T,U,Trt> IntervalMapT;
80 typedef icl::map<T,U,Trt> MapT;
81 IntervalMapT aux;
82 MapT map_a, map_b, map_c;
83 std::pair<T,U> map_pair_a, map_pair_b;
84 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
85
86 CHECK_MONOID_INSTANCE_WRT(plus) (map_a, map_b, map_c, map_pair_a, map_pair_b);
87 CHECK_MONOID_INSTANCE_WRT(pipe) (map_a, map_b, map_c, map_pair_a, map_pair_b);
88 }
89
90
91 template
92 <
93 class T, class U, class Trt,
94 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
95 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
96 #else
97 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
98 #endif
99 >
icl_quantifier_check_monoid_et_4_bicremental_types()100 void icl_quantifier_check_monoid_et_4_bicremental_types()
101 {
102 typedef IntervalMap<T,U,Trt> IntervalMapT;
103 typedef icl::map<T,U,Trt> MapT;
104 IntervalMapT aux;
105 MapT map_a, map_b, map_c;
106 std::pair<T,U> map_pair_a, map_pair_b;
107 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
108
109 CHECK_MONOID_INSTANCE_WRT(et) (map_a, map_b, map_c, map_pair_a, map_pair_b);
110 CHECK_MONOID_INSTANCE_WRT(caret)(map_a, map_b, map_c, map_pair_a, map_pair_b);
111 }
112
113 //------------------------------------------------------------------------------
114 // Abelian monoid EANC
115 //------------------------------------------------------------------------------
116
117 template
118 <
119 class T, class U, class Trt,
120 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
121 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
122 #else
123 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
124 #endif
125 >
icl_quantifier_check_abelian_monoid_plus_4_bicremental_types()126 void icl_quantifier_check_abelian_monoid_plus_4_bicremental_types()
127 {
128 typedef IntervalMap<T,U,Trt> IntervalMapT;
129 typedef icl::map<T,U,Trt> MapT;
130 IntervalMapT aux;
131 MapT map_a, map_b, map_c;
132 std::pair<T,U> map_pair_a, map_pair_b;
133 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
134
135 CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (map_a, map_b, map_c, map_pair_a, map_pair_b);
136 CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (map_a, map_b, map_c, map_pair_a, map_pair_b);
137 }
138
139
140 template
141 <
142 class T, class U, class Trt,
143 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
144 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
145 #else
146 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
147 #endif
148 >
icl_quantifier_check_abelian_monoid_et_4_bicremental_types()149 void icl_quantifier_check_abelian_monoid_et_4_bicremental_types()
150 {
151 typedef IntervalMap<T,U,Trt> IntervalMapT;
152 typedef icl::map<T,U,Trt> MapT;
153 IntervalMapT aux;
154 MapT map_a, map_b, map_c;
155 std::pair<T,U> map_pair_a, map_pair_b;
156 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
157
158 CHECK_ABELIAN_MONOID_INSTANCE_WRT(et) (map_a, map_b, map_c, map_pair_a, map_pair_b);
159 CHECK_ABELIAN_MONOID_INSTANCE_WRT(caret)(map_a, map_b, map_c, map_pair_a, map_pair_b);
160 }
161
162
163 //------------------------------------------------------------------------------
164 // Abelian partial invertive monoid
165 //------------------------------------------------------------------------------
166 template
167 <
168 class T, class U, class Trt,
169 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
170 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
171 #else
172 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
173 #endif
174 >
icl_quantifier_check_partial_invertive_monoid_plus_4_bicremental_types()175 void icl_quantifier_check_partial_invertive_monoid_plus_4_bicremental_types()
176 {
177 typedef IntervalMap<T,U,Trt> IntervalMapT;
178 typedef icl::map<T,U,Trt> MapT;
179 IntervalMapT aux;
180 MapT map_a, map_b, map_c;
181 std::pair<T,U> map_pair_a, map_pair_b;
182 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
183
184 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(plus) (map_a, map_b, map_c, map_pair_a, map_pair_b);
185 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT(pipe) (map_a, map_b, map_c, map_pair_a, map_pair_b);
186 }
187
188 //------------------------------------------------------------------------------
189 // Abelian partial invertive monoid with distinct equality for inversion
190 //------------------------------------------------------------------------------
191 template
192 <
193 class T, class U, class Trt,
194 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
195 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
196 #else
197 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
198 #endif
199 >
icl_quantifier_check_partial_invertive_monoid_plus_prot_inv_4_bicremental_types()200 void icl_quantifier_check_partial_invertive_monoid_plus_prot_inv_4_bicremental_types()
201 {
202 typedef IntervalMap<T,U,Trt> IntervalMapT;
203 typedef icl::map<T,U,Trt> MapT;
204 IntervalMapT aux;
205 MapT map_a, map_b, map_c;
206 std::pair<T,U> map_pair_a, map_pair_b;
207 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
208
209 CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus)(map_a, map_b, map_c, map_pair_a, map_pair_b);
210 CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe)(map_a, map_b, map_c, map_pair_a, map_pair_b);
211
212 #if !defined(_MSC_VER) || (_MSC_VER >= 1400) // 1310==MSVC-7.1 1400 ==MSVC-8.0
213 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT_EQUAL(plus)(is_distinct_equal, map_a, map_b, map_c, map_pair_a, map_pair_b);
214 CHECK_PARTIAL_INVERTIVE_MONOID_INSTANCE_WRT_EQUAL(pipe)(is_distinct_equal, map_a, map_b, map_c, map_pair_a, map_pair_b);
215 #endif
216 }
217
218
219 //------------------------------------------------------------------------------
220 // Abelian group EANIC
221 //------------------------------------------------------------------------------
222 template
223 <
224 class T, class U, class Trt,
225 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
226 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
227 #else
228 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
229 #endif
230 >
icl_quantifier_check_abelian_group_plus_4_bicremental_types()231 void icl_quantifier_check_abelian_group_plus_4_bicremental_types()
232 {
233 typedef IntervalMap<T,U,Trt> IntervalMapT;
234 typedef icl::map<T,U,Trt> MapT;
235 IntervalMapT aux;
236 MapT map_a, map_b, map_c;
237 std::pair<T,U> map_pair_a, map_pair_b;
238 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
239
240 CHECK_ABELIAN_GROUP_INSTANCE_WRT(plus) (map_a, map_b, map_c, map_pair_a, map_pair_b);
241 CHECK_ABELIAN_GROUP_INSTANCE_WRT(pipe) (map_a, map_b, map_c, map_pair_a, map_pair_b);
242 }
243
244 //------------------------------------------------------------------------------
245 // (0 - x) + x =d= 0
246 //------------------------------------------------------------------------------
247 template
248 <
249 class T, class U, class Trt,
250 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
251 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
252 #else
253 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
254 #endif
255 >
icl_quantifier_check_abelian_group_plus_prot_inv_4_bicremental_types()256 void icl_quantifier_check_abelian_group_plus_prot_inv_4_bicremental_types()
257 {
258 // check abelian group wrt. + and inverability wrt. distinct equality =d= :
259 // (1) (IntervalMapT, +) is an abelian group and
260 // (2) The inverability law: (0 - x) + x =d= 0 holds.
261 typedef IntervalMap<T,U,Trt> IntervalMapT;
262 typedef icl::map<T,U,Trt> MapT;
263 IntervalMapT aux;
264 MapT map_a, map_b, map_c;
265 std::pair<T,U> map_pair_a, map_pair_b;
266 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
267
268 CHECK_ABELIAN_MONOID_INSTANCE_WRT(plus) (map_a, map_b, map_c, map_pair_a, map_pair_b);
269 CHECK_ABELIAN_MONOID_INSTANCE_WRT(pipe) (map_a, map_b, map_c, map_pair_a, map_pair_b);
270
271 #if !defined(_MSC_VER) || (_MSC_VER >= 1400) // 1310==MSVC-7.1 1400 ==MSVC-8.0
272 CHECK_ABELIAN_GROUP_INSTANCE_WRT_EQUAL(plus) (is_distinct_equal, map_a, map_b, map_c, map_pair_a, map_pair_b);
273 CHECK_ABELIAN_GROUP_INSTANCE_WRT_EQUAL(pipe) (is_distinct_equal, map_a, map_b, map_c, map_pair_a, map_pair_b);
274 #endif
275 }
276
277 //------------------------------------------------------------------------------
278 // Containedness
279 //------------------------------------------------------------------------------
280 template
281 <
282 class T, class U, class Trt,
283 #if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
284 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
285 #else
286 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
287 #endif
288 >
icl_quantifier_check_containedness_4_bicremental_types()289 void icl_quantifier_check_containedness_4_bicremental_types()
290 {
291 typedef IntervalMap<T,U,Trt> IntervalMapT;
292 typedef icl::map<T,U,Trt> MapT;
293 IntervalMapT aux;
294 MapT map_a, map_b, map_c;
295 std::pair<T,U> map_pair_a, map_pair_b;
296 make_3_icl_maps_and_derivatives_1(map_a, map_b, map_c, map_pair_a, map_pair_b, &aux);
297
298 check_intersection_containedness(map_a, map_c);
299 check_intersection_containedness(map_c, map_pair_a);
300
301 check_union_containedness(map_a, map_c);
302 check_union_containedness(map_c, map_pair_a);
303
304 check_domain_containedness(map_a);
305 }
306
307
308 #endif // LIBS_ICL_TEST_TEST_ICL_QUANTIFIER_SHARED_HPP_JOFA_100819
309