39 #include "DGtal/base/Common.h"
40 #include "DGtal/kernel/SpaceND.h"
41 #include "DGtal/kernel/PointVector.h"
42 #include "DGtal/kernel/domains/HyperRectDomain.h"
43 #include "DGtal/base/CConstBidirectionalRange.h"
45 using namespace DGtal;
53 bool testSimpleHyperRectDomain()
57 typedef Space4Type::Point
Point;
72 trace.
info() <<
"Empty Domain: " << myEmptyDomain << std::endl;
76 trace.
info() << myHyperRectDomain << std::endl;
78 trace.
info() <<
"Domain Size= " << myHyperRectDomain.size() << std::endl;
86 trace.
info() <<
"Domain Size= " << myHyperRectDomainBis.size() << std::endl;
92 myHyperRectDomainTer = myHyperRectDomain;
94 trace.
info() <<
"Domain Size= " << myHyperRectDomainTer.
size() << std::endl;
97 return myHyperRectDomain.isValid();
104 typedef TSpace::Point Point;
112 trace.
info() << myHyperRectDomain << std::endl;
116 it != myHyperRectDomain.end(); ++it )
121 itend = myHyperRectDomain.rend(); it != itend; ++it )
124 #ifdef CPP11_INITIALIZER_LIST
125 trace.
emphase() <<
"Iterator 2d (permutation initializer list): ";
127 it = myHyperRectDomain.subRange( {1, 0} ).begin();
128 it != myHyperRectDomain.subRange( {1, 0} ).end(); ++it )
130 trace.
emphase() <<
"Reverse Iterator 2d (permutation initializer list): ";
132 it = myHyperRectDomain.subRange( {1, 0} ).rbegin(),
133 itend=myHyperRectDomain.subRange( {1, 0} ).rend(); it!=itend; ++it )
136 trace.
emphase() <<
"Iterator 2d (permutation+starting initializer list): ";
138 it = myHyperRectDomain.subRange( {1, 0} ).begin(c);
139 it != myHyperRectDomain.subRange( {1, 0} ).end(); ++it )
141 trace.
emphase() <<
"Reverse Iterator 2d (permutation+starting initializer list): ";
143 it = myHyperRectDomain.subRange( {1, 0} ).rbegin(c),
144 itend=myHyperRectDomain.subRange( {1, 0} ).rend(); it !=itend ; ++it )
147 trace.
emphase() <<
"Iterator 2d (span initializer list): ";
149 it = myHyperRectDomain.subRange( {1} ).begin();
150 it != myHyperRectDomain.subRange( {1} ).end(); ++it )
152 trace.
emphase() <<
"Reverse Iterator 2d (span initializer list): ";
154 it = myHyperRectDomain.subRange( {1} ).rbegin(),
155 itend=myHyperRectDomain.subRange( {1} ).rend(); it != itend; ++it )
158 trace.
emphase() <<
"Iterator 2d (span+starting initializer list): ";
160 it = myHyperRectDomain.subRange( {1} , c ).begin(c);
161 it != myHyperRectDomain.subRange( {1} , c ).end(); ++it )
163 trace.
emphase() <<
"Reverse Iterator 2d (span+starting initializer list): ";
165 it = myHyperRectDomain.subRange( {1} , c ).rbegin(c),
166 itend=myHyperRectDomain.subRange( {1} , c ).rend(); it !=itend; ++it )
172 typedef TSpace4D::Point Point4D;
182 it = myHyperRectDomain4D.begin();
183 it != myHyperRectDomain4D.end(); ++it )
188 it = myHyperRectDomain4D.rbegin(),
189 itend=myHyperRectDomain4D.rend(); it != itend; ++it )
193 #ifdef CPP11_INITIALIZER_LIST
194 trace.
emphase() <<
"Iterator 4d by using order different from lexicographic initializer list: ";
196 it = myHyperRectDomain4D.subRange( {3, 2, 1, 0}).begin();
197 it != myHyperRectDomain4D.subRange( {3, 2, 1, 0}).end(); ++it )
200 trace.
emphase() <<
"Decreasing Iterator 4d by using order different from lexicographic initializer list: ";
202 it1 = myHyperRectDomain4D.subRange( {3, 2, 1, 0}).begin();
204 it2 = myHyperRectDomain4D.subRange( {3, 2, 1, 0}).end();
207 for ( ; it1 != it2; --it2 )
210 trace.
emphase() <<
"Iterator on a subset of 4d by using order different from lexicographic initializer list: ";
212 it3 = myHyperRectDomain4D.subRange( {1, 3}).begin();
213 it3 != myHyperRectDomain4D.subRange( {1, 3}).end(); ++it3 )
216 trace.
emphase() <<
"Decreasing iterator on a subset of 4d by using order different from lexicographic initializer list: ";
218 it4 = myHyperRectDomain4D.subRange({1, 3}).begin();
220 it5 = myHyperRectDomain4D.subRange({1, 3}).end();
223 for ( ; it4 != it5; --it5 )
227 return myHyperRectDomain.isValid();
231 bool testReverseIterator()
234 typedef TSpace4D::Point Point4D;
248 it = myHyperRectDomain4D.begin();
249 for ( ; it != myHyperRectDomain4D.end(); ++it )
254 it2 = myHyperRectDomain4D.begin();
257 for ( ; it != it2; --it )
262 return myHyperRectDomain4D.isValid();
270 typedef TSpace4D::Point Point4D;
281 std::copy ( myHyperRectDomain4D.begin(),
282 myHyperRectDomain4D.end(),
283 ostream_iterator<Point4D> (
trace.
info(),
" " ) );
288 return myHyperRectDomain4D.isValid();
294 if ( testSimpleHyperRectDomain() && testIterator() && testReverseIterator() && testSTLCompat() )