IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 2, 2008, 10:45:23 AM (18 years ago)
Author:
gusciora
Message:

Significant changes and additions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/test/objects/tap_pmTrend2D.c

    r15726 r15985  
    55#include "tap.h"
    66#include "pstap.h"
     7/* STATUS:
     8    All functions are tested.
     9        pmTrend2DFit(): Must test the PM_TREND_MAP case.
     10*/
    711
    812#define NUM_ROWS 8
    913#define NUM_COLS 16
    1014#define ERR_TRACE_LEVEL 0
     15#define TEST_FLOATS_EQUAL(X, Y) (abs(X - Y) < 0.01)
    1116
    1217int main(int argc, char* argv[])
     
    1520    psLogSetLevel(PS_LOG_INFO);
    1621    psTraceSetLevel("err", ERR_TRACE_LEVEL);
    17     plan_tests(35);
     22    plan_tests(91);
    1823
    1924    // ------------------------------------------------------------------------
    2025    // Test pmTrend2DAlloc()
    21     // pmTrend2D *pmTrend2DAlloc(pmTrend2DMode mode, psImage *image,
    22     //                           int nXtrend, int nYtrend, psStats *stats)
    2326    // Call pmTrend2DAlloc() with NULL psImage input parameter (PM_TREND_MAP)
    2427    {
     
    121124    // ------------------------------------------------------------------------
    122125    // Test pmTrend2DNoImageAlloc()
    123     // pmTrend2D *pmTrend2DNoImageAlloc (pmTrend2DMode mode,
    124     //          psImageBinning *binning, psStats *stats)
    125126    // Call pmTrend2DNoImageAlloc() with NULL psImageBinning input parameter
    126127    {
     
    132133        psFree(stats);
    133134        psFree(binning);
     135        psFree(trend);
    134136        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
    135137    }
     
    192194    }
    193195
     196
    194197    // ------------------------------------------------------------------------
    195198    // Test pmTrend2DFieldAlloc()
    196     // pmTrend2D *pmTrend2DFieldAlloc (pmTrend2DMode mode, int nXfield,
    197     //           int nYfield, int nXtrend, int nYtrend, psStats *stats)
    198     //
    199199    // Call pmTrend2DFieldAlloc() with NULL psStats input parameter
    200200    {
     
    221221        ok(trend->poly->nY == 4, "pmTrend2DFieldAlloc() set trend->poly->nY correctly");
    222222        psFree(trend);
     223        trend = NULL;
    223224
    224225        // Create a new pmTrend with PM_TREND_MAP
    225226        // XXX: This currently fails due to a big in pmTrend2DFieldAlloc():
    226         // psImageMapAlloc() is called with a NULL field input parameter.
    227         {
     227        if (0) {
    228228            trend = pmTrend2DFieldAlloc(PM_TREND_MAP, 1, 2, 3, 4, stats);
    229229            ok(trend->map != NULL && psMemCheckImageMap(trend->map),
     
    241241    // psString pmTrend2DModeToString (pmTrend2DMode mode)
    242242    // Call pmTrend2DModeToString() with unallowed pmTrend2DMode.
    243     // XXX: We comment this out because pmTrend2DModeToString() aborts.
     243    // XX: We comment this out because pmTrend2DModeToString() aborts.
    244244    if (0) {
    245245        psMemId id = psMemGetId();
     
    251251
    252252    // Call pmTrend2DModeToString() with unallowed pmTrend2DMode.
    253     // XXX: We comment this out because pmTrend2DModeToString() aborts.
    254253    {
    255254        psMemId id = psMemGetId();
     
    276275    // ------------------------------------------------------------------------
    277276    // Test pmTrend2DModeFromString()
    278     // pmTrend2DMode pmTrend2DModeFromString (psString name) {
    279277    // Call pmTrend2DModeFromString() with NULL input parameter
    280278    {
     
    295293
    296294
    297     // Call pmTrend2DModeFromString() with unallowed input string
     295    // Call pmTrend2DModeFromString() with acceptable input string
    298296    {
    299297        psMemId id = psMemGetId();
     
    304302
    305303
    306     // Call pmTrend2DModeFromString() with unallowed input string
     304    // Call pmTrend2DModeFromString() with acceptable input string
    307305    {
    308306        psMemId id = psMemGetId();
     
    313311
    314312
    315     // Call pmTrend2DModeFromString() with unallowed input string
     313    // Call pmTrend2DModeFromString() with acceptable input string
    316314    {
    317315        psMemId id = psMemGetId();
     
    322320
    323321
    324     // Call pmTrend2DModeFromString() with unallowed input string
     322    // Call pmTrend2DModeFromString() with acceptable input string
    325323    {
    326324        psMemId id = psMemGetId();
     
    331329
    332330
     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
    333504}
Note: See TracChangeset for help on using the changeset viewer.