1/*-----------------------------------------------------------------------------+
2Copyright (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
11#include "portability.hpp"
12
13template
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>
22void icl_map_contains_4_bicremental_types()
23{
24 typedef IntervalMap<T,U,Trt> IntervalMapT;
25 typedef icl::map<T,U,Trt> MapT;
26 //CL typedef std::set<T> SetT;
27 typedef typename MapT::element_type map_element_type;
28
29 IntervalMapT itv_map_a;
30 itv_map_a.add(IDv(2,4,1)).add(IIv(6,7,3));
31
32 MapT map_a;
33 segmental::atomize(map_a, itv_map_a);
34
35 BOOST_CHECK_EQUAL( contains(map_a, MK_v(3)), true );
36 BOOST_CHECK_EQUAL( within(MK_v(3), map_a), true );
37
38 map_element_type key_value_pair(MK_v(6), MK_u(3));
39 BOOST_CHECK( contains(map_a, key_value_pair) );
40 BOOST_CHECK( within(key_value_pair, map_a) );
41
42}
43
44
45template
46<
47 class T, class U, class Trt,
48#if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
49 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
50#else
51 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
52#endif
53>
54void icl_map_find_4_bicremental_types()
55{
56 typedef IntervalMap<T,U,Trt> IntervalMapT;
57 typedef icl::map<T,U,Trt> MapT;
58
59 IntervalMapT itv_map_a;
60 itv_map_a.add(IDv(2,4,1)).add(IIv(6,7,3));
61
62 MapT map_a;
63 segmental::atomize(map_a, itv_map_a);
64
65 typename MapT::const_iterator found = map_a.find(MK_v(6));
66
67 BOOST_CHECK_EQUAL( found->second, MK_u(3) );
68 BOOST_CHECK_EQUAL( map_a(MK_v(6)), MK_u(3) );
69
70 found = map_a.find(MK_v(5));
71
72 BOOST_CHECK_EQUAL( found == map_a.end(), true );
73 BOOST_CHECK_EQUAL( map_a(MK_v(5)), MK_u(0) );
74}
75
76
77template
78<
79 class T, class U, class Trt,
80#if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
81 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
82#else
83 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
84#endif
85>
86void icl_map_inclusion_compare_4_bicremental_types()
87{
88 typedef IntervalMap<T,U,Trt> IntervalMapT;
89 typedef icl::map<T,U,Trt> MapT;
90 typedef std::set<T> SetT;
91
92 IntervalMapT itv_map_sub_a, itv_map_a, itv_map_super_a,
93 itv_map_b, itv_map_c;
94 itv_map_sub_a.add(IDv(2,4,1)).add(IIv(6,7,3));
95 itv_map_a = itv_map_sub_a;
96 itv_map_a.add(IIv(9,9,1));
97 itv_map_c = itv_map_sub_a;
98 itv_map_c.erase(MK_v(7)).add(IIv(11,11,2));
99 itv_map_b = itv_map_a;
100 itv_map_b.set(IIv(6,7,2));
101
102 MapT map_sub_a, map_a, map_a2, map_b, map_c;
103 segmental::atomize(map_a, itv_map_a);
104 segmental::atomize(map_b, itv_map_b);
105 segmental::atomize(map_c, itv_map_c);
106 segmental::atomize(map_sub_a, itv_map_sub_a);
107
108 map_a2 = map_a;
109 BOOST_CHECK_EQUAL( inclusion_compare(MapT(), MapT()), inclusion::equal );
110 BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_a), inclusion::equal );
111 BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_a2), inclusion::equal );
112
113 BOOST_CHECK_EQUAL( inclusion_compare(map_a, MapT()), inclusion::superset );
114 BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_sub_a), inclusion::superset );
115 BOOST_CHECK_EQUAL( inclusion_compare(MapT(), map_a), inclusion::subset );
116 BOOST_CHECK_EQUAL( inclusion_compare(map_sub_a, map_a), inclusion::subset );
117
118 BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_b), inclusion::unrelated );
119 BOOST_CHECK_EQUAL( inclusion_compare(map_a, map_c), inclusion::unrelated );
120
121 SetT set_sub_a, set_a, set_a2, set_b, set_c;
122 icl::domain(set_a, map_a);
123 icl::domain(set_a2, map_a2);
124 icl::domain(set_sub_a, map_sub_a);
125
126 BOOST_CHECK_EQUAL( inclusion_compare(MapT(), SetT()), inclusion::equal );
127 BOOST_CHECK_EQUAL( inclusion_compare(SetT(), MapT()), inclusion::equal );
128 BOOST_CHECK_EQUAL( inclusion_compare(SetT(), SetT()), inclusion::equal );
129
130 BOOST_CHECK_EQUAL( inclusion_compare(map_a, set_a), inclusion::equal );
131 BOOST_CHECK_EQUAL( inclusion_compare(set_a, map_a), inclusion::equal );
132 BOOST_CHECK_EQUAL( inclusion_compare(set_a, set_a2), inclusion::equal );
133
134 BOOST_CHECK_EQUAL( inclusion_compare(map_a, SetT()), inclusion::superset );
135 BOOST_CHECK_EQUAL( inclusion_compare(map_a, set_sub_a), inclusion::superset );
136
137 BOOST_CHECK_EQUAL( inclusion_compare(SetT(), map_a), inclusion::subset );
138 BOOST_CHECK_EQUAL( inclusion_compare(set_sub_a, map_a), inclusion::subset );
139
140 BOOST_CHECK_EQUAL( inclusion_compare(set_a, SetT()), inclusion::superset );
141 BOOST_CHECK_EQUAL( inclusion_compare(set_a, set_sub_a), inclusion::superset );
142
143 BOOST_CHECK_EQUAL( inclusion_compare(SetT(), set_a), inclusion::subset );
144 BOOST_CHECK_EQUAL( inclusion_compare(set_sub_a, set_a), inclusion::subset );
145
146 BOOST_CHECK_EQUAL( inclusion_compare(set_a, map_c), inclusion::unrelated );
147 BOOST_CHECK_EQUAL( inclusion_compare(map_c, set_a), inclusion::unrelated );
148
149}
150
151
152template
153<
154 class T, class U, class Trt,
155#if (defined(__GNUC__) && (__GNUC__ < 4)) //MEMO Can be simplified, if gcc-3.4 is obsolete
156 ICL_IntervalMap_TEMPLATE(T,U,Traits,Trt) IntervalMap
157#else
158 ICL_IntervalMap_TEMPLATE(_T,_U,Traits,Trt) IntervalMap
159#endif
160>
161void icl_map_move_4_discrete_types()
162{
163 typedef icl::map<T,U,Trt> MapT;
164 typedef typename MapT::element_type map_element_type;
165
166 map_element_type kv_6_3(MK_v(6), MK_u(3));
167
168 MapT map_b;
169 map_b.add(kv_6_3);
170 MapT mv_cons_1(boost::move(MapT().add(kv_6_3)));
171 MapT cp_cons_1(map_b);
172
173 BOOST_CHECK_EQUAL( mv_cons_1, cp_cons_1 );
174 BOOST_CHECK_EQUAL( map_b, cp_cons_1 );
175
176 MapT mv_ass_1, cp_ass_1;
177 mv_ass_1 = boost::move(MapT().add(kv_6_3));
178 cp_ass_1 = map_b;
179
180 BOOST_CHECK_EQUAL( mv_ass_1, cp_ass_1 );
181 BOOST_CHECK_EQUAL( map_b, cp_ass_1 );
182}
183
184
185#endif // LIBS_ICL_TEST_TEST_ICL_MAP_HPP_JOFA_090119
186
187

source code of boost/libs/icl/test/test_icl_map.hpp