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_pmSource.c

    r15726 r15985  
    77/*
    88Tested:
    9     pmSourceAlloc()
    10     psMemCheckSource()
    11     pmSourceCopy()
    12     pmSourceDefinePixels()
    13     pmSourceRedefinePixels()
    14     pmSourcePSFClump()
    15     pmSourceGetModel()
    16 Must Test:
    17     pmSourceFreePixels()
    18     pmSourceTest()
    19     pmSourceRoughClass()
    20     pmSourceMoments()
    21     pmSourceAdd()
    22     pmSourceSub()
    23     pmSourceAddWithOffset()
    24     pmSourceSubWithOffset()
    25     pmSourceOp()
    26     pmSourceCacheModel()
    27     pmSourceCachePSF()
     9    Tested
     10        pmSourceAlloc()
     11        pmSourceCopy()
     12        pmSourceDefinePixels()
     13        pmSourceRedefinePixels()
     14        pmSourcePSFClump()
     15        pmSourceGetModel()
     16        pmSourceAdd()
     17        pmSourceSub()
     18        pmSourceAddWithOffset()
     19        pmSourceSubWithOffset()
     20        pmSourceOp()
     21        pmSourceCacheModel()
     22        pmSourceCachePSF()
     23        pmSourceSortBySN()      (COMPILER ERRORS)
     24        pmSourceSortByY()       (COMPILER ERRORS)
     25    Must test
     26        pmSourceMoments()
     27        pmSourceRoughClass()
     28
    2829*/
    2930
     
    3233#define MISC_NAME              "META00"
    3334#define NUM_BIAS_DATA           10
    34 #define TEST_NUM_ROWS           (8+1)
    35 #define TEST_NUM_COLS           (8+1)
     35#define TEST_NUM_ROWS           (4+1)
     36#define TEST_NUM_COLS           (4+1)
    3637#define VERBOSE                 0
    3738#define ERR_TRACE_LEVEL         0
     39#define TEST_FLOATS_EQUAL(X, Y) (abs(X - Y) < 0.01)
    3840
    3941/******************************************************************************
     
    6365    psLogSetLevel(PS_LOG_INFO);
    6466    psTraceSetLevel("err", ERR_TRACE_LEVEL);
    65     plan_tests(1);
     67    plan_tests(128);
    6668
    6769    // ----------------------------------------------------------------------
     
    494496        psFree(src);
    495497        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
    496     }
    497 
     498        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     499    }
    498500
    499501    // Call pmSourceGetModel() with acceptable input parameters
     
    534536        ok(false == isPDF, "pmSourceGetModel() set isPDF to FALSE");
    535537
    536 
    537538        src->modelPSF = NULL;
    538539        src->modelConv = NULL;
     
    558559    }
    559560
     561
     562    // call pmSourceOp() with acceptable parameters
     563    // We only test with a single Gaussian model, with no residuals or masks.
     564    // For completeness, additional tests should be added.
     565        // We should also set mode &= PM_MODEL_OP_NOISE to test that the src->weights are added.
     566    {
     567        psMemId id = psMemGetId();
     568        pmSource *src = pmSourceAlloc();
     569        src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32);
     570        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     571            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     572                src->pixels->data.F32[i][j] = 0.0;
     573            }
     574        }
     575        src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE);
     576        src->type = PM_SOURCE_TYPE_STAR;
     577        src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS"));
     578        psF32 *PAR = src->modelPSF->params->data.F32;
     579        PAR[PM_PAR_I0] = 5.0;
     580        PAR[PM_PAR_XPOS] = 0.0;
     581        PAR[PM_PAR_YPOS] = 0.0;
     582        PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2);
     583        PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2);
     584        PAR[PM_PAR_SXX] = 10.0;
     585        PAR[PM_PAR_SYY] = 10.0;
     586
     587        bool rc = pmSourceOp(src, PM_SOURCE_MODE_PSFMODEL, true, 0, 0, 0);
     588        ok(rc == true, "pmSourceOp() returned TRUE with acceptable input parameters");
     589        psVector *x = psVectorAlloc(2, PS_TYPE_F32);
     590        bool errorFlag = false;
     591        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     592            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     593                x->data.F32[0] = (float) j;
     594                x->data.F32[1] = (float) i;
     595                psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x);
     596                psF32 imgF = src->pixels->data.F32[i][j];
     597                if (!TEST_FLOATS_EQUAL(modF, imgF)) {
     598                    diag("ERROR: src->pixels[%d][%d] is %.2f, should be %.2f", i, j, src->pixels->data.F32[i][j], modF);
     599                    errorFlag = true;
     600                }
     601            }
     602        }
     603        ok(!errorFlag, "pmSourceOp() set the image pixels correctly (PSF function)");
     604        psFree(x);
     605        psFree(src);
     606        pmModelClassCleanup();
     607        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     608    }
     609
     610
     611    // call pmSourceOp() with acceptable parameters
     612    // Test source->modelFlux
     613        // We should also set mode &= PM_MODEL_OP_NOISE to test that the src->weights are added.
     614    {
     615        psMemId id = psMemGetId();
     616        pmSource *src = pmSourceAlloc();
     617        src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32);
     618        src->modelFlux = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32);
     619        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     620            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     621                src->pixels->data.F32[i][j] = 0.0;
     622                src->modelFlux->data.F32[i][j] = (float) (i + j);
     623            }
     624        }
     625        src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE);
     626        src->type = PM_SOURCE_TYPE_STAR;
     627        src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS"));
     628        psF32 *PAR = src->modelPSF->params->data.F32;
     629        PAR[PM_PAR_I0] = 1.0;
     630        PAR[PM_PAR_XPOS] = 0.0;
     631        PAR[PM_PAR_YPOS] = 0.0;
     632        PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2);
     633        PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2);
     634        PAR[PM_PAR_SXX] = 10.0;
     635        PAR[PM_PAR_SYY] = 10.0;
     636
     637        bool rc = pmSourceOp(src, PM_SOURCE_MODE_PSFMODEL, true, 0, 0, 0);
     638        ok(rc == true, "pmSourceOp() returned TRUE with acceptable input parameters");
     639        psVector *x = psVectorAlloc(2, PS_TYPE_F32);
     640        bool errorFlag = false;
     641        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     642            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     643                x->data.F32[0] = (float) j;
     644                x->data.F32[1] = (float) i;
     645                psF32 modF = src->modelFlux->data.F32[i][j];
     646                psF32 imgF = src->pixels->data.F32[i][j];
     647                if (!TEST_FLOATS_EQUAL(modF, imgF)) {
     648                    diag("ERROR: src->pixels[%d][%d] is %.2f, should be %.2f", i, j, src->pixels->data.F32[i][j], modF);
     649                    errorFlag = true;
     650                }
     651            }
     652        }
     653        ok(!errorFlag, "pmSourceOp() set the image pixels correctly (src->modelFlux cache image)");
     654        psFree(x);
     655        psFree(src);
     656        pmModelClassCleanup();
     657        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     658    }
     659
     660
     661    // ----------------------------------------------------------------------
     662    // pmSourceCacheModel() tests
     663    // call pmSourceCacheModel() with NULL pmSource input parameter
     664    {
     665        psMemId id = psMemGetId();
     666        bool rc = pmSourceCacheModel(NULL, 0);
     667        ok(rc == false, "pmSourceCacheModel() returned FALSE with NULL pmSource input parameter");
     668        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     669    }
     670
     671
     672    // ----------------------------------------------------------------------
     673    // pmSourceCacheModel() tests
     674    // bool pmSourceCacheModel (pmSource *source, psMaskType maskVal) {
     675    // call pmSourceCacheModel() with acceptable parameters
     676    {
     677        psMemId id = psMemGetId();
     678        pmSource *src = pmSourceAlloc();
     679        src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32);
     680        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     681            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     682                src->pixels->data.F32[i][j] = 0.0;
     683            }
     684        }
     685        src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE);
     686        src->type = PM_SOURCE_TYPE_STAR;
     687        src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS"));
     688        psF32 *PAR = src->modelPSF->params->data.F32;
     689        PAR[PM_PAR_I0] = 1.0;
     690        PAR[PM_PAR_XPOS] = 0.0;
     691        PAR[PM_PAR_YPOS] = 0.0;
     692        PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2);
     693        PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2);
     694        PAR[PM_PAR_SXX] = 10.0;
     695        PAR[PM_PAR_SYY] = 10.0;
     696
     697        bool rc = pmSourceCacheModel(src, 0);
     698        ok(rc == true, "pmSourceCacheModel() returned TRUE with acceptable input parameters");
     699
     700        psVector *x = psVectorAlloc(2, PS_TYPE_F32);
     701        bool errorFlag = false;
     702        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     703            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     704                x->data.F32[0] = (float) j;
     705                x->data.F32[1] = (float) i;
     706                psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x);
     707                psF32 imgF = src->modelFlux->data.F32[i][j];
     708                if (!TEST_FLOATS_EQUAL(modF, imgF)) {
     709                    diag("ERROR: src->modelFlux[%d][%d] is %.2f, should be %.2f", i, j, src->modelFlux->data.F32[i][j], modF);
     710                    errorFlag = true;
     711                }
     712            }
     713        }
     714        ok(!errorFlag, "pmSourceCacheModel() set the src->modelFlux correctly (PSF function)");
     715        psFree(x);
     716        psFree(src);
     717        pmModelClassCleanup();
     718        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     719    }
     720
     721
     722    // ----------------------------------------------------------------------
     723    // pmSourceCachePSF() tests
     724    // bool pmSourceCachePSF (pmSource *source, psMaskType maskVal) {
     725    // call pmSourceCachePSF() with NULL pmSource input parameter
     726    {
     727        psMemId id = psMemGetId();
     728        bool rc = pmSourceCachePSF(NULL, 0);
     729        ok(rc == false, "pmSourceCachePSF() returned FALSE with NULL pmSource input parameter");
     730        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     731    }
     732
     733
     734    // call pmSourceCachePSF() with acceptable parameters
     735    {
     736        psMemId id = psMemGetId();
     737        pmSource *src = pmSourceAlloc();
     738        src->pixels = psImageAlloc(TEST_NUM_COLS, TEST_NUM_ROWS, PS_TYPE_F32);
     739        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     740            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     741                src->pixels->data.F32[i][j] = 0.0;
     742            }
     743        }
     744        src->peak = pmPeakAlloc(TEST_NUM_COLS/2, TEST_NUM_ROWS/2, 5.0, PM_PEAK_LONE);
     745        src->type = PM_SOURCE_TYPE_STAR;
     746        src->modelPSF = pmModelAlloc(pmModelClassGetType("PS_MODEL_GAUSS"));
     747        psF32 *PAR = src->modelPSF->params->data.F32;
     748        PAR[PM_PAR_I0] = 1.0;
     749        PAR[PM_PAR_XPOS] = 0.0;
     750        PAR[PM_PAR_YPOS] = 0.0;
     751        PAR[PM_PAR_XPOS] = (float) (TEST_NUM_COLS/2);
     752        PAR[PM_PAR_YPOS] = (float) (TEST_NUM_ROWS/2);
     753        PAR[PM_PAR_SXX] = 10.0;
     754        PAR[PM_PAR_SYY] = 10.0;
     755
     756        bool rc = pmSourceCachePSF(src, 0);
     757        ok(rc == true, "pmSourceCachePSF() returned TRUE with acceptable input parameters");
     758
     759        psVector *x = psVectorAlloc(2, PS_TYPE_F32);
     760        bool errorFlag = false;
     761        for (int i = 0 ; i < TEST_NUM_ROWS ; i++) {
     762            for (int j = 0 ; j < TEST_NUM_COLS ; j++) {
     763                x->data.F32[0] = (float) j;
     764                x->data.F32[1] = (float) i;
     765                psF32 modF = src->modelPSF->modelFunc (NULL, src->modelPSF->params, x);
     766                psF32 imgF = src->psfFlux->data.F32[i][j];
     767                if (!TEST_FLOATS_EQUAL(modF, imgF)) {
     768                    diag("ERROR: src->psfFlux[%d][%d] is %.2f, should be %.2f", i, j, src->psfFlux->data.F32[i][j], modF);
     769                    errorFlag = true;
     770                }
     771            }
     772        }
     773        ok(!errorFlag, "pmSourceCachePSF() set the src->psfFlux correctly (PSF function)");
     774        psFree(x);
     775        psFree(src);
     776        pmModelClassCleanup();
     777        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     778    }
     779
     780
     781    // ----------------------------------------
     782    // pmSourceSortBySN() tests
     783    // int pmSourceSortBySN (const void **a, const void **b)
     784    // Call pmSourceSortBySN() with acceptable input parameters.
     785    // XXX: We don't test with NULL input parameters since this function has no PS_ASSERTS to protect
     786    // against that.
     787/* XXXX: Compiler errors: fix this
     788    {
     789        psMemId id = psMemGetId();
     790        pmSource *src1 = pmSourceAlloc();
     791        src1->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE);
     792        src1->peak->SN = 10.0;
     793        pmSource *src2 = pmSourceAlloc();
     794        src2->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE);
     795        src2->peak->SN = 20.0;
     796
     797        int rc = pmSourceSortBySN((const void **) &src1, (const void **) &src2);
     798        ok(rc == 1, "pmSourceSortBySN() returned correct result (source1 < source2) (%d)", rc);
     799        rc = pmSourceSortBySN((const void **) &src2, (const void **) &src1);
     800        ok(rc == -1, "pmSourceSortBySN() returned correct result (source2 < source1) (%d)", rc);
     801        rc = pmSourceSortBySN((const void **) &src1, (const void **) &src1);
     802        ok(rc == 0, "pmSourceSortBySN() returned correct result (source1 == source2) (%d)", rc);
     803
     804        psFree(src1);
     805        psFree(src2);
     806        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     807    }
     808
     809
     810    // ----------------------------------------
     811    // pmSourceSortByY() tests
     812    // int pmSourceSortByY (const void **a, const void **b)
     813    // Call pmSourceSortByY() with acceptable input parameters.
     814    // XXX: We don't test with NULL input parameters since this function has no PS_ASSERTS to protect
     815    // against that.
     816    {
     817        psMemId id = psMemGetId();
     818        pmSource *src1 = pmSourceAlloc();
     819        src1->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE);
     820        src1->peak->y = 10.0;
     821        pmSource *src2 = pmSourceAlloc();
     822        src2->peak = pmPeakAlloc(3, 4, 2.0, PM_PEAK_LONE);
     823        src2->peak->y = 20.0;
     824
     825        int rc = pmSourceSortByY((const void **) &src1, (const void **) &src2);
     826        ok(rc == -1, "pmSourceSortByY() returned correct result (source1 < source2) (%d)", rc);
     827        rc = pmSourceSortByY((const void **) &src2, (const void **) &src1);
     828        ok(rc == 1, "pmSourceSortByY() returned correct result (source2 < source1) (%d)", rc);
     829        rc = pmSourceSortByY((const void **) &src1, (const void **) &src1);
     830        ok(rc == 0, "pmSourceSortByY() returned correct result (source1 == source2) (%d)", rc);
     831
     832        psFree(src1);
     833        psFree(src2);
     834        ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
     835    }
     836*/
     837
    560838}
Note: See TracChangeset for help on using the changeset viewer.