Index: trunk/psLib/test/math/tst_psPolyFit2D.c
===================================================================
--- trunk/psLib/test/math/tst_psPolyFit2D.c	(revision 6484)
+++ trunk/psLib/test/math/tst_psPolyFit2D.c	(revision 7105)
@@ -11,5 +11,5 @@
 #include "pslib.h"
 #include "psTest.h"
-#define NUM_DATA 35
+#define NUM_DATA 100
 #define POLY_ORDER_X 2
 #define POLY_ORDER_Y 3
@@ -93,4 +93,19 @@
     }
 
+
+    psVector *xTruth = psVectorAlloc(numData, PS_TYPE_F64);
+    psVector *yTruth = psVectorAlloc(numData, PS_TYPE_F64);
+    psVector *fTruth = psVectorAlloc(numData, PS_TYPE_F64);
+    xTruth->n = numData;
+    yTruth->n = numData;
+    fTruth->n = numData;
+    psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 1); // Using an RNG with a known seed
+    for (int i = 0; i < numData; i++) {
+        xTruth->data.F64[i] = 2.0*psRandomUniform(rng) - 1.0;
+        yTruth->data.F64[i] = 2.0*psRandomUniform(rng) - 1.0;
+        fTruth->data.F64[i] = setData(xTruth->data.F64[i], yTruth->data.F64[i]);
+    }
+    psFree(rng);
+
     if (flags & TS00_X_NULL) {
         printf(" using a NULL x vector\n");
@@ -99,29 +114,16 @@
     if (flags & TS00_X_F32) {
         printf(" using a psF32 x vector\n");
-        x = psVectorAlloc(numData, PS_TYPE_F32);
-        x->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            x->data.F32[i] = (psF32) i;
-        }
+        x = psVectorCopy(NULL, xTruth, PS_TYPE_F32);
     }
 
     if (flags & TS00_X_S32) {
         printf(" using a psS32 x vector\n");
-        x = psVectorAlloc(numData, PS_TYPE_S32);
-        x->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            x->data.S32[i] = (psS32) i;
-        }
+        x = psVectorCopy(NULL, xTruth, PS_TYPE_S32);
     }
 
     if (flags & TS00_X_F64) {
         printf(" using a psF64 x vector\n");
-        x = psVectorAlloc(numData, PS_TYPE_F64);
-        x->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            x->data.F64[i] = (psF64) i;
-        }
-    }
-
+        x = psVectorCopy(NULL, xTruth, PS_TYPE_F64);
+    }
 
     if (flags & TS00_Y_NULL) {
@@ -131,27 +133,15 @@
     if (flags & TS00_Y_F32) {
         printf(" using a psF32 y vector\n");
-        y = psVectorAlloc(numData, PS_TYPE_F32);
-        y->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            y->data.F32[i] = (psF32) i;
-        }
+        y = psVectorCopy(NULL, yTruth, PS_TYPE_F32);
     }
 
     if (flags & TS00_Y_S32) {
         printf(" using a psS32 y vector\n");
-        y = psVectorAlloc(numData, PS_TYPE_S32);
-        y->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            y->data.S32[i] = (psS32) i;
-        }
+        y = psVectorCopy(NULL, yTruth, PS_TYPE_S32);
     }
 
     if (flags & TS00_Y_F64) {
         printf(" using a psF64 y vector\n");
-        y = psVectorAlloc(numData, PS_TYPE_F64);
-        y->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            y->data.F64[i] = (psF64) i;
-        }
+        y = psVectorCopy(NULL, yTruth, PS_TYPE_F64);
     }
 
@@ -162,9 +152,5 @@
     if (flags & TS00_F_F32) {
         printf(" using a psF32 f vector\n");
-        f = psVectorAlloc(numData, PS_TYPE_F32);
-        f->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            f->data.F32[i] = setData((psF32) i, (psF32) i);
-        }
+        f = psVectorCopy(NULL, fTruth, PS_TYPE_F32);
         // Set a few outliers in the data.
         if (OUTLIERS && (flags & TS00_CLIP_FIT)) {
@@ -183,9 +169,5 @@
     if (flags & TS00_F_S32) {
         printf(" using a psS32 f vector\n");
-        f = psVectorAlloc(numData, PS_TYPE_S32);
-        f->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            f->data.S32[i] = (psS32) setData((psF32) i, (psF32) i);
-        }
+        f = psVectorCopy(NULL, fTruth, PS_TYPE_S32);
         // Set a few outliers in the data.
         if (OUTLIERS && (flags & TS00_CLIP_FIT)) {
@@ -204,9 +186,5 @@
     if (flags & TS00_F_F64) {
         printf(" using a psF64 f vector\n");
-        f = psVectorAlloc(numData, PS_TYPE_F64);
-        f->n = numData;
-        for (psS32 i=0;i<numData;i++) {
-            f->data.F64[i] = (psF64) setData((psF32) i, (psF32) i);
-        }
+        f = psVectorCopy(NULL, fTruth, PS_TYPE_F64);
         // Set a few outliers in the data.
         if (OUTLIERS && (flags & TS00_CLIP_FIT)) {
@@ -301,4 +279,5 @@
         }
 
+        psVector *result = psPolynomial2DEvalVector(myPoly, xTruth, yTruth);
         for (psS32 i=0 ;i<numData; i++) {
             // Skip the outliers.
@@ -306,48 +285,19 @@
                 continue;
             }
-            psF32 expectData;
-            psF32 xData;
-            psF32 yData;
-            if (flags & TS00_F_F32) {
-                expectData = f->data.F32[i];
-            } else if (flags & TS00_F_F64) {
-                expectData = (psF32) f->data.F64[i];
-            } else if (flags & TS00_F_S32) {
-                expectData = (psF32) f->data.S32[i];
-            }
-
-            if (flags & TS00_X_F32) {
-                xData = x->data.F32[i];
-            } else if (flags & TS00_X_F64) {
-                xData = (psF32) x->data.F64[i];
-            } else if (flags & TS00_X_S32) {
-                xData = (psF32) x->data.S32[i];
-            } else if (flags & TS00_X_NULL) {
-                xData = (psF32) i;
-            }
-
-            if (flags & TS00_Y_F32) {
-                yData = y->data.F32[i];
-            } else if (flags & TS00_Y_F64) {
-                yData = (psF32) y->data.F64[i];
-            } else if (flags & TS00_Y_S32) {
-                yData = (psF32) y->data.S32[i];
-            } else if (flags & TS00_Y_NULL) {
-                yData = (psF32) i;
-            }
-
-            psF32 actualData = psPolynomial2DEval(myPoly, xData, yData);
+            psF64 actualData = result->data.F64[i];
+            psF64 expectData = fTruth->data.F64[i];
 
             if (fabs(actualData-expectData) > fabs(ERROR_TOLERANCE * expectData)) {
-                printf("TEST ERROR: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                       i, xData, actualData, expectData);
+                printf("TEST ERROR: Fitted data %d: (%.1f), expected was (%.1f)\n",
+                       i, actualData, expectData);
                 testStatus = false;
             } else {
                 if (VERBOSE) {
-                    printf("GOOD: Fitted data %d: (%.1f %.1f), expected was (%.1f)\n",
-                           i, xData, actualData, expectData);
+                    printf("GOOD: Fitted data %d: (%.1f), expected was (%.1f)\n",
+                           i, actualData, expectData);
                 }
             }
         }
+        psFree(result);
     }
 
@@ -355,4 +305,7 @@
     psFree(myPoly);
     psFree(mask);
+    psFree(xTruth);
+    psFree(yTruth);
+    psFree(fTruth);
     psFree(x);
     psFree(y);
