Changeset 7105 for trunk/psLib/test/math/tst_psPolyFit2D.c
- Timestamp:
- May 10, 2006, 3:19:57 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/math/tst_psPolyFit2D.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/test/math/tst_psPolyFit2D.c
r6484 r7105 11 11 #include "pslib.h" 12 12 #include "psTest.h" 13 #define NUM_DATA 3513 #define NUM_DATA 100 14 14 #define POLY_ORDER_X 2 15 15 #define POLY_ORDER_Y 3 … … 93 93 } 94 94 95 96 psVector *xTruth = psVectorAlloc(numData, PS_TYPE_F64); 97 psVector *yTruth = psVectorAlloc(numData, PS_TYPE_F64); 98 psVector *fTruth = psVectorAlloc(numData, PS_TYPE_F64); 99 xTruth->n = numData; 100 yTruth->n = numData; 101 fTruth->n = numData; 102 psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 1); // Using an RNG with a known seed 103 for (int i = 0; i < numData; i++) { 104 xTruth->data.F64[i] = 2.0*psRandomUniform(rng) - 1.0; 105 yTruth->data.F64[i] = 2.0*psRandomUniform(rng) - 1.0; 106 fTruth->data.F64[i] = setData(xTruth->data.F64[i], yTruth->data.F64[i]); 107 } 108 psFree(rng); 109 95 110 if (flags & TS00_X_NULL) { 96 111 printf(" using a NULL x vector\n"); … … 99 114 if (flags & TS00_X_F32) { 100 115 printf(" using a psF32 x vector\n"); 101 x = psVectorAlloc(numData, PS_TYPE_F32); 102 x->n = numData; 103 for (psS32 i=0;i<numData;i++) { 104 x->data.F32[i] = (psF32) i; 105 } 116 x = psVectorCopy(NULL, xTruth, PS_TYPE_F32); 106 117 } 107 118 108 119 if (flags & TS00_X_S32) { 109 120 printf(" using a psS32 x vector\n"); 110 x = psVectorAlloc(numData, PS_TYPE_S32); 111 x->n = numData; 112 for (psS32 i=0;i<numData;i++) { 113 x->data.S32[i] = (psS32) i; 114 } 121 x = psVectorCopy(NULL, xTruth, PS_TYPE_S32); 115 122 } 116 123 117 124 if (flags & TS00_X_F64) { 118 125 printf(" using a psF64 x vector\n"); 119 x = psVectorAlloc(numData, PS_TYPE_F64); 120 x->n = numData; 121 for (psS32 i=0;i<numData;i++) { 122 x->data.F64[i] = (psF64) i; 123 } 124 } 125 126 x = psVectorCopy(NULL, xTruth, PS_TYPE_F64); 127 } 126 128 127 129 if (flags & TS00_Y_NULL) { … … 131 133 if (flags & TS00_Y_F32) { 132 134 printf(" using a psF32 y vector\n"); 133 y = psVectorAlloc(numData, PS_TYPE_F32); 134 y->n = numData; 135 for (psS32 i=0;i<numData;i++) { 136 y->data.F32[i] = (psF32) i; 137 } 135 y = psVectorCopy(NULL, yTruth, PS_TYPE_F32); 138 136 } 139 137 140 138 if (flags & TS00_Y_S32) { 141 139 printf(" using a psS32 y vector\n"); 142 y = psVectorAlloc(numData, PS_TYPE_S32); 143 y->n = numData; 144 for (psS32 i=0;i<numData;i++) { 145 y->data.S32[i] = (psS32) i; 146 } 140 y = psVectorCopy(NULL, yTruth, PS_TYPE_S32); 147 141 } 148 142 149 143 if (flags & TS00_Y_F64) { 150 144 printf(" using a psF64 y vector\n"); 151 y = psVectorAlloc(numData, PS_TYPE_F64); 152 y->n = numData; 153 for (psS32 i=0;i<numData;i++) { 154 y->data.F64[i] = (psF64) i; 155 } 145 y = psVectorCopy(NULL, yTruth, PS_TYPE_F64); 156 146 } 157 147 … … 162 152 if (flags & TS00_F_F32) { 163 153 printf(" using a psF32 f vector\n"); 164 f = psVectorAlloc(numData, PS_TYPE_F32); 165 f->n = numData; 166 for (psS32 i=0;i<numData;i++) { 167 f->data.F32[i] = setData((psF32) i, (psF32) i); 168 } 154 f = psVectorCopy(NULL, fTruth, PS_TYPE_F32); 169 155 // Set a few outliers in the data. 170 156 if (OUTLIERS && (flags & TS00_CLIP_FIT)) { … … 183 169 if (flags & TS00_F_S32) { 184 170 printf(" using a psS32 f vector\n"); 185 f = psVectorAlloc(numData, PS_TYPE_S32); 186 f->n = numData; 187 for (psS32 i=0;i<numData;i++) { 188 f->data.S32[i] = (psS32) setData((psF32) i, (psF32) i); 189 } 171 f = psVectorCopy(NULL, fTruth, PS_TYPE_S32); 190 172 // Set a few outliers in the data. 191 173 if (OUTLIERS && (flags & TS00_CLIP_FIT)) { … … 204 186 if (flags & TS00_F_F64) { 205 187 printf(" using a psF64 f vector\n"); 206 f = psVectorAlloc(numData, PS_TYPE_F64); 207 f->n = numData; 208 for (psS32 i=0;i<numData;i++) { 209 f->data.F64[i] = (psF64) setData((psF32) i, (psF32) i); 210 } 188 f = psVectorCopy(NULL, fTruth, PS_TYPE_F64); 211 189 // Set a few outliers in the data. 212 190 if (OUTLIERS && (flags & TS00_CLIP_FIT)) { … … 301 279 } 302 280 281 psVector *result = psPolynomial2DEvalVector(myPoly, xTruth, yTruth); 303 282 for (psS32 i=0 ;i<numData; i++) { 304 283 // Skip the outliers. … … 306 285 continue; 307 286 } 308 psF32 expectData; 309 psF32 xData; 310 psF32 yData; 311 if (flags & TS00_F_F32) { 312 expectData = f->data.F32[i]; 313 } else if (flags & TS00_F_F64) { 314 expectData = (psF32) f->data.F64[i]; 315 } else if (flags & TS00_F_S32) { 316 expectData = (psF32) f->data.S32[i]; 317 } 318 319 if (flags & TS00_X_F32) { 320 xData = x->data.F32[i]; 321 } else if (flags & TS00_X_F64) { 322 xData = (psF32) x->data.F64[i]; 323 } else if (flags & TS00_X_S32) { 324 xData = (psF32) x->data.S32[i]; 325 } else if (flags & TS00_X_NULL) { 326 xData = (psF32) i; 327 } 328 329 if (flags & TS00_Y_F32) { 330 yData = y->data.F32[i]; 331 } else if (flags & TS00_Y_F64) { 332 yData = (psF32) y->data.F64[i]; 333 } else if (flags & TS00_Y_S32) { 334 yData = (psF32) y->data.S32[i]; 335 } else if (flags & TS00_Y_NULL) { 336 yData = (psF32) i; 337 } 338 339 psF32 actualData = psPolynomial2DEval(myPoly, xData, yData); 287 psF64 actualData = result->data.F64[i]; 288 psF64 expectData = fTruth->data.F64[i]; 340 289 341 290 if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) { 342 printf("TEST ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",343 i, xData,actualData, expectData);291 printf("TEST ERROR: Fitted data %d: (%.1f), expected was (%.1f)\n", 292 i, actualData, expectData); 344 293 testStatus = false; 345 294 } else { 346 295 if (VERBOSE) { 347 printf("GOOD: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",348 i, xData,actualData, expectData);296 printf("GOOD: Fitted data %d: (%.1f), expected was (%.1f)\n", 297 i, actualData, expectData); 349 298 } 350 299 } 351 300 } 301 psFree(result); 352 302 } 353 303 … … 355 305 psFree(myPoly); 356 306 psFree(mask); 307 psFree(xTruth); 308 psFree(yTruth); 309 psFree(fTruth); 357 310 psFree(x); 358 311 psFree(y);
Note:
See TracChangeset
for help on using the changeset viewer.
