32 #include "DGtal/base/Common.h"
33 #include "DGtal/kernel/SimpleMatrix.h"
37 using namespace DGtal;
46 bool testSimpleMatrix()
48 unsigned int nbok = 0;
58 m34d.setComponent(1,2, 0.5);
61 nbok += (m34d(1,2) == 0.5) ? 1 : 0;
63 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
64 <<
"true == true" << std::endl;
69 matrix.constant(12.3);
73 res = res && (matrix(i,j) == 12.3);
76 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
77 <<
"all equals to 12.3" << std::endl;
87 unsigned int nbok = 0;
96 M34d m34dbis, resadd, ressub;
104 m34d.setComponent(i,j,i*j);
105 m34dbis.setComponent(i,j,i+j);
106 resadd.setComponent(i,j,i*j+i+j);
107 ressub.setComponent(i,j,i*j-(
double)i-(
double)j);
115 nbok += ((m34d + m34dbis) == resadd) ? 1 : 0;
117 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
118 <<
"ok" << std::endl;
119 nbok += ((m34dbis + m34d) == resadd) ? 1 : 0;
121 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
122 <<
"ok commutative" << std::endl;
126 nbok += (other == m34d) ? 1 : 0;
128 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
129 <<
"ok +=" << std::endl;
134 nbok += ((m34d - m34dbis) == ressub) ? 1 : 0;
139 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
140 <<
"ok simple" << std::endl;
144 nbok += ( (two*2.0) == four) ? 1 : 0;
147 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
148 <<
" [2]*2 == [4]" << std::endl;
150 nbok += ( two == four/2.0) ? 1 : 0;
153 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
154 <<
" [2]= [4]/2" << std::endl;
159 M43d transp = m34d.transpose();
160 nbok += (transp.transpose() == m34d) ? 1 : 0;
162 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
163 <<
"ok idem potent" << std::endl;
174 nbok += (two * one == eight33) ? 1 : 0;
176 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
177 <<
" [2]*[1] = [8]" << std::endl;
188 unsigned int nbok = 0;
201 nbok += (row[1] == 2 ) ? 1 : 0;
203 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
204 <<
" row value" << std::endl;
211 nbok += (col[1] == 2 ) ? 1 : 0;
213 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
214 <<
" col value" << std::endl;
227 nbok += (c == expected) ? 1 : 0;
229 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
230 <<
" mat*row^t" << std::endl;
236 bool testDetCofactor()
238 unsigned int nbok = 0;
244 mat2.setComponent(1,1,2);
248 trace.
info() << mat2.determinant() << std::endl;
249 nbok += (mat2.determinant() == 2) ? 1 : 0;
251 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
252 <<
" 2" << std::endl;
258 mat.setComponent(1,1,2);
259 mat.setComponent(2,2,4);
263 nbok += (mat.determinant() == 8) ? 1 : 0;
265 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
266 <<
" 8" << std::endl;
273 mat44.setComponent(1,1,2);
274 mat44.setComponent(2,2,4);
275 mat44.setComponent(3,3,4);
279 trace.
info() << mat44.determinant() << std::endl;
280 nbok += (mat44.determinant() == 32) ? 1 : 0;
282 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
283 <<
" 32" << std::endl;
301 unsigned int nbok = 0;
309 mat2.setComponent(1,1,2);
315 trace.
info() << mat2.inverse() << std::endl;
316 nbok += (( mat2 * mat2.inverse() )== Id2 ) ? 1 : 0;
318 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
319 <<
" M*M^-1=Id" << std::endl;
328 for(
unsigned int i=0; i< 6; i++)
329 for(
unsigned int j=0; j< 6; j++)
336 trace.
info() <<
"M^-1=" <<mat.inverse() << std::endl;
337 trace.
info() <<
"det(M)= "<<mat.determinant() <<std::endl;
338 trace.
info() <<
"M*M^-1= "<<mat.inverse()*mat << std::endl;
351 int main(
int argc,
char** argv )
355 for (
int i = 0; i < argc; ++i )
359 bool res = testSimpleMatrix() && testArithm() && testColRow()
360 && testDetCofactor() && testM1Matrix()
362 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;