Index: /trunk/psModules/test/objects/tap_pmSourceFitModel.c
===================================================================
--- /trunk/psModules/test/objects/tap_pmSourceFitModel.c	(revision 10262)
+++ /trunk/psModules/test/objects/tap_pmSourceFitModel.c	(revision 10263)
@@ -21,4 +21,7 @@
     pmSourceFitModelInit (15, 0.01, 1.0, true);
 
+    // psTraceSetLevel ("psModules.objects.pmSourceFitModel", 10);
+    // psTraceSetLevel ("psLib.math.psMinimizeLMChi2", 10);
+
     plan_tests(240);
 
@@ -30,4 +33,8 @@
     static float flux[] = {10000.0, 3000.0, 1000.0, 300.0, 100.0, 30.0, 10.0};
 
+    // drop-dead simple: should always work
+    bool status = fitModels (seed, 10000.0, 10.0, 2.0);
+    skip_start (!status, 240, "*** BASIC MODEL FITTING FAILS! *** : skipping related tests");
+
     for (int i = 0; i < sizeof(sigma)/sizeof(float); i++) {
         for (int j = 0; j < sizeof(radius)/sizeof(float); j++) {
@@ -38,4 +45,5 @@
     }
 
+    skip_end();
     return exit_status();
 }
@@ -47,4 +55,5 @@
 static psVector *par5 = NULL;
 
+# define NMODELS 200
 bool fitModels (psRandom *seed, float flux, float radius, float sigma)
 {
@@ -54,11 +63,11 @@
     diag("test model fit - flux: %f, radius: %f, sigma: %f", flux, radius, sigma);
 
-    par1 = psVectorAllocEmpty (200, PS_TYPE_F32);
-    par2 = psVectorAllocEmpty (200, PS_TYPE_F32);
-    par3 = psVectorAllocEmpty (200, PS_TYPE_F32);
-    par4 = psVectorAllocEmpty (200, PS_TYPE_F32);
-    par5 = psVectorAllocEmpty (200, PS_TYPE_F32);
+    par1 = psVectorAllocEmpty (NMODELS, PS_TYPE_F32);
+    par2 = psVectorAllocEmpty (NMODELS, PS_TYPE_F32);
+    par3 = psVectorAllocEmpty (NMODELS, PS_TYPE_F32);
+    par4 = psVectorAllocEmpty (NMODELS, PS_TYPE_F32);
+    par5 = psVectorAllocEmpty (NMODELS, PS_TYPE_F32);
 
-    for (int i = 0; i < 200; i++) {
+    for (int i = 0; i < NMODELS; i++) {
         fitModelFlux (seed, flux, radius, sigma);
     }
@@ -70,15 +79,18 @@
     diag ("signal: %f, noise: %f, dMag: %f, dPos: %f", signal, noise, dMag, dPos);
 
+    bool status = (par1->n == NMODELS);
+    ok (status, "all %d tests passed", NMODELS);
+
     psStats *stats = psStatsAlloc (PS_STAT_SAMPLE_MEAN | PS_STAT_SAMPLE_STDEV);
     psVectorStats (stats, par1, NULL, NULL, 0);
-    ok ((stats->sampleStdev/dMag < 2.0), "Io ref/fit stdev: %f : %f sigma", stats->sampleStdev, stats->sampleStdev/dMag);
+    ok ((stats->sampleStdev/dMag < 2.0), "Io ref/fit stdev: %e : %e sigma", stats->sampleStdev, stats->sampleStdev/dMag);
     psVectorStats (stats, par2, NULL, NULL, 0);
-    ok ((stats->sampleStdev/dPos < 2.0), "Xo ref/fit stdev: %f : %f sigma", stats->sampleStdev, stats->sampleStdev/dPos);
+    ok ((stats->sampleStdev/dPos < 2.0), "Xo ref/fit stdev: %e : %e sigma", stats->sampleStdev, stats->sampleStdev/dPos);
     psVectorStats (stats, par3, NULL, NULL, 0);
-    ok ((stats->sampleStdev/dPos < 2.0), "Yo ref/fit stdev: %f : %f sigma", stats->sampleStdev, stats->sampleStdev/dPos);
+    ok ((stats->sampleStdev/dPos < 2.0), "Yo ref/fit stdev: %e : %e sigma", stats->sampleStdev, stats->sampleStdev/dPos);
     psVectorStats (stats, par4, NULL, NULL, 0);
-    ok ((stats->sampleStdev/dMag < 2.0), "Sx ref/fit stdev: %f : %f sigma", stats->sampleStdev, stats->sampleStdev/dMag);
+    ok ((stats->sampleStdev/dMag < 2.0), "Sx ref/fit stdev: %e : %e sigma", stats->sampleStdev, stats->sampleStdev/dMag);
     psVectorStats (stats, par5, NULL, NULL, 0);
-    ok ((stats->sampleStdev/dMag < 2.0), "Sy ref/fit stdev: %f : %f sigma", stats->sampleStdev, stats->sampleStdev/dMag);
+    ok ((stats->sampleStdev/dMag < 2.0), "Sy ref/fit stdev: %e : %e sigma", stats->sampleStdev, stats->sampleStdev/dMag);
 
     psFree (par1);
@@ -89,6 +101,6 @@
     psFree (stats);
 
-    ok(!psMemCheckLeaks (id, NULL, NULL, false), "no memory leaks");
-    return true;
+    ok(!psMemCheckLeaks (id, NULL, stderr, false), "no memory leaks");
+    return status;
 }
 
@@ -151,12 +163,18 @@
 
     psImageKeepCircle (source->mask, 50, 50, radius, "OR", PM_MASK_MARK);
-    pmSourceFitModel (source, guess, PM_SOURCE_FIT_EXT);
+    bool status = pmSourceFitModel (source, guess, PM_SOURCE_FIT_EXT);
+    if (!status) {
+        psFree (rnd);
+        psFree (source);
+        psFree (guess);
+        return false;
+    }
     psImageKeepCircle (source->mask, 50, 50, radius, "AND", PS_NOT_U8(PM_MASK_MARK));
 
-    par1->data.F32[par1->n] = (source->modelEXT->params->data.F32[1]/guess->params->data.F32[1]);
+    par1->data.F32[par1->n] = (source->modelEXT->params->data.F32[1] / guess->params->data.F32[1]);
     par2->data.F32[par2->n] = (source->modelEXT->params->data.F32[2] - guess->params->data.F32[2]);
     par3->data.F32[par3->n] = (source->modelEXT->params->data.F32[3] - guess->params->data.F32[3]);
-    par4->data.F32[par4->n] = (source->modelEXT->params->data.F32[4]/guess->params->data.F32[4]);
-    par5->data.F32[par5->n] = (source->modelEXT->params->data.F32[5]/guess->params->data.F32[5]);
+    par4->data.F32[par4->n] = (source->modelEXT->params->data.F32[4] / guess->params->data.F32[4]);
+    par5->data.F32[par5->n] = (source->modelEXT->params->data.F32[5] / guess->params->data.F32[5]);
 
     psVectorExtend (par1, 100, 1);
