Changeset 15985 for trunk/psModules/test/objects/tap_pmTrend2D.c
- Timestamp:
- Jan 2, 2008, 10:45:23 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/test/objects/tap_pmTrend2D.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/test/objects/tap_pmTrend2D.c
r15726 r15985 5 5 #include "tap.h" 6 6 #include "pstap.h" 7 /* STATUS: 8 All functions are tested. 9 pmTrend2DFit(): Must test the PM_TREND_MAP case. 10 */ 7 11 8 12 #define NUM_ROWS 8 9 13 #define NUM_COLS 16 10 14 #define ERR_TRACE_LEVEL 0 15 #define TEST_FLOATS_EQUAL(X, Y) (abs(X - Y) < 0.01) 11 16 12 17 int main(int argc, char* argv[]) … … 15 20 psLogSetLevel(PS_LOG_INFO); 16 21 psTraceSetLevel("err", ERR_TRACE_LEVEL); 17 plan_tests( 35);22 plan_tests(91); 18 23 19 24 // ------------------------------------------------------------------------ 20 25 // Test pmTrend2DAlloc() 21 // pmTrend2D *pmTrend2DAlloc(pmTrend2DMode mode, psImage *image,22 // int nXtrend, int nYtrend, psStats *stats)23 26 // Call pmTrend2DAlloc() with NULL psImage input parameter (PM_TREND_MAP) 24 27 { … … 121 124 // ------------------------------------------------------------------------ 122 125 // Test pmTrend2DNoImageAlloc() 123 // pmTrend2D *pmTrend2DNoImageAlloc (pmTrend2DMode mode,124 // psImageBinning *binning, psStats *stats)125 126 // Call pmTrend2DNoImageAlloc() with NULL psImageBinning input parameter 126 127 { … … 132 133 psFree(stats); 133 134 psFree(binning); 135 psFree(trend); 134 136 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 135 137 } … … 192 194 } 193 195 196 194 197 // ------------------------------------------------------------------------ 195 198 // Test pmTrend2DFieldAlloc() 196 // pmTrend2D *pmTrend2DFieldAlloc (pmTrend2DMode mode, int nXfield,197 // int nYfield, int nXtrend, int nYtrend, psStats *stats)198 //199 199 // Call pmTrend2DFieldAlloc() with NULL psStats input parameter 200 200 { … … 221 221 ok(trend->poly->nY == 4, "pmTrend2DFieldAlloc() set trend->poly->nY correctly"); 222 222 psFree(trend); 223 trend = NULL; 223 224 224 225 // Create a new pmTrend with PM_TREND_MAP 225 226 // XXX: This currently fails due to a big in pmTrend2DFieldAlloc(): 226 // psImageMapAlloc() is called with a NULL field input parameter. 227 { 227 if (0) { 228 228 trend = pmTrend2DFieldAlloc(PM_TREND_MAP, 1, 2, 3, 4, stats); 229 229 ok(trend->map != NULL && psMemCheckImageMap(trend->map), … … 241 241 // psString pmTrend2DModeToString (pmTrend2DMode mode) 242 242 // Call pmTrend2DModeToString() with unallowed pmTrend2DMode. 243 // XX X: We comment this out because pmTrend2DModeToString() aborts.243 // XX: We comment this out because pmTrend2DModeToString() aborts. 244 244 if (0) { 245 245 psMemId id = psMemGetId(); … … 251 251 252 252 // Call pmTrend2DModeToString() with unallowed pmTrend2DMode. 253 // XXX: We comment this out because pmTrend2DModeToString() aborts.254 253 { 255 254 psMemId id = psMemGetId(); … … 276 275 // ------------------------------------------------------------------------ 277 276 // Test pmTrend2DModeFromString() 278 // pmTrend2DMode pmTrend2DModeFromString (psString name) {279 277 // Call pmTrend2DModeFromString() with NULL input parameter 280 278 { … … 295 293 296 294 297 // Call pmTrend2DModeFromString() with unallowedinput string295 // Call pmTrend2DModeFromString() with acceptable input string 298 296 { 299 297 psMemId id = psMemGetId(); … … 304 302 305 303 306 // Call pmTrend2DModeFromString() with unallowedinput string304 // Call pmTrend2DModeFromString() with acceptable input string 307 305 { 308 306 psMemId id = psMemGetId(); … … 313 311 314 312 315 // Call pmTrend2DModeFromString() with unallowedinput string313 // Call pmTrend2DModeFromString() with acceptable input string 316 314 { 317 315 psMemId id = psMemGetId(); … … 322 320 323 321 324 // Call pmTrend2DModeFromString() with unallowedinput string322 // Call pmTrend2DModeFromString() with acceptable input string 325 323 { 326 324 psMemId id = psMemGetId(); … … 331 329 332 330 331 // ------------------------------------------------------------------------ 332 // Test pmTrend2DFit() 333 // Call pmTrend2DFit() with bad input parameters 334 { 335 #define VEC_SIZE 9 336 psMemId id = psMemGetId(); 337 psImage *img = psImageAlloc(NUM_COLS, NUM_ROWS, PS_TYPE_F32); 338 psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 339 pmTrend2D *trend = pmTrend2DAlloc(PM_TREND_POLY_ORD, img, 4, 4, stats); 340 ok(trend != NULL && psMemCheckTrend2D(trend), 341 "pmTrend2DAlloc() returned non-NULL with acceptable input parameters"); 342 psVector *x = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 343 psVector *y = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 344 psVector *f = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 345 psVector *mask = psVectorAlloc(VEC_SIZE, PS_TYPE_U8); 346 psVector *df = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 347 for (int i = 0 ; i < VEC_SIZE ; i++) { 348 x->data.F32[i] = (float) (i); 349 y->data.F32[i] = (float) (2 * i); 350 f->data.F32[i] = x->data.F32[i] * y->data.F32[i]; 351 mask->data.U8[i] = 0; 352 df->data.F32[i] = 0.0; 353 } 354 355 // NULL pmTrend2D input parameter 356 bool rc = pmTrend2DFit(NULL, mask, 0, x, y, f, df); 357 ok(rc == false, "pmTrend2DFit() returned FALSE with NULL pmTrend2D input parameter"); 358 359 // NULL mask input parameter 360 rc = pmTrend2DFit(trend, NULL, 0, x, y, f, df); 361 ok(rc == false, "pmTrend2DFit() returned FALSE with NULL mask input parameter"); 362 363 // NULL x psVector input parameter 364 rc = pmTrend2DFit(trend, mask, 0, NULL, y, f, df); 365 ok(rc == false, "pmTrend2DFit() returned FALSE with NULL x psVector input parameter"); 366 367 // NULL y psVector input parameter 368 rc = pmTrend2DFit(trend, mask, 0, x, NULL, f, df); 369 ok(rc == false, "pmTrend2DFit() returned FALSE with NULL y psVector input parameter"); 370 371 // NULL f psVector input parameter 372 rc = pmTrend2DFit(trend, mask, 0, x, y, NULL, df); 373 ok(rc == false, "pmTrend2DFit() returned FALSE with NULL f psVector input parameter"); 374 375 // NULL df psVector input parameter 376 rc = pmTrend2DFit(trend, mask, 0, x, y, f, NULL); 377 ok(rc == true, "pmTrend2DFit() returned TRUE with NULL df psVector input parameter"); 378 379 psFree(img); 380 psFree(stats); 381 psFree(trend); 382 psFree(x); 383 psFree(y); 384 psFree(f); 385 psFree(mask); 386 psFree(df); 387 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 388 } 389 390 391 // ------------------------------------------------------------------------ 392 // Test pmTrend2DEval() 393 // Call pmTrend2DEval() with bad input parameters 394 { 395 psMemId id = psMemGetId(); 396 psF64 tmpD = pmTrend2DEval(NULL, 0.0, 0.0); 397 ok(TEST_FLOATS_EQUAL(tmpD, 0.0), "pmTrend2DEval() returned 0.0 with NULL pmTrend2D input parameter"); 398 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 399 } 400 401 402 // ------------------------------------------------------------------------ 403 // Test pmTrend2DEvalVector() 404 // psVector *pmTrend2DEvalVector (pmTrend2D *trend, psVector *x, psVector *y) 405 // Call pmTrend2DEvalVector() with bad input parameters 406 { 407 psMemId id = psMemGetId(); 408 psImage *img = psImageAlloc(NUM_COLS, NUM_ROWS, PS_TYPE_F32); 409 psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 410 pmTrend2D *trend = pmTrend2DAlloc(PM_TREND_POLY_ORD, img, 4, 4, stats); 411 psVector *x = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 412 psVector *y = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 413 414 // NULL pmTrend2D input parameter 415 psVector *f = pmTrend2DEvalVector(NULL, x, y); 416 ok(f == NULL, "pmTrend2DEvalVector() returned NULL with NULL pmTrend2D input parameter"); 417 418 // NULL x psVector input parameter 419 f = pmTrend2DEvalVector(trend, NULL, y); 420 ok(f == NULL, "pmTrend2DEvalVector() returned NULL with NULL x psVector input parameter"); 421 422 // NULL y psVector input parameter 423 f = pmTrend2DEvalVector(trend, x, NULL); 424 ok(f == NULL, "pmTrend2DEvalVector() returned NULL with NULL y psVector input parameter"); 425 426 psFree(img); 427 psFree(stats); 428 psFree(trend); 429 psFree(x); 430 psFree(y); 431 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 432 } 433 434 435 // Test pmTrend2DFit(), pmTrend2DEval(), pmTrend2DEvalVector() with acceptable input parameters 436 // NOTE: We only test with a very simple 2D polynomial fit. This is appropriate since the 437 // polynomial testing routines are tested extensively elsewhere. 438 // XXX: Must test the PM_TREND_MAP case. 439 { 440 #define VEC_SIZE 9 441 psMemId id = psMemGetId(); 442 psImage *img = psImageAlloc(NUM_COLS, NUM_ROWS, PS_TYPE_F32); 443 psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV); 444 pmTrend2D *trend = pmTrend2DAlloc(PM_TREND_POLY_ORD, img, 4, 4, stats); 445 ok(trend != NULL && psMemCheckTrend2D(trend), 446 "pmTrend2DAlloc() returned non-NULL with acceptable input parameters"); 447 psVector *x = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 448 psVector *y = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 449 psVector *f = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 450 psVector *mask = psVectorAlloc(VEC_SIZE, PS_TYPE_U8); 451 psVector *df = psVectorAlloc(VEC_SIZE, PS_TYPE_F32); 452 453 int cnt = 0; 454 for (int i = 0 ; i < 3 ; i++) { 455 for (int j = 0 ; j < 3 ; j++) { 456 x->data.F32[cnt] = (float) i; 457 y->data.F32[cnt] = (float) j; 458 f->data.F32[cnt] = x->data.F32[cnt] * y->data.F32[cnt]; 459 mask->data.U8[cnt] = 0; 460 df->data.F32[cnt] = 0.0; 461 cnt++; 462 } 463 } 464 465 bool rc = pmTrend2DFit(trend, mask, 0, x, y, f, NULL); 466 ok(rc == true, "pmTrend2DFit() returned TRUE with acceptable input parameters"); 467 468 // Test pmTrend2DFit, pmTrend2DEval() 469 bool errorFlag = false; 470 for (int i = 0 ; i < VEC_SIZE ; i++) { 471 if (!TEST_FLOATS_EQUAL(pmTrend2DEval(trend, x->data.F32[i], y->data.F32[i]), f->data.F32[i])) { 472 diag("ERROR: at (%.2f %.2f), eval is %.2f, should be %.2f\n", x->data.F32[i], y->data.F32[i], 473 pmTrend2DEval(trend, x->data.F32[i], y->data.F32[i]), f->data.F32[i]); 474 errorFlag = true; 475 } 476 } 477 ok(!errorFlag, "pmTrend2DFit() and pmTrend2DEval() set and evaluated the 2DTrend polynomial correctly"); 478 479 // Test pmTrend2DEvalVector() 480 psVector *fTest = pmTrend2DEvalVector(trend, x, y); 481 errorFlag = false; 482 for (int i = 0 ; i < VEC_SIZE ; i++) { 483 if (!TEST_FLOATS_EQUAL(fTest->data.F32[i], f->data.F32[i])) { 484 diag("ERROR: at (%.2f %.2f), eval is %.2f, should be %.2f\n", 485 x->data.F32[i], y->data.F32[i], fTest->data.F32[i], f->data.F32[i]); 486 errorFlag = true; 487 } 488 } 489 ok(!errorFlag, "pmTrend2DFit() and pmTrend2DEval() set and evaluated the 2DTrend polynomial correctly"); 490 491 492 psFree(img); 493 psFree(stats); 494 psFree(trend); 495 psFree(x); 496 psFree(y); 497 psFree(f); 498 psFree(fTest); 499 psFree(mask); 500 psFree(df); 501 ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks"); 502 } 503 333 504 }
Note:
See TracChangeset
for help on using the changeset viewer.
