IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 27, 2004, 4:52:23 PM (22 years ago)
Author:
harman
Message:

Added psMatrix test files

File:
1 edited

Legend:

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

    r759 r798  
     1/** @file  tst_psMatrix_01.c
     2 *
     3 *  @brief Test driver for psMatrix transpose function
     4 *
     5 *  This test driver contains the following tests for psMatrix test point 1:
     6 *     A)  Create input and output images
     7 *     B)  Transpose input image into output image
     8 *     C)  Transpose input image into auto allocated NULL output image
     9 *     D)  Free images and check for leaks
     10 *
     11 *  @author  Ross Harman, MHPCC
     12 *
     13 *  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
     14 *  @date  $Date: 2004-05-28 02:52:23 $
     15 *
     16 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     17 *
     18 */
     19
    120#include "pslib.h"
    2 //#include <gsl/gsl_matrix.h>
     21#include "psTest.h"
    322
    4 int main(void)
     23#define PRINT_MATRIX(IMAGE)                         \
     24for(int i=IMAGE->numRows-1; i>-1; i--) {        \
     25    for(int j=0; j<IMAGE->numCols; j++) {       \
     26        printf("%f ", IMAGE->data.F64[i][j]);   \
     27    }                                          \
     28    printf("\n");                              \
     29}
     30
     31int main(int argc,
     32         char* argv[])
    533{
    634
    7     psImage *d = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    8     psImage *dout = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    9     d->data.F64[0][0] = 1;
    10     d->data.F64[0][1] = 2;
    11     d->data.F64[0][2] = 3;
    12     d->data.F64[1][0] = 4;
    13     d->data.F64[1][1] = 5;
    14     d->data.F64[1][2] = 6;
    15     d->data.F64[2][0] = 7;
    16     d->data.F64[2][1] = 8;
    17     d->data.F64[2][2] = 9;
    1835
    19     psMatrixTranspose(dout, d);
    20     printf("%f\n", dout->data.F64[2][1]);
    21 
    22     psImage *e = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    23     e->data.F64[0][0] = 1;
    24     e->data.F64[0][1] = 2;
    25     e->data.F64[0][2] = 3;
    26     e->data.F64[1][0] = 4;
    27     e->data.F64[1][1] = 5;
    28     e->data.F64[1][2] = 6;
    29     e->data.F64[2][0] = 7;
    30     e->data.F64[2][1] = 8;
    31     e->data.F64[2][2] = 9;
    32 
    33     //    psImage *f = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    34 
    35     //    char x = '+';
    36 
    37     //    psMatrixOp(f, d, &x, e);
    38 
    39     psImage *g = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    40     g->data.F64[0][0] =  2;
    41     g->data.F64[0][1] =  4;
    42     g->data.F64[0][2] =  3;
    43     g->data.F64[1][0] =  0;
    44     g->data.F64[1][1] =  1;
    45     g->data.F64[1][2] = -1;
    46     g->data.F64[2][0] =  3;
    47     g->data.F64[2][1] =  5;
    48     g->data.F64[2][2] =  7;
    49 
    50     psImage *h = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    51     float det;
    52 
    53     h = psMatrixInvert(h, g, &det);
    54 
    55     int i;
    56     int j;
    57 
    58     for(i=0; i<3; i++)
    59         for(j=0; j<3; j++) {
    60             printf("inv %f\n", h->data.F64[i][j]);
    61         }
    62 
    63     printf("det %f\n", psMatrixDeterminant(g));
    64 
    65     for(i=0; i<3; i++)
    66         for(j=0; j<3; j++) {
    67             printf("g %f\n", g->data.F64[i][j]);
    68         }
     36    // Test A - Create input and output images
     37    printPositiveTestHeader(stdout, "psMatrix", "Create input and output images");
     38    psImage *inImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
     39    psImage *outImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_F64);
     40    inImage->data.F64[0][0] = 1;
     41    inImage->data.F64[0][1] = 2;
     42    inImage->data.F64[0][2] = 3;
     43    inImage->data.F64[1][0] = 4;
     44    inImage->data.F64[1][1] = 5;
     45    inImage->data.F64[1][2] = 6;
     46    inImage->data.F64[2][0] = 7;
     47    inImage->data.F64[2][1] = 8;
     48    inImage->data.F64[2][2] = 9;
     49    PRINT_MATRIX(inImage);
     50    printFooter(stdout, "psMatrix", "Create input and output images", true);
    6951
    7052
    71     psImage *luImage = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    72     psVector *perm = (psVector*)psVectorAlloc(3, PS_TYPE_DOUBLE);
    73     psVector *outVector = (psVector*)psVectorAlloc(3, PS_TYPE_DOUBLE);
    74     psVector *inVector = (psVector*)psVectorAlloc(3, PS_TYPE_DOUBLE);
    75 
    76     inVector->vec.d[0] =  6.0;
    77     inVector->vec.d[1] = -4.0;
    78     inVector->vec.d[2] =  7.0;
    79     inVector->n = 3;
    80 
    81     psMatrixLUD(luImage, perm, g);
    82 
    83     for(i=0; i<3; i++)
    84         for(j=0; j<3; j++) {
    85             printf("luImage %f\n", luImage->data.F64[i][j]);
    86         }
    87 
    88     psMatrixLUSolve(outVector, luImage, inVector, perm);
    89 
    90     for(j=0; j<3; j++)
    91         printf("%f\n", outVector->vec.d[j]);
    92 
    93     psImage *m = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    94     m->data.F64[0][0] =  1.1;
    95     m->data.F64[0][1] =  1.1;
    96     m->data.F64[0][2] =  1.1;
    97     m->data.F64[1][0] =  1.1;
    98     m->data.F64[1][1] =  1.1;
    99     m->data.F64[1][2] =  1.1;
    100     m->data.F64[2][0] =  1.1;
    101     m->data.F64[2][1] =  1.1;
    102     m->data.F64[2][2] =  1.1;
    103 
    104     psImage *n = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    105     n->data.F64[0][0] =  1.1;
    106     n->data.F64[0][1] =  1.1;
    107     n->data.F64[0][2] =  1.1;
    108     n->data.F64[1][0] =  1.1;
    109     n->data.F64[1][1] =  1.1;
    110     n->data.F64[1][2] =  1.1;
    111     n->data.F64[2][0] =  1.1;
    112     n->data.F64[2][1] =  1.1;
    113     n->data.F64[2][2] =  1.1;
    114 
    115     psImage *p = (psImage*)psImageAlloc(3, 3, PS_TYPE_DOUBLE);
    116     psMatrixOp(p, m, '*', n);
    117 
    118     for(i=0; i<3; i++)
    119         for(j=0; j<3; j++) {
    120             printf("luImage %f\n", p->data.F64[i][j]);
    121         }
     53    // Test B - Transpose input image into output image
     54    printPositiveTestHeader(stdout, "psMatrix", "Transpose input image into output image");
     55    psMatrixTranspose(outImage, inImage);
     56    PRINT_MATRIX(outImage);
     57    printFooter(stdout, "psMatrix", "Transpose input image into output image", true);
    12258
    12359
    124 
    125     psVector *v = (psVector*)psVectorAlloc(PS_TYPE_DOUBLE, 3);
    126     psImage *m2 = (psImage*)psImageAlloc(1, 3, PS_TYPE_DOUBLE);
    127     m2->data.F64[0][0] = 0.0;
    128     m2->data.F64[1][0] = 1.0;
    129     m2->data.F64[2][0] = 2.0;
    130 
    131     v = psMatrixToVector(v, m2);
    132 
    133     for(j=0; j<3; j++)
    134         printf("v %f\n", v->vec.d[j]);
    135 
    136     psImage *m3 = (psImage*)psImageAlloc(1, 3, PS_TYPE_DOUBLE);
    137     psVector *v3 = (psVector*)psVectorAlloc(PS_TYPE_DOUBLE, 3);
    138     v3->vec.d[0] = 0.0;
    139     v3->vec.d[1] = 1.0;
    140     v3->vec.d[2] = 2.0;
    141     m3 = psVectorToMatrix(m3, v3);
    142     for(j=0; j<3; j++)
    143         printf("m3 %f\n", m3->data.F64[j][0]);
     60    // Test C -  Transpose input image into auto allocated NULL output image
     61    printPositiveTestHeader(stdout, "psMatrix", "ranspose input image into auto allocated NULL output image");
     62    psImage *outImageNull = NULL;
     63    outImageNull = psMatrixTranspose(outImageNull, inImage);
     64    PRINT_MATRIX(outImageNull);
     65    printFooter(stdout, "psMatrix", "ranspose input image into auto allocated NULL output image", true);
    14466
    14567
    146     psImage *inData = (psImage*)psImageAlloc(2, 2, PS_TYPE_DOUBLE);
     68    // Test D - Free images and check for leaks
     69    printPositiveTestHeader(stdout, "psMatrix", "Free images and check for leaks");
     70    psImageFree(inImage);
     71    psImageFree(outImage);
     72    psImageFree(outImageNull);
     73    psMemCheckLeaks(0, NULL, stdout);
     74    int nBad = psMemCheckCorruption(0);
     75    if(nBad) {
     76        printf("ERROR: Found %d bad memory blocks\n", nBad);
     77    }
     78    printFooter(stdout, "psMatrix" ,"Free images and check for leaks", true);
    14779
    148     inData ->data.F64[0][0] =  0.0;
    149     inData ->data.F64[0][1] =  4.0;
    150     inData ->data.F64[1][0] =  4.0;
    151     inData ->data.F64[1][1] =  4.1;
    152 
    153     psImage *outData = (psImage*)psImageAlloc(2, 2, PS_TYPE_DOUBLE);
    154 
    155 
    156     psMatrixEigenvectors(outData, inData);
    157     for(j=0; j<2; j++)
    158         printf("outData %f\n", m3->data.F64[j][0]);
    159 
     80    return 0;
    16081}
Note: See TracChangeset for help on using the changeset viewer.