Index: /trunk/psLib/test/image/tst_psImageInterpolate.c
===================================================================
--- /trunk/psLib/test/image/tst_psImageInterpolate.c	(revision 2752)
+++ /trunk/psLib/test/image/tst_psImageInterpolate.c	(revision 2753)
@@ -5,7 +5,7 @@
  * @author Eric Van Alst, MHPCC
  *
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *          $Name: not supported by cvs2svn $
- * @date $Date: 2004-12-17 03:04:05 $
+ * @date $Date: 2004-12-17 22:33:21 $
  *
  * Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -25,6 +25,6 @@
 }
 
-#define CHECK_INTERP_VALUE(img,x,y,exposed,TYPE,expected) \
-val = (psF32)psImagePixelInterpolate(img,x,y,NULL,0,exposed,PS_INTERPOLATE_##TYPE); \
+#define CHECK_INTERP_VALUE(img,x,y,mask,maskval,exposed,TYPE,expected) \
+val = (psF32)psImagePixelInterpolate(img,x,y,mask,maskval,exposed,PS_INTERPOLATE_##TYPE); \
 if(val != expected) { \
     psError(PS_ERR_UNKNOWN,true,"Return value is not as expected."); \
@@ -34,14 +34,15 @@
 #define CHECK_INTERP_BY_TYPE(TYPE) \
 GENIMAGE(img1,10,10,TYPE,row+col) \
-CHECK_INTERP_VALUE(img1,1.9,1.6,0,FLAT,2.0) \
-CHECK_INTERP_VALUE(img1,4.0,2.0,0,BILINEAR,5.0) \
+CHECK_INTERP_VALUE(img1,1.9,1.6,NULL,0,0,FLAT,2.0) \
+CHECK_INTERP_VALUE(img1,4.0,2.0,NULL,0,0,BILINEAR,5.0) \
 psFree(img1);
 
 static psS32 testInterpolateFlatBilinear(void);
 static psS32 testInterpolateError(void);
-
+static psS32 testInterpolateMaskFlatBilinear(void);
 testDescription tests[] = {
                               {testInterpolateFlatBilinear,999,"psImagePixelInterpolate",0,false},
                               {testInterpolateError,999,"psImagePixelInterpolate",0,false},
+                              {testInterpolateMaskFlatBilinear,999,"psImagePixelInterpolate",0,false},
                               {NULL}
                           };
@@ -102,4 +103,13 @@
         return 11;
     }
+
+    // Perform interpolation with invalid method
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message");
+    val = psImagePixelInterpolate(img1,1.2,1.2,NULL,0,10.0,PS_INTERPOLATE_BILINEAR+1);
+    if(val != 10.0) {
+        psError(PS_ERR_UNKNOWN,true,"Did not return the unexposed value");
+        return 12;
+    }
+
     psFree(img1);
 
@@ -107,2 +117,148 @@
 }
 
+// The following assumptions about the test image are:
+//
+//                     col
+//             0   1   2   3   4   5   6   7  ...
+//
+// row 0       0   1   2   3   4   5   6   7
+// row 1       1   2   3   4   5   6   7   8
+// row 2       2   3   4   5   6   7   8   9
+// ...
+
+psS32 testInterpolateMaskFlatBilinear(void)
+{
+    psImage* img1 = NULL;
+    psImage* msk1 = NULL;
+    psF32 val = 0;
+
+    // Perform interpolate with mask and mask value set at nearest pixel to verify
+    // the unexposed value is return
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][1] = 1;
+    CHECK_INTERP_VALUE(img1,1.9,1.6,msk1,1,10.0,FLAT,10.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper left pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper right pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower left pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.25)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower right pixel)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.75)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (upper pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (lower pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (left pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask and one mask value for bilinear (right pixels)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.5)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (upper left)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,4.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (upper right)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (lower left)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,5.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask only one valid pixel (lower right)
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,6.0)
+    psFree(msk1);
+    psFree(img1);
+
+    // Perform interpolate with mask no valid pixels
+    GENIMAGE(img1,10,10,F32,row+col)
+    GENIMAGE(msk1,10,10,U8,0)
+    msk1->data.U8[1][3] = 1;
+    msk1->data.U8[1][4] = 1;
+    msk1->data.U8[2][3] = 1;
+    msk1->data.U8[2][4] = 1;
+    CHECK_INTERP_VALUE(img1,4.0,2.0,msk1,1,0,BILINEAR,0.0)
+    psFree(msk1);
+    psFree(img1);
+    return 0;
+}
+
Index: /trunk/psLib/test/image/verified/tst_psImageInterpolate.stderr
===================================================================
--- /trunk/psLib/test/image/verified/tst_psImageInterpolate.stderr	(revision 2752)
+++ /trunk/psLib/test/image/verified/tst_psImageInterpolate.stderr	(revision 2753)
@@ -22,5 +22,18 @@
 <DATE><TIME>|<HOST>|E|psImagePixelInterpolate (psImage.c:<LINENO>)
     Specified psImage type, psPtr, is not supported.
+<DATE><TIME>|<HOST>|I|testInterpolateError
+    Following should generate an error message
+<DATE><TIME>|<HOST>|E|psImagePixelInterpolate (psImage.c:<LINENO>)
+    Specified psImage type, psPtr, is not supported.
 
 ---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
 
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psImageInterpolate.c                                   *
+*            TestPoint: psImagePixelInterpolate{psImagePixelInterpolate}           *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psImagePixelInterpolate{psImagePixelInterpolate} | tst_psImageInterpolate.c)
+
