IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 22, 2004, 9:58:57 AM (22 years ago)
Author:
harman
Message:

Added more tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/tst_pmFlatField.c

    r1832 r1849  
    1 /** @file  filename.h
    2  *
    3  *  @brief Contains the definitions for ...
    4  *
    5  *  Detailed Description goes here.
     1/** @file tst_pmFlatField.c
     2 *
     3 *  @brief Contains the tests for pmFlatField.c:
    64 *
    75 *  @author Ross Harman, MHPCC
    86 *
    9  *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-09-20 20:36:46 $
     7 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
     8 *  @date $Date: 2004-09-22 19:58:57 $
    119 *
    1210 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
    1311 */
    1412
     13#include<stdlib.h>
     14
     15#include "psTest.h"
     16#include "pslib.h"
    1517#include "pmFlatField.h"
    1618
    1719
    18 #define PRINT_MATRIX(IMAGE,TYPE)                                                                             \
    19 for(int i=IMAGE->numRows-1; i>-1; i--) {                                                                 \
    20     for(int j=0; j<IMAGE->numCols; j++) {                                                                \
    21         if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                 \
    22             printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));             \
    23         } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                              \
    24             printf("%d ", (int)IMAGE->data.TYPE[i][j]);                                                  \
    25         } else {                                                                                         \
    26             printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                               \
    27         }                                                                                                \
    28     }                                                                                                    \
    29     printf("\n");                                                                                        \
    30 }                                                                                                        \
     20#define PRINT_MATRIX(IMAGE,TYPE,STRING)                                                                      \
     21printf(STRING);                                                                                              \
     22printf("\n");                                                                                                \
     23for(int i=IMAGE->numRows-1; i>-1; i--) {                                                                     \
     24    for(int j=0; j<IMAGE->numCols; j++) {                                                                    \
     25        if(PS_IS_PSELEMTYPE_COMPLEX(IMAGE->type.type)) {                                                     \
     26            printf("%f+%fi ", creal(IMAGE->data.TYPE[i][j]), cimag(IMAGE->data.TYPE[i][j]));                 \
     27        } else if(PS_IS_PSELEMTYPE_INT(IMAGE->type.type)) {                                                  \
     28            printf("%d ", (int)IMAGE->data.TYPE[i][j]);                                                      \
     29        } else {                                                                                             \
     30            printf("%f ", (double)IMAGE->data.TYPE[i][j]);                                                   \
     31        }                                                                                                    \
     32    }                                                                                                        \
     33    printf("\n");                                                                                            \
     34}                                                                                                            \
    3135printf("\n");
    3236
    3337
    34 int main(void)
     38#define CREATE_AND_SET_IMAGE(NAME,TYPE,VALUE,NROWS,NCOLS)                                                    \
     39psImage *NAME = (psImage*)psImageAlloc(NCOLS,NROWS,PS_TYPE_##TYPE);                                          \
     40for(int i=0; i<NAME->numRows; i++) {                                                                         \
     41    for(int j=0; j<NAME->numCols; j++) {                                                                     \
     42        NAME->data.TYPE[i][j] = VALUE;                                                                       \
     43    }                                                                                                        \
     44}
     45
     46
     47static int testFlatField(void);
     48
     49
     50testDescription tests[] = {
     51                              {testFlatField, 884, "pmFlatField", 0, false},
     52                              {NULL}
     53                          };
     54
     55
     56int main(int argc, char* argv[])
    3557{
    36     psImage *inImage = psImageAlloc(3, 3, PS_TYPE_F64);
    37     psImage *flatImage1 = psImageAlloc(3, 3, PS_TYPE_F64);
    38     psImage *flatImage2 = psImageAlloc(3, 3, PS_TYPE_F64);
     58    return !runTestSuite(stderr, "Test Point Driver", tests, argc, argv);
     59}
     60
     61
     62int testFlatField( void )
     63{
     64    // Test A - Divide input image by flat image
     65    printPositiveTestHeader(stdout, "pmFlatField", "Test A - Divide input image by flat image");
     66    printf("Divide input image by flat image\n\n");
     67    CREATE_AND_SET_IMAGE(inImage,F64,6.0,3,3)
    3968    psReadout *inReadout  = psReadoutAlloc(0, 0, inImage);
     69    PRINT_MATRIX(inImage,F64,"Input image:");
     70    CREATE_AND_SET_IMAGE(flatImage1,F64,2.0,3,3)
    4071    psReadout *flatReadout  = psReadoutAlloc(0, 0, flatImage1);
    41 
    42     for(int r=0;r<3;r++) {
    43         for(int c=0;c<3;c++) {
    44             inImage->data.F64[r][c]=8.0;
    45             flatImage1->data.F64[r][c]=4.0;
    46             flatImage2->data.F64[r][c]=0.0;
    47         }
    48     }
    49 
    50     PRINT_MATRIX(inImage,F64);
    51     PRINT_MATRIX(flatImage1, F64);
    52     pmFlatField(inReadout, flatReadout);
    53     PRINT_MATRIX(inImage,F64);
    54 
    55     PRINT_MATRIX(inImage, F64);
    56     PRINT_MATRIX(flatImage2, F64);
     72    PRINT_MATRIX(flatImage1,F64,"Flat image:");
     73    pmFlatField(inReadout, flatReadout);
     74    PRINT_MATRIX(inImage,F64, "Resulting image:");
     75    printFooter(stdout, "pmFlatField", "Test A - Divide input image by flat image", true);
     76    printf("\n\n\n");
     77
     78
     79    // Test B - Mask flat image data
     80    printPositiveTestHeader(stdout, "pmFlatField", "Test B - Mask flat image data");
     81    PRINT_MATRIX(inImage, F64, "Input image:");
     82    CREATE_AND_SET_IMAGE(flatImage2,F64,0.0,3,3)
     83    PRINT_MATRIX(flatImage2, F64, "Flat image:");
    5784    flatReadout->image = flatImage2;
    5885    pmFlatField(inReadout, flatReadout);
    59     PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA);
     86    PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA, "Resulting mask:");
     87    printFooter(stdout, "pmFlatField", "Test B - Mask flat image data", true);
     88    printf("\n\n\n");
     89
     90
     91    // Test C - Mask flat image data starting with non-null mask
     92    printf("Mask flat image data starting with non-null mask\n\n");
     93    printPositiveTestHeader(stdout, "pmFlatField", "Test C - Mask flat image data starting with non-null mask");
     94    PRINT_MATRIX(inImage, F64, "Input image:");
     95    flatImage2->data.F64[0][0] = 1.0;
     96    PRINT_MATRIX(flatImage2, F64, "Flat image:");
     97    CREATE_AND_SET_IMAGE(mask1,U8,0,3,3);
     98    psFree(inReadout->mask);
     99    inReadout->mask = mask1;
     100    pmFlatField(inReadout, flatReadout);
     101    PRINT_MATRIX(inReadout->mask, PS_TYPE_MASK_DATA,"Resulting mask:");
     102    printFooter(stdout, "pmFlatField", "Test C - Mask flat image data starting with non-null mask", true);
     103    printf("\n\n\n");
     104
     105
     106    // Test D - Attempt to use null flat readout
     107    printNegativeTestHeader(stdout,"pmFlatField", "Test D - Attempt to use null flat readout",
     108                            "Null not allowed for flat readout", 0);
     109    pmFlatField(inReadout, NULL);
     110    printFooter(stdout, "pmFlatField", "Test D - Attempt to use null flat readout", true);
     111    printf("\n\n\n");
     112
     113
     114    // Test E - Attempt to use null input image
     115    printNegativeTestHeader(stdout,"pmFlatField", "Test E - Attempt to use null input image",
     116                            "Null not allowed for input image", 0);
     117    psImage *temp = inReadout->image;
     118    inReadout->image = NULL;
     119    pmFlatField(inReadout, flatReadout);
     120    inReadout->image = temp;
     121    printFooter(stdout, "pmFlatField", "Test E - Attempt to use null input image", true);
     122    printf("\n\n\n");
     123
     124
     125    // Test F - Attempt tp use null flat image
     126    printNegativeTestHeader(stdout,"pmFlatField", "Test F - Attempt tp use null flat image",
     127                            "Null not allowed for flat image", 0);
     128    temp = flatReadout->image;
     129    flatReadout->image = NULL;
     130    pmFlatField(inReadout, flatReadout);
     131    flatReadout->image = temp;
     132    printFooter(stdout, "pmFlatField", "Test F - Attempt tp use null flat image", true);
     133    printf("\n\n\n");
     134
     135
     136    // Test G - Attempt to use input image bigger than flat image
     137    printNegativeTestHeader(stdout,"pmFlatField", "Test G - Attempt to use input image bigger than flat image",
     138                            "Input image size exceeds that of flat image", 0);
     139    CREATE_AND_SET_IMAGE(smallFlat,F64,0.0,2,2);
     140    temp = flatReadout->image;
     141    flatReadout->image = smallFlat;
     142    pmFlatField(inReadout, flatReadout);
     143    flatReadout->image = temp;
     144    printFooter(stdout, "pmFlatField", "Test G - Attempt to use input image bigger than flat image", true);
     145    printf("\n\n\n");
     146
     147
     148    // Test H - Attempt to use input image mask bigger than flat image
     149    printNegativeTestHeader(stdout,"pmFlatField", "Test H - Attempt to use input image mask bigger than flat image",
     150                            "Input image mask size exceeds that of flat image", 0);
     151    CREATE_AND_SET_IMAGE(largeMask,F64,0.0,4,4);
     152    temp = inReadout->mask;
     153    inReadout->mask = largeMask;
     154    pmFlatField(inReadout, flatReadout);
     155    inReadout->mask = temp;
     156    printFooter(stdout, "pmFlatField", "Test H - Attempt to use input image mask bigger than flat image", true);
     157    printf("\n\n\n");
     158
     159
     160    // Test I - Attempt to use offset greater than input image
     161    printNegativeTestHeader(stdout,"pmFlatField", "Test I - Attempt to use offset greater than input image",
     162                            "Total offset >= input image size", 0);
     163    *(int*)&inReadout->col0 = 50;
     164    *(int*)&inReadout->row0 = 50;
     165    pmFlatField(inReadout, flatReadout);
     166    *(int*)&inReadout->col0 = 0;
     167    *(int*)&inReadout->row0 = 0;
     168    printFooter(stdout, "pmFlatField", "Test I - Attempt to use offset greater than input image", true);
     169    printf("\n\n\n");
     170
     171
     172    // Test J - Attempt to use complex input image
     173    printNegativeTestHeader(stdout,"pmFlatField", "Test J - Attempt to use complex input image",
     174                            "Complex types not allowed for input image", 0);
     175    *(psElemType* ) & inReadout->image->type.type = PS_TYPE_C64;
     176    pmFlatField(inReadout, flatReadout);
     177    *(psElemType* ) & inReadout->image->type.type = PS_TYPE_F64;
     178    printFooter(stdout, "pmFlatField", "Test J - Attempt to use complex input image", true);
     179    printf("\n\n\n");
     180
     181
     182    // Test K - Attempt to use complex flat image
     183    printNegativeTestHeader(stdout,"pmFlatField", "Test K - Attempt to use complex flat image",
     184                            "Complex types not allowed for flat image", 0);
     185    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_C64;
     186    pmFlatField(inReadout, flatReadout);
     187    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F64;
     188    printFooter(stdout, "pmFlatField", "Test K - Attempt to use complex flat image", true);
     189    printf("\n\n\n");
     190
     191
     192    // Test L - Attempt to use non-equal input and flat image types
     193    printNegativeTestHeader(stdout,"pmFlatField", "Test L - Attempt to use non-equal input and flat image types",
     194                            "Input and flat image types differ", 0);
     195    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F32;
     196    pmFlatField(inReadout, flatReadout);
     197    *(psElemType* ) & flatReadout->image->type.type = PS_TYPE_F64;
     198    printFooter(stdout, "pmFlatField", "Test L - Attempt to use non-equal input and flat image types", true);
     199    printf("\n\n\n");
     200
     201
     202    // Test M - Attempt to use non-mask type mask image
     203    printNegativeTestHeader(stdout,"pmFlatField", "Test M - Attempt to use non-mask type mask image",
     204                            "Mask must be PS_TYPE_MASK type", 0);
     205    *(psElemType* ) & inReadout->mask->type.type = PS_TYPE_F32;
     206    pmFlatField(inReadout, flatReadout);
     207    *(psElemType* ) & inReadout->mask->type.type = PS_TYPE_MASK;
     208    printFooter(stdout, "pmFlatField", "Test M - Attempt to use non-mask type mask image", true);
     209    printf("\n\n\n");
     210
     211
     212    // Free memory
     213    psFree(inReadout);
     214    psFree(flatReadout);
     215    psFree(inImage);
     216    psFree(flatImage1);
     217    psFree(flatImage1);
     218    psFree(smallFlat);
     219    psFree(largeMask);
     220
    60221    return 0;
    61222}
     223
Note: See TracChangeset for help on using the changeset viewer.