IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 6, 2004, 2:31:55 PM (22 years ago)
Author:
gusciora
Message:

Most of these tests work.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/test/dataManip/tst_psStats03.c

    r779 r887  
    11/*****************************************************************************
    22    This routine must ensure that PS_STAT_SAMPLE_MEDIAN is correctly computed
    3     by the procedure psArrayStats().
     3    by the procedure psVectorStats().
    44 *****************************************************************************/
    55#include <stdio.h>
    66#include "pslib.h"
    77#include "psTest.h"
    8 #define N1 1029
     8#define N1 1029   // This should be an odd number.
    99#define N ((4 * N1) + 1)
    1010
     
    1212{
    1313    psStats *myStats    = NULL;
    14     psStats *myStats2   = NULL;
    1514    int testStatus      = true;
     15    int globalTestStatus = true;
    1616    int i               = 0;
    1717    psVector *myVector  = NULL;
    1818    psVector *maskVector= NULL;
    1919    float median        = 1e99;
    20     float realMedian1   = 1e99;
    21     float realMedian2   = 1e99;
     20    float realMedianWithMask = (float) (N-3)/4;
     21    float realMedianNoMask = (float) (N-1)/2;
     22    int currentId       = psMemGetId();
     23    int memLeaks        = 0;
    2224
    23     printPositiveTestHeader(stdout,
    24                             "psStats functions",
    25                             "PS_STAT_SAMPLE_MEDIAN");
    26 
     25    /*************************************************************************/
     26    /*  Allocate and initialize data structures                      */
     27    /*************************************************************************/
    2728    myStats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN);
    28     myVector = psVectorAlloc(PS_TYPE_FLOAT, N);
     29    myVector = psVectorAlloc(N, PS_TYPE_F32);
    2930    myVector->n = N;
    30     maskVector = psVectorAlloc(PS_TYPE_UINT8, N);
     31    maskVector = psVectorAlloc(N, PS_TYPE_U8);
    3132    maskVector->n = N;
    3233
     34    // Set the appropriate values for the vector data.
    3335    for (i=0;i<N;i++) {
    34         myVector->vec.f[i] = (float) i;
     36        myVector->data.F32[i] = (float) i;
     37    }
     38
     39    // Set the mask vector and calculate the expected median.
     40    for (i=0;i<N;i++) {
    3541        if (i < (N/2)) {
    36             maskVector->vec.ui8[i] = 0;
    37             if (myVector->vec.f[i] < realMedian2) {
    38                 realMedian2 = myVector->vec.f[i];
    39             }
     42            maskVector->data.U8[i] = 0;
    4043        } else {
    41             maskVector->vec.ui8[i] = 1;
    42             if (myVector->vec.f[i] < realMedian1) {
    43                 realMedian1 = myVector->vec.f[i];
    44             }
     44            maskVector->data.U8[i] = 1;
    4545        }
    4646    }
    4747
    48     myStats2 = psArrayStats(myVector, NULL, 0, myStats);
    49     median = myStats2->sampleMedian;
     48    /*************************************************************************/
     49    /*  Call psVectorStats() with no vector mask.                    */
     50    /*************************************************************************/
     51    printPositiveTestHeader(stdout,
     52                            "psStats functions",
     53                            "PS_STAT_SAMPLE_MEDIAN: no vector mask");
    5054
    51     printf("Called psArrayStats() on a vector with no elements masked.\n");
     55    myStats = psVectorStats(myStats, myVector, NULL, 0);
     56    median = myStats->sampleMedian;
     57
     58    printf("Called psVectorStats() on a vector with no elements masked.\n");
    5259    printf("The expected median was %f.  The calculated median was %f.\n",
    53            (float) (N-1)/2, median);
    54     if (median == (float) (N-1)/2) {
     60           realMedianNoMask, median);
     61    if (median == realMedianNoMask) {
    5562        testStatus = true;
    5663    } else {
    5764        testStatus = false;
     65        globalTestStatus = false;
    5866    }
    5967
    60     myStats2 = psArrayStats(myVector, maskVector, 1, myStats);
    61     median = myStats2->sampleMedian;
    62     printf("Called psArrayStats() on a vector with last N/2 elements masked.\n");
     68    printFooter(stdout,
     69                "psStats functions",
     70                "PS_STAT_SAMPLE_MEDIAN: no vector mask",
     71                testStatus);
     72
     73    /*************************************************************************/
     74    /*  Call psVectorStats() with vector mask.                       */
     75    /*************************************************************************/
     76    printPositiveTestHeader(stdout,
     77                            "psStats functions",
     78                            "PS_STAT_SAMPLE_MEDIAN: with vector mask");
     79
     80    myStats = psVectorStats(myStats, myVector, maskVector, 1);
     81    median = myStats->sampleMedian;
     82    printf("Called psVectorStats() on a vector with last N/2 elements masked.\n");
    6383    printf("The expected median was %f.  The calculated median was %f.\n",
    64            (float) (N-3)/4, median);
    65     if (median == (float) (N-3)/4) {
     84           realMedianWithMask, median);
     85    if (median == realMedianWithMask) {
    6686        testStatus = true;
    6787    } else {
    6888        testStatus = false;
     89        globalTestStatus = false;
    6990    }
    7091
    7192    printFooter(stdout,
    72                 "psHash functions",
    73                 "psHashAlloc()",
     93                "psStats functions",
     94                "PS_STAT_SAMPLE_MEDIAN: with vector mask",
    7495                testStatus);
    7596
    76     return (!testStatus);
     97    /*************************************************************************/
     98    /*  Deallocate data structures                                   */
     99    /*************************************************************************/
     100    printPositiveTestHeader(stdout,
     101                            "psStats functions",
     102                            "psStats(): deallocating memory");
     103
     104    psStatsFree(myStats);
     105    psVectorFree(myVector);
     106    psVectorFree(maskVector);
     107
     108    psMemCheckCorruption(1);
     109    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
     110    if (0 != memLeaks) {
     111        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
     112    }
     113
     114    printFooter(stdout,
     115                "psStats functions",
     116                "psStats(): deallocating memory",
     117                testStatus);
     118
     119    return (!globalTestStatus);
    77120}
Note: See TracChangeset for help on using the changeset viewer.