| [2615] | 1 | #include "sopnamsp.h"
 | 
|---|
| [1083] | 2 | #include "machdefs.h"
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | #include <math.h>
 | 
|---|
| [2322] | 5 | #include <iostream>
 | 
|---|
| [1083] | 6 | 
 | 
|---|
 | 7 | #include "tarrinit.h"
 | 
|---|
 | 8 | #include "array.h"
 | 
|---|
 | 9 | #include "timing.h"
 | 
|---|
 | 10 | 
 | 
|---|
| [2568] | 11 | /*  --------------------------------------------------------- */
 | 
|---|
 | 12 | /*  ---- Programme de test des operations et conversions ---  */
 | 
|---|
 | 13 | /*  ----    sur les TArray/TMatrix de SOPHYA    ----          */
 | 
|---|
 | 14 | /*  2000-2004      -   C. Magneville,  R. Ansari              */
 | 
|---|
 | 15 | /*  carrt -> Help/Usage                                       */
 | 
|---|
 | 16 | /*  Pour effectuer les tests :                                */
 | 
|---|
 | 17 | /* Conversions entre arr<int> et arr<float>                   */
 | 
|---|
 | 18 | /*  carrt  ac         -> Rc=0 OK                              */
 | 
|---|
 | 19 | /*  carrt  ace        -> Exception/Rc=9                       */
 | 
|---|
 | 20 | /*  carrt  oso        -> Rc=0 OK                              */
 | 
|---|
 | 21 | /*  carrt  odo        -> Rc=0 OK                              */
 | 
|---|
 | 22 | /*  --- carrt oso/odo NRow NCols  pour test grande tailles    */
 | 
|---|
 | 23 | /*  --------------------------------------------------------- */
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 | static int test_ac(bool fgszm=false);
 | 
|---|
| [1100] | 26 | static int test_oso(int r, int c);
 | 
|---|
 | 27 | static int test_odo(int r, int c);
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 | static int prtlev = 0;
 | 
|---|
| [1107] | 30 | static int nprt = 100;
 | 
|---|
| [1100] | 31 | 
 | 
|---|
 | 32 | template <class T>
 | 
|---|
| [2581] | 33 | void getMinMax(TArray<T>& a, T& min, T& max) { a.MinMax(min, max); }
 | 
|---|
| [1100] | 34 | 
 | 
|---|
| [1083] | 35 | int main(int narg, char* arg[])
 | 
|---|
 | 36 | {
 | 
|---|
 | 37 | 
 | 
|---|
 | 38 |   SophyaInit();
 | 
|---|
 | 39 |   InitTim();   // Initializing the CPU timer
 | 
|---|
| [1100] | 40 | 
 | 
|---|
 | 41 |   if (narg < 2) {
 | 
|---|
| [2568] | 42 |     cout << " carrt ac/ace/oso/odo [NRow=5] [NCols=10] [prtlev=0] [nprtmax=100] \n"
 | 
|---|
| [1100] | 43 |          << "   ac : array conversion test   \n" 
 | 
|---|
| [2568] | 44 |          << "   ace : array conversion test + conversion with sizemismatch -> exception/rc=9  \n" 
 | 
|---|
| [1100] | 45 |          << "   oso : operation same memory organisation \n" 
 | 
|---|
 | 46 |          << "   odo : operation different memory organisation \n" << endl;
 | 
|---|
| [2568] | 47 |     return 1;
 | 
|---|
| [1100] | 48 |   }
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 |   string opt = arg[1];
 | 
|---|
 | 51 |   int nr = 5;
 | 
|---|
 | 52 |   int nc = 10;
 | 
|---|
 | 53 |   if (narg > 2) nr = atoi(arg[2]);
 | 
|---|
 | 54 |   if (narg > 3) nc = atoi(arg[3]);
 | 
|---|
 | 55 |   if (narg > 4) prtlev = atoi(arg[4]);
 | 
|---|
 | 56 |   if (narg > 5) nprt = atoi(arg[5]);
 | 
|---|
 | 57 | 
 | 
|---|
| [2578] | 58 |   BaseArray::SetMaxPrint(nprt);
 | 
|---|
| [2568] | 59 |   int rc = 0;
 | 
|---|
| [1100] | 60 |   PrtTim(" Start of Test ");
 | 
|---|
| [1083] | 61 |   try {
 | 
|---|
| [2568] | 62 |     if (opt == "ac") rc = test_ac(false);
 | 
|---|
 | 63 |     else if (opt == "ace") rc = test_ac(true);
 | 
|---|
 | 64 |     else if (opt == "oso") rc = test_oso(nr, nc);
 | 
|---|
 | 65 |     else if (opt == "odo") rc = test_odo(nr, nc);
 | 
|---|
| [1100] | 66 |   }
 | 
|---|
 | 67 |   catch (PThrowable & exc) {
 | 
|---|
 | 68 |     cerr << " catched Exception " << exc.Msg() << endl;
 | 
|---|
| [2568] | 69 |     rc = 9;
 | 
|---|
| [1100] | 70 |   }  
 | 
|---|
 | 71 |   catch (...) {
 | 
|---|
 | 72 |     cerr << " catched unknown (...) exception " << endl; 
 | 
|---|
 | 73 |   }  
 | 
|---|
 | 74 | 
 | 
|---|
 | 75 |   PrtTim(" End of Test ");
 | 
|---|
| [2568] | 76 |   cout << " ----- End of carrt - Rc= " << rc << " ----- " << endl;
 | 
|---|
 | 77 |   if (rc > 255) rc = 255;
 | 
|---|
 | 78 |   return rc;
 | 
|---|
| [1100] | 79 | }
 | 
|---|
 | 80 | 
 | 
|---|
 | 81 | 
 | 
|---|
| [2568] | 82 | int test_ac(bool fgszm)
 | 
|---|
| [1100] | 83 | {
 | 
|---|
| [2568] | 84 |   cout << "\n -----> Testing TArray Conversion <---- " << endl;
 | 
|---|
 | 85 |   int rc = 0;
 | 
|---|
 | 86 |   int_4 min, max;
 | 
|---|
 | 87 |   TArray<int_4> ia(7,5),iac,iad;   
 | 
|---|
 | 88 |   ia = RegularSequence(10., 2.);
 | 
|---|
 | 89 |   TArray<r_4> ra(7,5);   
 | 
|---|
 | 90 |   ra = ia;
 | 
|---|
 | 91 |   if (prtlev>0) 
 | 
|---|
 | 92 |     cout << " ra = ia(= RegularSequence(10., 2.)) = \n " << ra << endl;
 | 
|---|
 | 93 |   iac = ra;
 | 
|---|
 | 94 |   iad = iac-ia;
 | 
|---|
 | 95 |   getMinMax(iad, min, max);
 | 
|---|
 | 96 |   if ((min != 0) || (max != 0)) {
 | 
|---|
 | 97 |     cout << "(1) !!! ERROR ra(7,5)=ia(7,5)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 98 |     rc += 1;
 | 
|---|
 | 99 |   }
 | 
|---|
 | 100 |   else cout << "(1) OK  ra(7,5)=ia(7,5)  OK " << endl; 
 | 
|---|
 | 101 | 
 | 
|---|
 | 102 |   TArray<r_4> rb(5,3);
 | 
|---|
 | 103 |   rb =  RegularSequence(20., .5);  
 | 
|---|
 | 104 |   TMatrix<int_4> mx(3,5);
 | 
|---|
 | 105 |   TMatrix<int_4> mxc(3,5);
 | 
|---|
 | 106 |   mxc = RegularSequence(20., .5);  
 | 
|---|
 | 107 |   if (prtlev>0) 
 | 
|---|
 | 108 |     cout << " TArray<r_4> rb(5,3); rb =  RegularSequence(20., .5); rb : " << rb << endl;
 | 
|---|
 | 109 |   mx = rb;
 | 
|---|
 | 110 |   if (prtlev>0) 
 | 
|---|
 | 111 |     cout << " TMatrix<int_4> mx(3,5);       mx = rb;  mx: " << mx << endl;
 | 
|---|
 | 112 |   TMatrix<int_4> mxd = mxc-mx;
 | 
|---|
 | 113 |   getMinMax(mxd, min, max);
 | 
|---|
 | 114 |   if ((min != 0) || (max != 0)) {
 | 
|---|
 | 115 |     cout << "(2) !!! ERROR mx<int>(5,3)=rb<r_4>(5,3)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 116 |     rc += 2;
 | 
|---|
 | 117 |   }
 | 
|---|
 | 118 |   else cout << "(2) OK  mx<int>(5,3)=rb<r_4>(5,3)  OK " << endl; 
 | 
|---|
 | 119 | 
 | 
|---|
 | 120 |   TArray<r_4> rcv(10);
 | 
|---|
 | 121 |   rcv = 3.1415;
 | 
|---|
 | 122 |   TMatrix<r_8> mx2(rcv);
 | 
|---|
 | 123 |   if (prtlev>0) 
 | 
|---|
 | 124 |     cout << "   TArray<r_4> rcv(10) = 3.1415 , TMatrix<r_8> mx2(rc)=rcv : " << mx2 << endl;
 | 
|---|
 | 125 |   TMatrix<int_4> mx2d = mx2-3.1415;
 | 
|---|
 | 126 |   getMinMax(mxd, min, max);
 | 
|---|
 | 127 |   if ((min != 0) || (max != 0)) {
 | 
|---|
 | 128 |     cout << "(3) !!! ERROR mx2<r_8>(10)=rcv<r_4>(10)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 129 |     rc += 4;
 | 
|---|
 | 130 |   }
 | 
|---|
 | 131 |   else cout << "(3) OK  mx2<r_8>(10)=rcv<r_4>(10)  OK " << endl; 
 | 
|---|
 | 132 |   if (fgszm) {
 | 
|---|
 | 133 |     TMatrix<int_4> mx3(3,5);
 | 
|---|
 | 134 |     cout << "(4) Trying  TMatrix<int_4> mx3(3,5);  mx3 = rcv(10); ?? -> Exception " << endl;
 | 
|---|
 | 135 |     mx3 = rcv;
 | 
|---|
 | 136 |   }
 | 
|---|
 | 137 |   return(rc);
 | 
|---|
| [1100] | 138 | }
 | 
|---|
 | 139 | 
 | 
|---|
 | 140 | int test_oso(int nr, int nc)
 | 
|---|
 | 141 | {
 | 
|---|
 | 142 |   cout << "\n -----> Testing TArray operation TArray<int_4>(nx=" << nr << ",ny=" 
 | 
|---|
| [2568] | 143 |        << nc << " ) " << endl;
 | 
|---|
 | 144 |   cout << " -----> OSO (Same Mem. Mapping) Same memory mapping (default) for all arrays" << endl;
 | 
|---|
| [1100] | 145 | 
 | 
|---|
 | 146 |   int rc = 0;
 | 
|---|
 | 147 |   int min,max;
 | 
|---|
 | 148 | 
 | 
|---|
 | 149 |   TArray<int_4> a(nr,nc);
 | 
|---|
 | 150 |   a = 20;
 | 
|---|
 | 151 |   TArray<int_4> b(nr,nc);
 | 
|---|
 | 152 |   b = 9;
 | 
|---|
 | 153 |   if (prtlev > 0) {
 | 
|---|
 | 154 |     cout << " A = \n " << a << endl;
 | 
|---|
 | 155 |     cout << " B = \n " << b << endl;
 | 
|---|
| [1083] | 156 |   }
 | 
|---|
 | 157 | 
 | 
|---|
| [2568] | 158 |   TArray<int_4> ar;
 | 
|---|
 | 159 |   ar = a+2;  
 | 
|---|
 | 160 |   if (prtlev > 0) 
 | 
|---|
 | 161 |     cout << "(1) AR = A+2=  " << ar << endl;
 | 
|---|
 | 162 |   getMinMax(ar, min, max);
 | 
|---|
 | 163 |   if ((min != 22) || (max != 22)) {
 | 
|---|
 | 164 |     cout << "(1) !!! ERROR Test AR=A+2  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 165 |     rc += 1;
 | 
|---|
 | 166 |   }
 | 
|---|
 | 167 |   else cout << "(1) OK   Test AR=A+2  OK " << endl; 
 | 
|---|
 | 168 | 
 | 
|---|
 | 169 |   ar = 28-a;  
 | 
|---|
 | 170 |   if (prtlev > 0) 
 | 
|---|
 | 171 |     cout << "(2) AR = 28-A=  " << ar << endl;
 | 
|---|
 | 172 |   getMinMax(ar, min, max);
 | 
|---|
 | 173 |   if ((min != 8) || (max != 8)) {
 | 
|---|
 | 174 |     cout << "(2) !!! ERROR Test AR=28-A  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 175 |     rc += 2;
 | 
|---|
 | 176 |   }
 | 
|---|
 | 177 |   else cout << "(2) OK   Test AR=28-A  OK " << endl;
 | 
|---|
 | 178 |  
 | 
|---|
 | 179 |   ar = a*3;  
 | 
|---|
 | 180 |   if (prtlev > 0) 
 | 
|---|
 | 181 |     cout << "(3) AR = A*3=  " << ar << endl;
 | 
|---|
 | 182 |   getMinMax(ar, min, max);
 | 
|---|
 | 183 |   if ((min != 60) || (max != 60)) {
 | 
|---|
 | 184 |     cout << "(3) !!! ERROR Test AR=A*3  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 185 |     rc += 4;
 | 
|---|
 | 186 |   }
 | 
|---|
 | 187 |   else cout << "(3) OK   Test AR=A*3  OK " << endl; 
 | 
|---|
 | 188 | 
 | 
|---|
 | 189 |   ar = a/5;  
 | 
|---|
 | 190 |   if (prtlev > 0) 
 | 
|---|
 | 191 |     cout << "(4) AR = A/5=  " << ar << endl;
 | 
|---|
 | 192 |   getMinMax(ar, min, max);
 | 
|---|
 | 193 |   if ((min != 4) || (max != 4)) {
 | 
|---|
 | 194 |     cout << "(4) !!! ERROR Test AR=A/5  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 195 |     rc += 8;
 | 
|---|
 | 196 |   }
 | 
|---|
 | 197 |   else cout << "(4) OK   Test AR=A/5  OK " << endl; 
 | 
|---|
 | 198 | 
 | 
|---|
 | 199 |   ar = 140/a;  
 | 
|---|
 | 200 |   if (prtlev > 0) 
 | 
|---|
 | 201 |     cout << "(5) AR = 140/A= \n " << ar << endl;
 | 
|---|
 | 202 |   getMinMax(ar, min, max);
 | 
|---|
 | 203 |   if ((min != 7) || (max != 7)) {
 | 
|---|
 | 204 |     cout << "(5) !!! ERROR Test AR=140/A  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 205 |     rc += 16;
 | 
|---|
 | 206 |   }
 | 
|---|
 | 207 |   else cout << "(5) OK   Test AR=140/A  OK " << endl; 
 | 
|---|
 | 208 | 
 | 
|---|
 | 209 |   ar -= 3;  
 | 
|---|
 | 210 |   if (prtlev > 0) 
 | 
|---|
 | 211 |     cout << "(6) AR -= 3  " << ar << endl;
 | 
|---|
 | 212 |   getMinMax(ar, min, max);
 | 
|---|
 | 213 |   if ((min != 4) || (max != 4)) {
 | 
|---|
 | 214 |     cout << "(6) !!! ERROR Test AR-=3  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 215 |     rc += 32;
 | 
|---|
 | 216 |   }
 | 
|---|
 | 217 |   else cout << "(6) OK   Test AR-=3  OK " << endl; 
 | 
|---|
 | 218 | 
 | 
|---|
 | 219 | 
 | 
|---|
 | 220 |   TArray<int_4> c = a-2*b;
 | 
|---|
 | 221 |   if (prtlev > 0) 
 | 
|---|
 | 222 |     cout << "(7) C = A-2*B=  " << c << endl;
 | 
|---|
| [1100] | 223 |   getMinMax(c, min, max);
 | 
|---|
 | 224 |   if ((min != 2) || (max != 2)) {
 | 
|---|
| [2568] | 225 |     cout << "(7) !!! ERROR Test C=A+2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 226 |     rc += 64;
 | 
|---|
| [1100] | 227 |   }
 | 
|---|
| [2568] | 228 |   else cout << "(7) OK   Test C=A+2*B  OK " << endl; 
 | 
|---|
| [1100] | 229 | 
 | 
|---|
| [2578] | 230 |   (a*4+1).DivElt(b,c);
 | 
|---|
| [2568] | 231 |   if (prtlev > 0) cout << "(8) C = (A*4+1)/B = " << c << endl;
 | 
|---|
| [1100] | 232 |   getMinMax(c, min, max);
 | 
|---|
 | 233 |   if ((min != 9) || (max != 9)) {
 | 
|---|
| [2568] | 234 |     cout << "(8) !!! ERROR Test C = (A*4+1)/B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 235 |     rc += 128;
 | 
|---|
| [1100] | 236 |   }
 | 
|---|
| [2568] | 237 |   else cout << "(8) OK   Test C = (A*4+1)/B ((DivElt) OK " << endl; 
 | 
|---|
| [1100] | 238 |   
 | 
|---|
| [1107] | 239 |   a = RegularSequence(1, 1);
 | 
|---|
 | 240 |   b = RegularSequence(nr*nc, -1);
 | 
|---|
 | 241 |   c = (a*2)+(b*2);
 | 
|---|
 | 242 |   if (prtlev > 0) {
 | 
|---|
| [2568] | 243 |     cout << "(9) A =  " << a << endl;
 | 
|---|
 | 244 |     cout << "(9) B =  " << b << endl;
 | 
|---|
 | 245 |     cout << "(9) C = 2A-2*B=  " << c << endl;
 | 
|---|
| [1107] | 246 |   }
 | 
|---|
 | 247 |   c /= (nr*nc+1);
 | 
|---|
 | 248 |   getMinMax(c, min, max);
 | 
|---|
 | 249 |   if ((min != 2) || (max != 2)) {
 | 
|---|
| [2568] | 250 |     cout << "(9) !!! ERROR Test C=2A+2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 251 |     rc += 256;
 | 
|---|
| [1107] | 252 |   }
 | 
|---|
| [2568] | 253 |   else cout << "(9) OK   Test C=2A+2*B  OK " << endl; 
 | 
|---|
| [2582] | 254 | 
 | 
|---|
 | 255 |   a = 10;
 | 
|---|
 | 256 |   b = 4;
 | 
|---|
 | 257 |   c = 3*a-2*b;
 | 
|---|
 | 258 |   if (prtlev > 0)  cout << "(10) A=10, B=4, C = 3*A-2*B = " << c << endl;
 | 
|---|
 | 259 |   getMinMax(c, min, max);
 | 
|---|
 | 260 |   if ((min != 22) || (max != 22)) {
 | 
|---|
 | 261 |     cout << "(10) !!! ERROR Test C = 3*A-2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 262 |     rc += 512;
 | 
|---|
 | 263 |   }
 | 
|---|
 | 264 |   else cout << "(10) OK   Test C = 3*A-2*B  OK " << endl; 
 | 
|---|
 | 265 | 
 | 
|---|
 | 266 |   c = 3*a+2*b;
 | 
|---|
 | 267 |   if (prtlev > 0)  cout << "(11) A=10, B=4, C = 3*A+2*B = " << c << endl;
 | 
|---|
 | 268 |   getMinMax(c, min, max);
 | 
|---|
 | 269 |   if ((min != 38) || (max != 38)) {
 | 
|---|
 | 270 |     cout << "(11) !!! ERROR Test C = 3*A+2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 271 |     rc += 512;
 | 
|---|
 | 272 |   }
 | 
|---|
 | 273 |   else cout << "(11) OK   Test C = 3*A+2*B  OK " << endl; 
 | 
|---|
 | 274 | 
 | 
|---|
 | 275 |   a.MulElt(b+2,c);
 | 
|---|
 | 276 |   if (prtlev > 0)  cout << "(12) A=10, B=4, a.MulElt(b+2,c) = " << c << endl;
 | 
|---|
 | 277 |   getMinMax(c, min, max);
 | 
|---|
 | 278 |   if ((min != 60) || (max != 60)) {
 | 
|---|
 | 279 |     cout << "(12) !!! ERROR Test a.MulElt(b+2,c) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 280 |     rc += 1024;
 | 
|---|
 | 281 |   }
 | 
|---|
 | 282 |   else cout << "(12) OK   Test A.MulElt(B+2,C)  OK " << endl; 
 | 
|---|
 | 283 | 
 | 
|---|
 | 284 |   (3*a).DivElt(b+2,c);
 | 
|---|
 | 285 |   if (prtlev > 0)  cout << "(13) A=10, B=4, (3*a).DivElt(b+2,c) C = " << c << endl;
 | 
|---|
 | 286 |   getMinMax(c, min, max);
 | 
|---|
 | 287 |   if ((min != 5) || (max != 5)) {
 | 
|---|
 | 288 |     cout << "(13) !!! ERROR Test (3*a).DivElt(b+2,c) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 289 |     rc += 1024;
 | 
|---|
 | 290 |   }
 | 
|---|
 | 291 |   else cout << "(13) OK  Test (3*A).DivElt(B+2,C)  OK " << endl; 
 | 
|---|
| [1107] | 292 |   
 | 
|---|
| [2586] | 293 |   a = 3;
 | 
|---|
 | 294 |   b = 2;
 | 
|---|
 | 295 |   int_4 sc = a.ScalarProduct(b);
 | 
|---|
 | 296 |   if (prtlev > 0)  cout << "(14) A=3, B=3, a.ScalarProduct(b)= " << sc << endl;
 | 
|---|
 | 297 |   if (sc != nr*nc*6)   {
 | 
|---|
 | 298 |     cout << "(14) !!! ERROR Test  a.ScalarProduct(b) sc " << sc << " !=" << nr*nc*6 << endl;
 | 
|---|
 | 299 |     rc += 2048;
 | 
|---|
 | 300 |   }
 | 
|---|
 | 301 |   else cout << "(14) OK  Test a.ScalarProduct(b)  OK " << endl; 
 | 
|---|
 | 302 | 
 | 
|---|
 | 303 |   TMatrix<int_4> mx(nr, nc), mxc(nr,nc);
 | 
|---|
 | 304 |   for(int ir=0; ir<nr; ir++)
 | 
|---|
 | 305 |     for(int ic=0; ic<nc; ic++) mxc(ir, ic) = ir*1000+ic*6;
 | 
|---|
 | 306 |   if (prtlev > 0)  cout << "(15) mx.Row()/Column() operations MXC=" << mxc << endl;
 | 
|---|
 | 307 |   
 | 
|---|
 | 308 |   TVector<int_4> cv(nr), rv(nc, BaseArray::RowVector);
 | 
|---|
 | 309 |   cv = RegularSequence(0, 1);
 | 
|---|
 | 310 |   rv = RegularSequence(0, 1);
 | 
|---|
 | 311 |   for(int ir=0; ir<nr; ir++)  { 
 | 
|---|
 | 312 |     mx.Row(ir) = rv*3;
 | 
|---|
 | 313 |     mx.Row(ir) *= 2;
 | 
|---|
 | 314 |   }
 | 
|---|
 | 315 |   for(int ic=0; ic<nc; ic++)  { 
 | 
|---|
 | 316 |     mx.Column(ic) += cv*1000;
 | 
|---|
 | 317 |   }
 | 
|---|
 | 318 |   TMatrix<int_4> mxd = mx-mxc;
 | 
|---|
 | 319 |   if (prtlev > 0)  { 
 | 
|---|
 | 320 |     cout << "(15)  MX=" << mx << endl;
 | 
|---|
 | 321 |     cout << "(15)  MXD=" << mxd << endl;
 | 
|---|
 | 322 |   }
 | 
|---|
 | 323 |   getMinMax(mxd, min, max);
 | 
|---|
 | 324 |   if ((min != 0) || (max != 0)) {
 | 
|---|
 | 325 |     cout << "(15) !!! ERROR Test mx.Row()/Column() operations Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 326 |     rc += 8192;
 | 
|---|
 | 327 |   }
 | 
|---|
 | 328 |   else cout << "(15) OK  Test mx.Row()/Column() operations  OK " << endl; 
 | 
|---|
 | 329 | 
 | 
|---|
 | 330 |   a = RegularSequence(1, 1);
 | 
|---|
 | 331 |   b = -a; 
 | 
|---|
 | 332 |   c = a+b;
 | 
|---|
 | 333 |   if (prtlev > 0) {
 | 
|---|
 | 334 |     cout << "(16) A =  " << a << endl;
 | 
|---|
 | 335 |     cout << "(16) B =  ((? == -A)" << b << endl;
 | 
|---|
 | 336 |     cout << "(16) C = A+B  " << c << endl;
 | 
|---|
 | 337 |   }
 | 
|---|
 | 338 |   getMinMax(c, min, max);
 | 
|---|
 | 339 |   if ((min != 0) || (max != 0)) {
 | 
|---|
 | 340 |     cout << "(16) !!! ERROR Test B=-A  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 341 |     rc += 256;
 | 
|---|
 | 342 |   }
 | 
|---|
 | 343 |   else cout << "(16) OK   Test B=-A  OK " << endl; 
 | 
|---|
 | 344 |   
 | 
|---|
| [1100] | 345 |   return(rc);
 | 
|---|
| [1083] | 346 | }
 | 
|---|
| [1100] | 347 | 
 | 
|---|
 | 348 | int test_odo(int nr, int nc)
 | 
|---|
 | 349 | {
 | 
|---|
 | 350 |   cout << "\n -----> Testing TMatrix operation TMatrix<r_4>(nr=" << nr << ",nc=" 
 | 
|---|
| [2568] | 351 |        << nc << " ) " << endl;
 | 
|---|
| [2586] | 352 |   cout << " --> ODO (Diff. Mem. Mapping) A,CC: CMemoryMapping AR,B,C: FortranMemoryMapping" << endl;
 | 
|---|
| [1100] | 353 | 
 | 
|---|
| [1102] | 354 |   int rc = 0;
 | 
|---|
| [1100] | 355 |   r_4 min,max;
 | 
|---|
 | 356 | 
 | 
|---|
 | 357 |   TMatrix<r_4> a(nr,nc,BaseArray::CMemoryMapping);
 | 
|---|
 | 358 |   a = 20;
 | 
|---|
 | 359 |   TMatrix<r_4> b(nr,nc,BaseArray::FortranMemoryMapping);
 | 
|---|
 | 360 |   b = 9;
 | 
|---|
 | 361 | 
 | 
|---|
| [2568] | 362 |   TMatrix<r_4> ar(nr,nc,BaseArray::FortranMemoryMapping);
 | 
|---|
 | 363 | 
 | 
|---|
| [1100] | 364 |   if (prtlev > 0) {
 | 
|---|
 | 365 |     cout << " A = \n " << a << endl;
 | 
|---|
 | 366 |     cout << " B = \n " << b << endl;
 | 
|---|
 | 367 |   }
 | 
|---|
| [2568] | 368 | 
 | 
|---|
 | 369 |   a.AddCst(2.,ar);
 | 
|---|
 | 370 |   if (prtlev > 0) 
 | 
|---|
 | 371 |     cout << "(1) AR = A+2 : a.AddCst(2,ar) : " << ar << endl;
 | 
|---|
 | 372 |   getMinMax(ar, min, max);
 | 
|---|
 | 373 |   if ((fabs(min-22.) > 0.0001) || (fabs(max-22.) > 0.0001)) {
 | 
|---|
 | 374 |     cout << "(1) !!! ERROR Test AR=A+2  a.AddCst(2,ar)   Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 375 |     rc += 1;
 | 
|---|
 | 376 |   }
 | 
|---|
 | 377 |   else cout << "(1) OK   Test AR=A+2 a.AddCst(2,ar)  OK " << endl; 
 | 
|---|
 | 378 | 
 | 
|---|
 | 379 |   a.SubCst(28.,ar,true);
 | 
|---|
 | 380 |   if (prtlev > 0) 
 | 
|---|
 | 381 |     cout << "(2) AR = 28-A : a.SubCst(28,ar,true) :  " << ar << endl;
 | 
|---|
 | 382 |   getMinMax(ar, min, max);
 | 
|---|
 | 383 |   if ((fabs(min-8.) > 0.0001) || (fabs(max-8.) > 0.0001)) {
 | 
|---|
 | 384 |     cout << "(2) !!! ERROR Test AR=28-A  a.SubCst(28,ar,true) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 385 |     rc += 2;
 | 
|---|
 | 386 |   }
 | 
|---|
 | 387 |   else cout << "(2) OK   Test AR=28-A  a.SubCst(28,ar,true) OK " << endl;
 | 
|---|
 | 388 |  
 | 
|---|
 | 389 |   a.MulCst(3.,ar);
 | 
|---|
 | 390 |   if (prtlev > 0) 
 | 
|---|
 | 391 |     cout << "(3) AR = A*3= a.MulCst(3,ar)  " << ar << endl;
 | 
|---|
 | 392 |   getMinMax(ar, min, max);
 | 
|---|
 | 393 |   if ((fabs(min-60.) > 0.0001) || (fabs(max-60.) > 0.0001)) {
 | 
|---|
 | 394 |     cout << "(3) !!! ERROR Test AR=A*3  a.MulCst(3,ar) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 395 |     rc += 4;
 | 
|---|
 | 396 |   }
 | 
|---|
 | 397 |   else cout << "(3) OK   Test AR=A*3  a.MulCst(3,ar) OK " << endl; 
 | 
|---|
 | 398 | 
 | 
|---|
 | 399 |   a.DivCst(5.,ar);
 | 
|---|
 | 400 |   if (prtlev > 0) 
 | 
|---|
 | 401 |     cout << "(4) AR = A/5= a.DivCst(5,ar) : " << ar << endl;
 | 
|---|
 | 402 |   getMinMax(ar, min, max);
 | 
|---|
 | 403 |   if ((fabs(min-4.) > 0.0001) || (fabs(max-4.) > 0.0001)) {
 | 
|---|
 | 404 |     cout << "(4) !!! ERROR Test AR=A/5  a.DivCst(5,ar) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 405 |     rc += 8;
 | 
|---|
 | 406 |   }
 | 
|---|
 | 407 |   else cout << "(4) OK   Test AR=A/5  a.DivCst(5,ar) OK " << endl; 
 | 
|---|
 | 408 | 
 | 
|---|
 | 409 |   a.DivCst(140.,ar,true);
 | 
|---|
 | 410 |   if (prtlev > 0) 
 | 
|---|
 | 411 |     cout << "(5) AR = 140/A= a.DivCst(140.,ar,true) : " << ar << endl;
 | 
|---|
 | 412 |   getMinMax(ar, min, max);
 | 
|---|
 | 413 |   if ((fabs(min-7.) > 0.0001) || (fabs(max-7.) > 0.0001)) {
 | 
|---|
 | 414 |     cout << "(5) !!! ERROR Test AR=140/A  a.DivCst(140.,ar,true) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 415 |     rc += 16;
 | 
|---|
 | 416 |   }
 | 
|---|
 | 417 |   else cout << "(5) OK   Test AR=140/A  a.DivCst(140.,ar,true) OK " << endl; 
 | 
|---|
 | 418 | 
 | 
|---|
 | 419 |   ar -= 3.;  
 | 
|---|
 | 420 |   if (prtlev > 0) 
 | 
|---|
 | 421 |     cout << "(6) AR -= 3 " << ar << endl;
 | 
|---|
 | 422 |   getMinMax(ar, min, max);
 | 
|---|
 | 423 |   if ((min != 4) || (max != 4)) {
 | 
|---|
 | 424 |     cout << "(6) !!! ERROR Test AR-=3  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 425 |     rc += 32;
 | 
|---|
 | 426 |   }
 | 
|---|
 | 427 |   else cout << "(6) OK   Test AR-=3  OK " << endl; 
 | 
|---|
 | 428 | 
 | 
|---|
 | 429 |   TMatrix<r_4> c(nr,nc,BaseArray::FortranMemoryMapping);
 | 
|---|
| [1100] | 430 |   c = a-(b*2.0f);
 | 
|---|
| [2568] | 431 |   if (prtlev > 0) cout << "(7) C = A-2*B=  " << c << endl;
 | 
|---|
| [1100] | 432 | 
 | 
|---|
 | 433 |   getMinMax(c, min, max);
 | 
|---|
 | 434 |   if ((fabs(min-2.) > 0.0001) || (fabs(max-2.) > 0.0001)) {
 | 
|---|
| [2568] | 435 |     cout << "(7) !!! ERROR Test C=A+2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 436 |     rc += 64;
 | 
|---|
| [1100] | 437 |   }
 | 
|---|
| [2568] | 438 |   else cout << "(7) OK   Test C=A+2*B  OK " << endl; 
 | 
|---|
| [1100] | 439 | 
 | 
|---|
| [2578] | 440 |   (a*4.0f+5.5f).DivElt(b,c);
 | 
|---|
| [2568] | 441 |   if (prtlev > 0) cout << "(8) C = (A*4+12)/B = " << c << endl;
 | 
|---|
| [1100] | 442 |   getMinMax(c, min, max);
 | 
|---|
 | 443 |   if ((fabs(min-9.5) > 0.0001) || (fabs(max-9.5) > 0.0001)) {
 | 
|---|
| [2568] | 444 |     cout << "(8) !!! ERROR Test C = (A*4+12)/B  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 445 |     rc += 128;
 | 
|---|
| [1100] | 446 |   }
 | 
|---|
| [2568] | 447 |   else cout << "(8) OK   Test C = (A*4+12)/B  OK " << endl; 
 | 
|---|
| [1107] | 448 | 
 | 
|---|
 | 449 |   a = RegularSequence(1, 1);
 | 
|---|
 | 450 |   b = RegularSequence(nr*nc, -1);
 | 
|---|
 | 451 |   c = (a*2.f)+(b*2.f);
 | 
|---|
 | 452 |   if (prtlev > 0) {
 | 
|---|
| [2568] | 453 |     cout << "(9) A =  " << a << endl;
 | 
|---|
 | 454 |     cout << "(9) B =  " << b << endl;
 | 
|---|
 | 455 |     cout << "(9) C = 2A-2*B= " << c << endl;
 | 
|---|
| [1107] | 456 |   }
 | 
|---|
 | 457 |   c /= (nr*nc+1);
 | 
|---|
 | 458 |   getMinMax(c, min, max);
 | 
|---|
 | 459 |   if ((fabs(min-2.) > 0.0001) || (fabs(max-2.) > 0.0001)) {
 | 
|---|
| [2582] | 460 |     cout << "(9) !!! ERROR Test C=2A+2*B  Min=" << min << " Max=" << max << endl;
 | 
|---|
| [2568] | 461 |     rc += 256;
 | 
|---|
| [1107] | 462 |   }
 | 
|---|
| [2568] | 463 |   else cout << "(9) OK   Test3 C=2A+2*B  OK " << endl; 
 | 
|---|
| [1107] | 464 | 
 | 
|---|
| [2582] | 465 | // ----------------------
 | 
|---|
 | 466 | // Operation de type array +-*/ array 
 | 
|---|
 | 467 | 
 | 
|---|
| [2586] | 468 |   a = 10.;
 | 
|---|
 | 469 |   b = 4.;
 | 
|---|
| [2582] | 470 | 
 | 
|---|
 | 471 |   (3.f*a).SubElt(2.f*b,c);
 | 
|---|
 | 472 |   if (prtlev > 0)  cout << "(10) A=10, B=4, (3*a).SubElt(2*b,c)  C=" << c << endl;
 | 
|---|
 | 473 |   getMinMax(c, min, max);
 | 
|---|
 | 474 |   if ((fabs(min-22.) > 0.0001) || (fabs(max-22.) > 0.0001)) {
 | 
|---|
 | 475 |     cout << "(10) !!! ERROR Test (3*a).SubElt(2*b,c)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 476 |     rc += 512;
 | 
|---|
 | 477 |   }
 | 
|---|
 | 478 |   else cout << "(10) OK   Test (3*a).SubElt(2.*b,c)  OK " << endl; 
 | 
|---|
 | 479 | 
 | 
|---|
 | 480 |   (3.f*a).AddElt(2.f*b,c);
 | 
|---|
 | 481 |   if (prtlev > 0)  cout << "(11) A=10, B=4, (3*a).AddElt(2*b,c) C= " << c << endl;
 | 
|---|
 | 482 |   getMinMax(c, min, max);
 | 
|---|
 | 483 |   if ((fabs(min-38.) > 0.0001) || (fabs(max-38.) > 0.0001)) {
 | 
|---|
 | 484 |     cout << "(11) !!! ERROR Test (3*A).AddElt(2.*B,C)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 485 |     rc += 512;
 | 
|---|
 | 486 |   }
 | 
|---|
 | 487 |   else cout << "(11) OK   Test (3*a).AddElt(2*b,c) OK " << endl; 
 | 
|---|
 | 488 | 
 | 
|---|
 | 489 |   a.MulElt(b+2.f,c);
 | 
|---|
 | 490 |   if (prtlev > 0)  cout << "(12) A=10, B=4, a.MulElt(b+2,c) = " << c << endl;
 | 
|---|
 | 491 |   getMinMax(c, min, max);
 | 
|---|
 | 492 |   if ((fabs(min-60.) > 0.0001) || (fabs(max-60.) > 0.0001)) {
 | 
|---|
 | 493 |     cout << "(12) !!! ERROR Test a.MulElt(b+2,c) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 494 |     rc += 1024;
 | 
|---|
 | 495 |   }
 | 
|---|
 | 496 |   else cout << "(12) OK   Test A.MulElt(B+2,C)  OK " << endl; 
 | 
|---|
 | 497 | 
 | 
|---|
 | 498 |   (3.f*a).DivElt(b+2.f,c);
 | 
|---|
 | 499 |   if (prtlev > 0)  cout << "(13) A=10, B=4, (3*a).DivElt(b+2,c) C = " << c << endl;
 | 
|---|
 | 500 |   getMinMax(c, min, max);
 | 
|---|
 | 501 |   if ((fabs(min-5.) > 0.0001) || (fabs(max-5.) > 0.0001)) {
 | 
|---|
 | 502 |     cout << "(13) !!! ERROR Test (3*a).DivElt(b+2,c) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 503 |     rc += 1024;
 | 
|---|
 | 504 |   }
 | 
|---|
 | 505 |   else cout << "(13) OK  Test (3*A).DivElt(B+2,C)  OK " << endl; 
 | 
|---|
 | 506 | 
 | 
|---|
 | 507 |   TMatrix<r_4> cc(nr,nc,BaseArray::CMemoryMapping);
 | 
|---|
 | 508 | 
 | 
|---|
 | 509 |   (3.f*a).SubElt(2.f*b,cc);
 | 
|---|
 | 510 |   if (prtlev > 0)  cout << "(14) A=10, B=4, (3*a).SubElt(2*b,cc)  " << cc << endl;
 | 
|---|
 | 511 |   getMinMax(cc, min, max);
 | 
|---|
 | 512 |   if ((fabs(min-22.) > 0.0001) || (fabs(max-22.) > 0.0001)) {
 | 
|---|
 | 513 |     cout << "(14) !!! ERROR Test (3*a).SubElt(2*b,cc)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 514 |     rc += 2048;
 | 
|---|
 | 515 |   }
 | 
|---|
 | 516 |   else cout << "(14) OK   Test (3*A).SubElt(2*B,CC)  OK " << endl; 
 | 
|---|
 | 517 | 
 | 
|---|
 | 518 | 
 | 
|---|
 | 519 |   (3.f*a).AddElt(2.f*b,cc);
 | 
|---|
 | 520 |   if (prtlev > 0)  cout << "(15) A=10, B=4, (3*a).AddElt(2*b,cc) CC= " << cc << endl;
 | 
|---|
 | 521 |   getMinMax(cc, min, max);
 | 
|---|
 | 522 |   if ((fabs(min-38.) > 0.0001) || (fabs(max-38.) > 0.0001)) {
 | 
|---|
 | 523 |     cout << "(15) !!! ERROR Test (3*a).AddElt(2*b,c)  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 524 |     rc += 4096;
 | 
|---|
 | 525 |   }
 | 
|---|
 | 526 |   else cout << "(15) OK   Test (3*A).AddElt(2*B,CC) OK " << endl; 
 | 
|---|
 | 527 | 
 | 
|---|
 | 528 |   a.MulElt(b+2.f,cc);
 | 
|---|
 | 529 |   if (prtlev > 0)  cout << "(16) A=10, B=4, a.MulElt(b+2,c) = " << cc << endl;
 | 
|---|
 | 530 |   getMinMax(cc, min, max);
 | 
|---|
 | 531 |   if ((fabs(min-60.) > 0.0001) || (fabs(max-60.) > 0.0001)) {
 | 
|---|
 | 532 |     cout << "(16) !!! ERROR Test A.MulElt(B+2,CC) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 533 |     rc += 8192;
 | 
|---|
 | 534 |   }
 | 
|---|
 | 535 |   else cout << "(16) OK   Test A.MulElt(B+2,C)  OK " << endl; 
 | 
|---|
 | 536 | 
 | 
|---|
 | 537 |   (3.f*a).DivElt(b+2.f,cc);
 | 
|---|
 | 538 |   if (prtlev > 0)  cout << "(17) A=10, B=4, (3*a).DivElt(b+2,cc) C = " << cc << endl;
 | 
|---|
 | 539 |   getMinMax(cc, min, max);
 | 
|---|
 | 540 |   if ((fabs(min-5.) > 0.0001) || (fabs(max-5.) > 0.0001)) {
 | 
|---|
 | 541 |     cout << "(17) !!! ERROR Test (3*a).DivElt(b+2,c) Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 542 |     rc += 16384;
 | 
|---|
 | 543 |   }
 | 
|---|
 | 544 |   else cout << "(17) OK  Test (3*A).DivElt(B+2,CC)  OK " << endl; 
 | 
|---|
| [2586] | 545 | 
 | 
|---|
 | 546 |   a = 3.1;
 | 
|---|
 | 547 |   b = -2.2;
 | 
|---|
 | 548 |   r_4 sc = a.ScalarProduct(b);
 | 
|---|
 | 549 |   r_4 sce = 0.;
 | 
|---|
 | 550 |   for(int kkk=0; kkk<nr*nc; kkk++) sce += -2.2*3.1;
 | 
|---|
 | 551 |   if (prtlev > 0)  cout << "(18) A=3, B=3, a.ScalarProduct(b)= " << sc << endl;
 | 
|---|
 | 552 |   sc -= sce;
 | 
|---|
 | 553 |   if ((fabs(sc) > 0.00001) || (fabs(sc) > 0.00001)) {
 | 
|---|
 | 554 |     cout << "(18) !!! ERROR Test  a.ScalarProduct(b) sc-" <<  sce
 | 
|---|
 | 555 |          << " = " << sc << endl;
 | 
|---|
 | 556 |     rc += 32768;
 | 
|---|
 | 557 |   }
 | 
|---|
 | 558 |   else cout << "(18) OK  Test a.ScalarProduct(b)  OK " << endl; 
 | 
|---|
 | 559 | 
 | 
|---|
 | 560 |   TMatrix<r_4> mx(nr, nc), mxc(nr,nc,BaseArray::FortranMemoryMapping);
 | 
|---|
 | 561 |   for(int ir=0; ir<nr; ir++)
 | 
|---|
 | 562 |     for(int ic=0; ic<nc; ic++) mxc(ir, ic) = ir*1000+ic*6;
 | 
|---|
 | 563 |   if (prtlev > 0)  cout << "(19) mx.Row()/Column() operations MXC=" << mxc << endl;
 | 
|---|
 | 564 |   
 | 
|---|
 | 565 |   TVector<r_4> cv(nr), rv(nc, BaseArray::RowVector, BaseArray::FortranMemoryMapping);
 | 
|---|
 | 566 |   cv = RegularSequence(0, 1);
 | 
|---|
 | 567 |   rv = RegularSequence(0, 1);
 | 
|---|
 | 568 |   for(int ir=0; ir<nr; ir++)  { 
 | 
|---|
 | 569 |     mx.Row(ir) = rv*3.f;
 | 
|---|
 | 570 |     mx.Row(ir) *= 2.f;
 | 
|---|
 | 571 |   }
 | 
|---|
 | 572 |   for(int ic=0; ic<nc; ic++)  { 
 | 
|---|
 | 573 |     mx.Column(ic) += cv*1000.f;
 | 
|---|
 | 574 |   }
 | 
|---|
 | 575 |   TMatrix<r_4> mxd = mx-mxc;
 | 
|---|
 | 576 |   if (prtlev > 0)  { 
 | 
|---|
 | 577 |     cout << "(19)  MX=" << mx << endl;
 | 
|---|
 | 578 |     cout << "(19)  MXD=" << mxd << endl;
 | 
|---|
 | 579 |   }
 | 
|---|
 | 580 |   getMinMax(mxd, min, max);
 | 
|---|
 | 581 |   if ((fabs(min) > 0.0001) || (fabs(max) > 0.0001)) {
 | 
|---|
 | 582 |     cout << "(19) !!! ERROR Test mx.Row()/Column() operations Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 583 |     rc += 65536;
 | 
|---|
 | 584 |   }
 | 
|---|
 | 585 |   else cout << "(19) OK  Test mx.Row()/Column() operations  OK " << endl; 
 | 
|---|
 | 586 | 
 | 
|---|
 | 587 |   a = RegularSequence(3.14, 1.3);
 | 
|---|
 | 588 |   b = -a; 
 | 
|---|
 | 589 |   c = a+b;
 | 
|---|
 | 590 |   if (prtlev > 0) {
 | 
|---|
 | 591 |     cout << "(20) A =  " << a << endl;
 | 
|---|
 | 592 |     cout << "(20) B =  ((? == -A)" << b << endl;
 | 
|---|
 | 593 |     cout << "(16) C = A+B  " << c << endl;
 | 
|---|
 | 594 |   }
 | 
|---|
 | 595 |   getMinMax(c, min, max);
 | 
|---|
 | 596 |   if ((fabs(min) > 0.0001) || (fabs(max) > 0.0001)) {
 | 
|---|
 | 597 |     cout << "(20) !!! ERROR Test B=-A  Min=" << min << " Max=" << max << endl;
 | 
|---|
 | 598 |     rc += 131072;
 | 
|---|
 | 599 |   }
 | 
|---|
 | 600 |   else cout << "(20) OK   Test B=-A  OK " << endl; 
 | 
|---|
 | 601 |   
 | 
|---|
| [1100] | 602 |   return(rc);
 | 
|---|
 | 603 | 
 | 
|---|
| [2586] | 604 |   return(rc);
 | 
|---|
 | 605 | 
 | 
|---|
| [1100] | 606 | }
 | 
|---|