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;
60 Space4Type::Integer t [] = { 1, 2, 3 , 4};
62 Space4Type::Integer t2[] = { 5, 5, 3 , 4};
64 double td [] = { 1.1, 2.5, 3 , 4};
66 double td2[] = { 4.9, 4.5, 3 , 4};
72 unsigned int nbok = 0;
81 ++nb; nbok += myEmptyDomain.
isEmpty() && myEmptyDomain.
size() == 0 ? 1 : 0;
82 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Empty domain: " << myEmptyDomain << std::endl;
87 ++nb; nbok += myHyperRectDomain.
lowerBound() == a && myHyperRectDomain.
upperBound() == b ? 1 : 0;
88 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain = " << myHyperRectDomain << std::endl;
90 ++nb; nbok += myHyperRectDomain.
size() == 20 ? 1 : 0;
91 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain size = " << myHyperRectDomain.
size() << std::endl;
96 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain(" << c <<
", " << d <<
") = " << myHyperRectDomain_rr << std::endl;
100 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain(" << a <<
", " << d <<
") = " << myHyperRectDomain_ir << std::endl;
104 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain(" << c <<
", " << b <<
") = " << myHyperRectDomain_ri << std::endl;
112 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain size= " << myHyperRectDomainBis.
size() << std::endl;
118 myHyperRectDomainTer = myHyperRectDomain;
121 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Domain size= " << myHyperRectDomainTer.
size() << std::endl;
125 return myHyperRectDomain.
isValid() && nb == nbok;
140 trace.
info() << myHyperRectDomain << std::endl;
144 it != myHyperRectDomain.
end(); ++it )
149 itend = myHyperRectDomain.
rend(); it != itend; ++it )
152 trace.
emphase() <<
"Iterator 2d (permutation initializer list): ";
154 it = myHyperRectDomain.
subRange( {1, 0} ).begin();
155 it != myHyperRectDomain.
subRange( {1, 0} ).end(); ++it )
157 trace.
emphase() <<
"Reverse Iterator 2d (permutation initializer list): ";
159 it = myHyperRectDomain.
subRange( {1, 0} ).rbegin(),
160 itend=myHyperRectDomain.
subRange( {1, 0} ).rend(); it!=itend; ++it )
163 trace.
emphase() <<
"Iterator 2d (permutation+starting initializer list): ";
165 it = myHyperRectDomain.
subRange( {1, 0} ).begin(c);
166 it != myHyperRectDomain.
subRange( {1, 0} ).end(); ++it )
168 trace.
emphase() <<
"Reverse Iterator 2d (permutation+starting initializer list): ";
170 it = myHyperRectDomain.
subRange( {1, 0} ).rbegin(c),
171 itend=myHyperRectDomain.
subRange( {1, 0} ).rend(); it !=itend ; ++it )
174 trace.
emphase() <<
"Iterator 2d (span initializer list): ";
176 it = myHyperRectDomain.
subRange( {1} ).begin();
177 it != myHyperRectDomain.
subRange( {1} ).end(); ++it )
179 trace.
emphase() <<
"Reverse Iterator 2d (span initializer list): ";
181 it = myHyperRectDomain.
subRange( {1} ).rbegin(),
182 itend=myHyperRectDomain.
subRange( {1} ).rend(); it != itend; ++it )
185 trace.
emphase() <<
"Iterator 2d (span+starting initializer list): ";
187 it = myHyperRectDomain.
subRange( {1} , c ).begin(c);
188 it != myHyperRectDomain.
subRange( {1} , c ).end(); ++it )
190 trace.
emphase() <<
"Reverse Iterator 2d (span+starting initializer list): ";
192 it = myHyperRectDomain.
subRange( {1} , c ).rbegin(c),
193 itend=myHyperRectDomain.
subRange( {1} , c ).rend(); it !=itend; ++it )
200 TSpace4D::Integer t[] = {1, 1, 1, 1};
202 TSpace4D::Integer t2[] = {3, 3, 3, 3};
208 it = myHyperRectDomain4D.
begin();
209 it != myHyperRectDomain4D.
end(); ++it )
214 it = myHyperRectDomain4D.
rbegin(),
215 itend=myHyperRectDomain4D.
rend(); it != itend; ++it )
219 trace.
emphase() <<
"Iterator 4d by using order different from lexicographic initializer list: ";
221 it = myHyperRectDomain4D.
subRange( {3, 2, 1, 0}).begin();
222 it != myHyperRectDomain4D.
subRange( {3, 2, 1, 0}).end(); ++it )
225 trace.
emphase() <<
"Decreasing Iterator 4d by using order different from lexicographic initializer list: ";
227 it1 = myHyperRectDomain4D.
subRange( {3, 2, 1, 0}).begin();
229 it2 = myHyperRectDomain4D.
subRange( {3, 2, 1, 0}).end();
232 for ( ; it1 != it2; --it2 )
235 trace.
emphase() <<
"Iterator on a subset of 4d by using order different from lexicographic initializer list: ";
237 it3 = myHyperRectDomain4D.
subRange( {1, 3}).begin();
238 it3 != myHyperRectDomain4D.
subRange( {1, 3}).end(); ++it3 )
241 trace.
emphase() <<
"Decreasing iterator on a subset of 4d by using order different from lexicographic initializer list: ";
243 it4 = myHyperRectDomain4D.
subRange({1, 3}).begin();
245 it5 = myHyperRectDomain4D.
subRange({1, 3}).end();
248 for ( ; it4 != it5; --it5 )
251 return myHyperRectDomain.
isValid();
259 TSpace4D::Integer t[] = {1, 1, 1, 1};
261 TSpace4D::Integer t2[] = {3, 3, 3, 3};
272 it = myHyperRectDomain4D.
begin();
273 for ( ; it != myHyperRectDomain4D.
end(); ++it )
278 it2 = myHyperRectDomain4D.
begin();
281 for ( ; it != it2; --it )
286 return myHyperRectDomain4D.
isValid();
295 TSpace4D::Integer t[] = {1, 1, 1, 1};
297 TSpace4D::Integer t2[] = {3, 3, 3, 3};
305 std::copy ( myHyperRectDomain4D.
begin(),
306 myHyperRectDomain4D.
end(),
307 ostream_iterator<Point4D> (
trace.
info(),
" " ) );
312 return myHyperRectDomain4D.
isValid();
322 unsigned int nbok = 0;
326 const TDomain nonempty_domain( TPoint::diagonal(0), TPoint::diagonal(0) );
327 ++nb; nbok += nonempty_domain.isEmpty() ? 0 : 1;
328 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Creating non-empty domain & checking isEmpty." << std::endl;
330 const TDomain default_domain;
331 ++nb; nbok += default_domain.isEmpty() ? 1 : 0;
332 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Creating default empty domain & checking isEmpty." << std::endl;
334 const TDomain
domain( TPoint::diagonal(1), TPoint::diagonal(0) );
336 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Creating default custom domain & checking isEmpty." << std::endl;
339 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Empty domain has size = " <<
domain.
size() << std::endl;
342 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end()" << std::endl;
345 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend()" << std::endl;
348 ++nb; nbok += range.begin() == range.end() ? 1 : 0;
349 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end() for sub-range {0,1,2}" << std::endl;
351 ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
352 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend() for sub-range {0,1,2}" << std::endl;
355 ++nb; nbok += range.begin() == range.end() ? 1 : 0;
356 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end() for sub-range {2,1,0}" << std::endl;
358 ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
359 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend() for sub-range {2,1,0}" << std::endl;
362 ++nb; nbok += range.begin() == range.end() ? 1 : 0;
363 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end() for sub-range {0,2}" << std::endl;
365 ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
366 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend() for sub-range {0,2}" << std::endl;
369 ++nb; nbok += range.begin() == range.end() ? 1 : 0;
370 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end() for sub-range {2,0}" << std::endl;
372 ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
373 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend() for sub-range {2,0}" << std::endl;
376 ++nb; nbok += range.begin() == range.end() ? 1 : 0;
377 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that begin() == end() for sub-range {1}" << std::endl;
379 ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
380 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") Checking that rbegin() == rend() for sub-rang {1}" << std::endl;
void beginBlock(const std::string &keyword="")
Aim: Defines the concept describing a bidirectional const range.
const ConstIterator & end() const
ConstSubRange subRange(const std::vector< Dimension > &permutation) const
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
const Point & upperBound() const
PointVector< 3, double > RealPoint
ConstReverseIterator rend() const
Aim: This concept represents a digital domain, i.e. a non mutable subset of points of the given digit...
ConstReverseIterator rbegin() const
const ConstIterator & begin() const
DGtal is the top-level namespace which contains all DGtal functions and types.
bool testReverseIterator()
const Point & lowerBound() const
bool testSimpleHyperRectDomain()