Fixed bug #35494 - Levene test crash on no valid values. 20120211030508/pspp
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 10 Feb 2012 12:40:06 +0000 (13:40 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 10 Feb 2012 16:38:27 +0000 (17:38 +0100)
src/math/levene.c
tests/language/stats/t-test.at

index fe04d294e1acfbf214dadea6a53717ccc9a37646..5193c86a1a453f001456ecc7f747870cf346548b 100644 (file)
@@ -22,6 +22,7 @@
 #include "libpspp/misc.h"
 #include "libpspp/hmap.h"
 #include "data/value.h"
+#include "data/val-type.h"
 
 #include <gl/xalloc.h>
 #include <assert.h>
@@ -223,12 +224,16 @@ levene_calculate (struct levene *nl)
 
   double numerator = 0.0;
   double nn = 0.0;
-  if ( nl->pass == 3 )
-    {
-      nl->pass = 4;
-    }
 
-  assert (nl->pass == 4);
+  /* The Levene calculation requires three passes.
+     Normally this should have been done prior to calling this function.
+     However, in abnormal circumstances (eg. the dataset is empty) there
+     will have been no passes.
+   */
+  assert (nl->pass == 0 || nl->pass == 3);
+
+  if ( nl->pass == 0 )
+    return SYSMIS;
 
   nl->denominator *= hmap_count (&nl->hmap) - 1;
 
index d5b7aad3b205dbe4e04aa5f72c077dbc6798ec14..d03a6ca9d5d34eb7abadd41ffa03b5f296a87bc2 100644 (file)
@@ -744,3 +744,23 @@ x,Equal variances assumed,1.13,.33,-2.32,6.00,.06,-.90,.38,-1.83,.03
 ])
 AT_CLEANUP
 
+
+
+dnl Tests for a bug assert failed when the group variables were not of either class
+AT_SETUP([T-TEST wrong group])
+AT_DATA([t-test-crs.sps], [dnl
+data list list /x * g *.
+begin data.
+1 2
+2 2
+3 2
+4 2
+5 2 
+end data.
+
+t-test /variables = x group=g(1,3).
+])
+
+AT_CHECK([pspp t-test-crs.sps], [0],[ignore], [ignore])
+
+AT_CLEANUP