DGtal 1.4.0
Loading...
Searching...
No Matches
testImageContainerByHashTree.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include <cmath>
#include "DGtal/kernel/SpaceND.h"
#include "DGtal/kernel/domains/HyperRectDomain.h"
#include "DGtal/images/ImageContainerByHashTree.h"
Include dependency graph for testImageContainerByHashTree.cpp:

Go to the source code of this file.

Macros

#define dim   experimental::ImageContainerByHashTree<Domain , T, DGtal::uint64_t >::dim
 
#define defHashKey   typename experimental::ImageContainerByHashTree<Domain , int, DGtal::uint64_t >::HashKey
 

Functions

int iRand (int iMin, int iMax)
 
template<typename Domain , typename T >
bool test_setVal (experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > &container, bool checkAfterEachSet)
 
template<typename Domain , typename T >
bool test_get (experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > &container, bool)
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
David Coeurjolly (david.nosp@m..coe.nosp@m.urjol.nosp@m.ly@l.nosp@m.iris..nosp@m.cnrs.nosp@m..fr ) Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
Date
2010/07/22

Functions for testing class ImageContainerBenchmark.

This file is part of the DGtal library.

Definition in file testImageContainerByHashTree.cpp.

Macro Definition Documentation

◆ defHashKey

#define defHashKey   typename experimental::ImageContainerByHashTree<Domain , int, DGtal::uint64_t >::HashKey

Definition at line 41 of file testImageContainerByHashTree.cpp.

◆ dim

Function Documentation

◆ iRand()

int iRand ( int iMin,
int iMax )

Definition at line 45 of file testImageContainerByHashTree.cpp.

46{
47 double f = ( double ) rand() / RAND_MAX;
48 return (int) (iMin + static_cast<double> ( f * ( iMax - iMin ) ));
49}

Referenced by test_get(), and test_setVal().

◆ main()

int main ( int argc,
char ** argv )

Definition at line 162 of file testImageContainerByHashTree.cpp.

163{
164 trace.beginBlock ( "Testing class ImageContainerBenchmark" );
165 trace.info() << "Args:";
166 for ( int i = 0; i < argc; ++i )
167 trace.info() << " " << argv[ i ];
168 trace.info() << std::endl;
169
170 typedef SpaceND<5> Space;
171 typedef HyperRectDomain<Space> Dom;
173 Tree tree ( 12,5,1 );
174 // Do not pass concept.
175 //BOOST_CONCEPT_ASSERT((CDrawableWithBoard2D<Tree>));
176
177 //tree.printInternalState(cerr, 12);
178 Dom::Point p1, p2, p3;
179 trace.info() << "azertyuiop" << std::endl;
180 p1[0] = -32;
181 p1[1] = -10;
182 p1[2] = -30;
183 p1[3] = 20;
184 p1[4] = 0;
185
186 p2[0] = 32;
187 p2[1] = 32;
188 p2[2] = 20;
189 p2[3] = 64;
190 p2[4] = 120;
191
192 p3[0] = 1;
193 p3[1] = 1;
194 p3[2] = 1;
195 p3[3] = 1;
196 p3[4] = 1;
197 trace.info() << "azertyuiop" << std::endl;
199 trace.info() << "azertyuiop" << std::endl;
200 trace.info() << "coord get " << tree2.get ( p1 ) << std::endl;
201 trace.info() << "_-_-_-_-_-_-_-_-_-_-_-_-" << std::endl;
202 trace.info() << "coord get " << tree2.get ( p3 ) << std::endl;
203 trace.info() << "coord get " << tree2.get ( p1+=p3 ) << std::endl;
204 trace.info() << "coord get " << tree2.get ( p1+=p3 ) << std::endl;
205 trace.info() << "coord get " << tree2.get ( p1+=p3 ) << std::endl;
206 trace.info() << "coord get " << tree2.get ( p1+=p3 ) << std::endl;
207
208 // check that the iterator stuff compiles as it should
210 HashTreeIterator it = tree.begin();
211 for ( it = tree.begin(); it != tree.end(); ++it )
212 tree ( *it );
213
214
215
216 bool res =
217 (
218 test_setVal ( tree, false ) &&
219 test_get ( tree, false )
220 );
221
222
223
224 trace.emphase() << ( res ? "Passed." : "Error." ) << std::endl;
225 trace.endBlock();
226 return res ? 0 : 1;
227}
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & info()
double endBlock()
Built-in iterator on an HashTree. This iterator visits all node in the tree.
Model of CImageContainer implementing the association key<->Value using a hash tree....
Trace trace
Definition Common.h:153
bool test_setVal(experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > &container, bool checkAfterEachSet)
bool test_get(experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > &container, bool)

References DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::get(), DGtal::Trace::info(), test_get(), test_setVal(), and DGtal::trace.

◆ test_get()

template<typename Domain , typename T >
bool test_get ( experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > & container,
bool  )

Definition at line 120 of file testImageContainerByHashTree.cpp.

121{
122 srand ( (unsigned int)time ( NULL ) );
123 unsigned count = 0;
124 //unsigned DepthMask = container.ROOT_KEY << container.getDepth()*dim;
125 unsigned DepthMask = 100000;
126 //trace.info() << "DepthMask "<< DepthMask << std::endl;
127 for ( unsigned key = DepthMask; key > container.ROOT_KEY; --key )
128 {
129 if ( !container.isKeyValid ( key ) )
130 {
131 //trace.info() << "invalid key "<< Bits::bitString(key) << std::endl;
132 continue;
133 }
134 ++count;
135 T val = iRand ( 0, 100 );
136 //trace.info() << "plop1" << std::endl;
137 //trace.info() << "___________________________ set: " << Bits::bitString(key, 16) << std::endl;
138 container.setValue ( key, val );
139
140
142 while ( container.isKeyValid ( key2 ) )
143 {
144 key2 = key2 << dim;
145 if ( val != container.get ( key2 ) )
146 {
147 trace.info() << "test_get: failure" << std::endl
148 << "at key " << Bits::bitString ( key2 ) << std::endl;
149 return false;
150 }
151 //trace.info() << "check " << Bits::bitString(key2) << " ok." << std::endl;
152 }
153 //key2 <<=dim;
154 }
155 trace.info() << "test_get: success !" << std::endl
156 << "tested with " << count << " keys" << std::endl;
157 return true;
158}
Value get(const HashKey key) const
void setValue(const HashKey key, const Value object)
static std::string bitString(T value, unsigned nbBits=0)
Bits Structs grouping all the functions of this tiny library for bitwise calculation.
Definition Bits.h:57
srand(0)
int iRand(int iMin, int iMax)

References DGtal::Bits::bitString(), dim, DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::get(), DGtal::Trace::info(), iRand(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::isKeyValid(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::setValue(), srand(), and DGtal::trace.

Referenced by main().

◆ test_setVal()

template<typename Domain , typename T >
bool test_setVal ( experimental::ImageContainerByHashTree< Domain, T, DGtal::uint64_t > & container,
bool checkAfterEachSet )

Definition at line 52 of file testImageContainerByHashTree.cpp.

53{
54 srand ( (unsigned int)time ( NULL ) );
55
56 //phase 1
57 trace.info() << "Test: set" <<std::endl;
58 trace.info() << "phase 1..." <<std::endl;
59 //unsigned DepthMask = container.ROOT_KEY << container.getDepth()*dim;
60 unsigned DepthMask = 100000;
61 //cerr << "DepthMask = " << DepthMask << std::endl;
62 for ( int key = DepthMask; key > 1; --key )
63 {
64 if ( !container.isKeyValid ( key ) )
65 {
66 continue;
67 }
68 //count ++;
69 container.setValue ( key, iRand ( 0, 100 ) );
70 if ( checkAfterEachSet )
71 {
72 if ( !container.checkIntegrity() )
73 {
74 trace.info() << "test_set: failure in phase 1" << std::endl
75 << "at key " << Bits::bitString ( key ) << std::endl;
76 return false;
77 }
78 else
79 trace.info() << "ok"<<std::endl;
80 }
81 }
82 trace.info() << "checking the container's validity..." << std::endl;
83 if ( !container.checkIntegrity() )
84 {
85
86 trace.info() << "test_set: failure in phase 1" << std::endl;
87 return false;
88 }
89
90 //phase 2
91 trace.info() << "phase 2..." <<std::endl;
92 for ( unsigned key = container.ROOT_KEY; key < DepthMask; ++key )
93 {
94 if ( !container.isKeyValid ( key ) )
95 {
96 continue;
97 }
98 container.setValue ( key, iRand ( 0, 100 ) );
99 if ( checkAfterEachSet )
100 if ( !container.checkIntegrity() )
101 {
102 trace.info() << "test_set: failure in phase 2" << std::endl
103 << "at key " << Bits::bitString ( key ) << std::endl;
104 return false;
105 }
106 }
107
108 if ( !container.checkIntegrity() )
109 {
110 trace.info() << "test_set: failure in phase 2" << std::endl;
111 return false;
112 }
113
114 trace.info() << "test_set: success !" << std::endl;
115 return true;
116}
bool checkIntegrity(HashKey key=ROOT_KEY, bool leafAbove=false) const

References DGtal::Bits::bitString(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::checkIntegrity(), DGtal::Trace::info(), iRand(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::isKeyValid(), DGtal::experimental::ImageContainerByHashTree< TDomain, TValue, THashKey >::setValue(), srand(), and DGtal::trace.

Referenced by main().