Changeset 798 for trunk/psLib/test/dataManip/tst_psMatrix01.c
- Timestamp:
- May 27, 2004, 4:52:23 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/test/dataManip/tst_psMatrix01.c (modified) (1 diff)
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 1 20 #include "pslib.h" 2 //#include <gsl/gsl_matrix.h> 21 #include "psTest.h" 3 22 4 int main(void) 23 #define PRINT_MATRIX(IMAGE) \ 24 for(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 31 int main(int argc, 32 char* argv[]) 5 33 { 6 34 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;18 35 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); 69 51 70 52 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); 122 58 123 59 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); 144 66 145 67 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); 147 79 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; 160 81 }
Note:
See TracChangeset
for help on using the changeset viewer.
