Index: /trunk/psLib/src/dataManip/psFunctions.c
===================================================================
--- /trunk/psLib/src/dataManip/psFunctions.c	(revision 1783)
+++ /trunk/psLib/src/dataManip/psFunctions.c	(revision 1784)
@@ -7,6 +7,6 @@
  *  polynomials.  It also contains a Gaussian functions.
  *
- *  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-09-10 22:25:59 $
+ *  @version $Revision: 1.35 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-09-10 23:20:29 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -560,4 +560,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -581,5 +582,7 @@
         }
     }
-
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -667,4 +670,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -695,4 +699,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -799,4 +806,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -833,4 +841,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1235,4 +1246,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1257,4 +1269,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1341,4 +1356,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1369,4 +1385,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1475,4 +1494,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1509,4 +1529,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1750,4 +1773,13 @@
 
 
+
+/*****************************************************************************
+psSpline1DGen(): This routine will take an existing spline data structure,
+along with a set of data values for each of the domains, and fit splines of
+the specified order (currently, linear only), and set the coefficients in the
+appropriate spline polynomials.  This function is not part of the API in the
+latest SDR, but I'm guessing it will be, and I need it to generate test
+cases, so I included it here.
+ *****************************************************************************/
 
 psSpline1D *psSpline1DGen(const psSpline1D *spline,
Index: /trunk/psLib/src/math/psPolynomial.c
===================================================================
--- /trunk/psLib/src/math/psPolynomial.c	(revision 1783)
+++ /trunk/psLib/src/math/psPolynomial.c	(revision 1784)
@@ -7,6 +7,6 @@
  *  polynomials.  It also contains a Gaussian functions.
  *
- *  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-09-10 22:25:59 $
+ *  @version $Revision: 1.35 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-09-10 23:20:29 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -560,4 +560,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -581,5 +582,7 @@
         }
     }
-
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -667,4 +670,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -695,4 +699,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -799,4 +806,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -833,4 +841,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1235,4 +1246,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1257,4 +1269,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1341,4 +1356,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1369,4 +1385,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1475,4 +1494,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1509,4 +1529,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1750,4 +1773,13 @@
 
 
+
+/*****************************************************************************
+psSpline1DGen(): This routine will take an existing spline data structure,
+along with a set of data values for each of the domains, and fit splines of
+the specified order (currently, linear only), and set the coefficients in the
+appropriate spline polynomials.  This function is not part of the API in the
+latest SDR, but I'm guessing it will be, and I need it to generate test
+cases, so I included it here.
+ *****************************************************************************/
 
 psSpline1D *psSpline1DGen(const psSpline1D *spline,
Index: /trunk/psLib/src/math/psSpline.c
===================================================================
--- /trunk/psLib/src/math/psSpline.c	(revision 1783)
+++ /trunk/psLib/src/math/psSpline.c	(revision 1784)
@@ -7,6 +7,6 @@
  *  polynomials.  It also contains a Gaussian functions.
  *
- *  @version $Revision: 1.34 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-09-10 22:25:59 $
+ *  @version $Revision: 1.35 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-09-10 23:20:29 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -560,4 +560,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -581,5 +582,7 @@
         }
     }
-
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -667,4 +670,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -695,4 +699,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -799,4 +806,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     float polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -833,4 +841,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1235,4 +1246,5 @@
     int loop_x = 0;
     int loop_y = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1257,4 +1269,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1341,4 +1356,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1369,4 +1385,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1475,4 +1494,5 @@
     int loop_y = 0;
     int loop_z = 0;
+    int i = 0;
     double polySum = 0.0;
     psPolynomial1D* *chebPolys = NULL;
@@ -1509,4 +1529,7 @@
     }
 
+    for (i=0;i<maxChebyPoly;i++) {
+        psFree(chebPolys[i]);
+    }
     psFree(chebPolys);
     return(polySum);
@@ -1750,4 +1773,13 @@
 
 
+
+/*****************************************************************************
+psSpline1DGen(): This routine will take an existing spline data structure,
+along with a set of data values for each of the domains, and fit splines of
+the specified order (currently, linear only), and set the coefficients in the
+appropriate spline polynomials.  This function is not part of the API in the
+latest SDR, but I'm guessing it will be, and I need it to generate test
+cases, so I included it here.
+ *****************************************************************************/
 
 psSpline1D *psSpline1DGen(const psSpline1D *spline,
Index: /trunk/psLib/test/dataManip/tst_psFunc00.c
===================================================================
--- /trunk/psLib/test/dataManip/tst_psFunc00.c	(revision 1783)
+++ /trunk/psLib/test/dataManip/tst_psFunc00.c	(revision 1784)
@@ -279,4 +279,249 @@
                 testStatus);
 
+
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psPolynomial1D structure (CHEBYSHEV).");
+
+    my1DPoly = psPolynomial1DAlloc(AN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        my1DPoly->coeff[a] = MISC_FLOAT_NUMBER;
+        my1DPoly->coeffErr[a] = MISC_FLOAT_NUMBER;
+        my1DPoly->mask[a] = MISC_INT_NUMBER;
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x) = (%f): %f\n", MISC_X_VALUE,
+           psPolynomial1DEval(MISC_X_VALUE, my1DPoly));
+
+    psFree(my1DPoly);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psPolynomial1D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psPolynomial2D structure (CHEBYSHEV).");
+    my2DPoly = psPolynomial2DAlloc(AN, BN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            my2DPoly->coeff[a][b] = MISC_FLOAT_NUMBER;
+            my2DPoly->coeffErr[a][b] = MISC_FLOAT_NUMBER;
+            my2DPoly->mask[a][b] = MISC_INT_NUMBER;
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x, y) = (%f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           psPolynomial2DEval(MISC_X_VALUE, MISC_X_VALUE, my2DPoly));
+
+    psFree(my2DPoly);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psPolynomial2D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psPolynomial3D structure (CHEBYSHEV).");
+    my3DPoly = psPolynomial3DAlloc(AN, BN, CN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            for (c = 0; c < CN ; c++) {
+                my3DPoly->coeff[a][b][c] = MISC_FLOAT_NUMBER;
+                my3DPoly->coeffErr[a][b][c] = MISC_FLOAT_NUMBER;
+                my3DPoly->mask[a][b][c] = MISC_INT_NUMBER;
+            }
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x, y, z) = (%f, %f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           MISC_X_VALUE,
+           psPolynomial3DEval(MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, my3DPoly));
+
+    psFree(my3DPoly);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psPolynomial3D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psPolynomial4D structure (CHEBYSHEV).");
+    my4DPoly = psPolynomial4DAlloc(AN, BN, CN, DN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            for (c = 0; c < CN ; c++) {
+                for (d = 0; d < DN ; d++) {
+                    my4DPoly->coeff[a][b][c][d] = MISC_FLOAT_NUMBER;
+                    my4DPoly->coeffErr[a][b][c][d] = MISC_FLOAT_NUMBER;
+                    my4DPoly->mask[a][b][c][d] = MISC_INT_NUMBER;
+                }
+            }
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (w, x, y, z) = (%f, %f, %f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           MISC_X_VALUE, MISC_X_VALUE,
+           psPolynomial4DEval(MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, my4DPoly));
+
+    psFree(my4DPoly);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psPolynomial4D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+    /*************************************************************************/
+    /*  Allocate and initialize data structures                      */
+    /*************************************************************************/
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psDPolynomial1D structure (CHEBYSHEV).");
+
+    my1DPolyD = psDPolynomial1DAlloc(AN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        my1DPolyD->coeff[a] = MISC_FLOAT_NUMBER;
+        my1DPolyD->coeffErr[a] = MISC_FLOAT_NUMBER;
+        my1DPolyD->mask[a] = MISC_INT_NUMBER;
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x) = (%f): %f\n", MISC_X_VALUE,
+           psDPolynomial1DEval(MISC_X_VALUE, my1DPolyD));
+
+    psFree(my1DPolyD);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psDPolynomial1D structure (CHEBYSHEV).",
+                testStatus);
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psDPolynomial2D structure (CHEBYSHEV).");
+    my2DPolyD = psDPolynomial2DAlloc(AN, BN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            my2DPolyD->coeff[a][b] = MISC_FLOAT_NUMBER;
+            my2DPolyD->coeffErr[a][b] = MISC_FLOAT_NUMBER;
+            my2DPolyD->mask[a][b] = MISC_INT_NUMBER;
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x, y) = (%f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           psDPolynomial2DEval(MISC_X_VALUE, MISC_X_VALUE, my2DPolyD));
+
+    psFree(my2DPolyD);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psDPolynomial2D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psDPolynomial3D structure (CHEBYSHEV).");
+    my3DPolyD = psDPolynomial3DAlloc(AN, BN, CN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            for (c = 0; c < CN ; c++) {
+                my3DPolyD->coeff[a][b][c] = MISC_FLOAT_NUMBER;
+                my3DPolyD->coeffErr[a][b][c] = MISC_FLOAT_NUMBER;
+                my3DPolyD->mask[a][b][c] = MISC_INT_NUMBER;
+            }
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (x, y, z) = (%f, %f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           MISC_X_VALUE,
+           psDPolynomial3DEval(MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, my3DPolyD));
+
+    psFree(my3DPolyD);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psDPolynomial3D structure (CHEBYSHEV).",
+                testStatus);
+
+
+
+
+    printPositiveTestHeader(stdout,
+                            "psFunctions functions",
+                            "Allocate/Deallocate the psDPolynomial4D structure (CHEBYSHEV).");
+    my4DPolyD = psDPolynomial4DAlloc(AN, BN, CN, DN, PS_POLYNOMIAL_CHEB);
+    for (a = 0; a < AN ; a++) {
+        for (b = 0; b < BN ; b++) {
+            for (c = 0; c < CN ; c++) {
+                for (d = 0; d < DN ; d++) {
+                    my4DPolyD->coeff[a][b][c][d] = MISC_FLOAT_NUMBER;
+                    my4DPolyD->coeffErr[a][b][c][d] = MISC_FLOAT_NUMBER;
+                    my4DPolyD->mask[a][b][c][d] = MISC_INT_NUMBER;
+                }
+            }
+        }
+    }
+    psMemCheckCorruption(1);
+
+    printf("At (w, x, y, z) = (%f, %f, %f, %f): %f\n", MISC_X_VALUE, MISC_X_VALUE,
+           MISC_X_VALUE, MISC_X_VALUE,
+           psDPolynomial4DEval(MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, MISC_X_VALUE, my4DPolyD));
+
+    psFree(my4DPolyD);
+    memLeaks = psMemCheckLeaks(currentId,NULL,NULL);
+    if (0 != memLeaks) {
+        psAbort(__func__,"Memory Leaks! (%d leaks)", memLeaks);
+    }
+    printFooter(stdout,
+                "psStats functions",
+                "Allocate/Deallocate the psDPolynomial4D structure (CHEBYSHEV).",
+                testStatus);
+
     return (!testStatus);
 }
