From 12d4a074ba62c675df7b31a23fd7eacc3aff6485 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Fri, 6 Jul 2012 16:30:14 +0200 Subject: [PATCH] Fixed crash in two sample npar tests with (paired) This change fixes a bug where an assertion would fire if a two sample npar test was given where a variable appeared twice in a variable list. --- src/language/stats/npar.c | 9 ++++++--- tests/language/stats/npar.at | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c index e277d36acc..af41b10473 100644 --- a/src/language/stats/npar.c +++ b/src/language/stats/npar.c @@ -1080,7 +1080,7 @@ parse_two_sample_related_test (struct lexer *lexer, if (!parse_variables_const_pool (lexer, pool, dict, &vlist1, &n_vlist1, - PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) + PV_NUMERIC | PV_NO_SCRATCH | PV_DUPLICATE) ) return false; if ( lex_match (lexer, T_WITH)) @@ -1088,7 +1088,7 @@ parse_two_sample_related_test (struct lexer *lexer, with = true; if ( !parse_variables_const_pool (lexer, pool, dict, &vlist2, &n_vlist2, - PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) + PV_NUMERIC | PV_NO_SCRATCH | PV_DUPLICATE) ) return false; paired = (lex_match (lexer, T_LPAREN) && @@ -1101,9 +1101,12 @@ parse_two_sample_related_test (struct lexer *lexer, if (paired) { if ( n_vlist1 != n_vlist2) - msg (SE, _("PAIRED was specified but the number of variables " + { + msg (SE, _("PAIRED was specified but the number of variables " "preceding WITH (%zu) did not match the number " "following (%zu)."), n_vlist1, n_vlist2); + return false; + } test_parameters->n_pairs = n_vlist1 ; } diff --git a/tests/language/stats/npar.at b/tests/language/stats/npar.at index f92af07ec8..38e2e7c4c1 100644 --- a/tests/language/stats/npar.at +++ b/tests/language/stats/npar.at @@ -1625,3 +1625,41 @@ x,4,24.000,29.500,65.000,15.902,-2.232,.026 ]) AT_CLEANUP + +dnl Checks that (PAIRED) can have lists where the same +dnl variable appears more than once. +AT_SETUP([NPAR TESTS (PAIRED)]) +AT_DATA([npar.sps], [dnl +set format = F12.3. +data list notable list /a * b * c *. +begin data. +1 2 4 +4 5 3 +1 2 2 +4 5 1 +end data. + +npar tests /wilcoxon a b with c c (paired). +]) + +AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl +Table: Ranks +,,N,Mean Rank,Sum of Ranks +a - c,Negative Ranks,2,2.500,5.000 +,Positive Ranks,2,2.500,5.000 +,Ties,0,, +,Total,4,, +b - c,Negative Ranks,1,1.500,1.500 +,Positive Ranks,2,2.250,4.500 +,Ties,1,, +,Total,4,, + +Table: Test Statistics +,a - c,b - c +Z,.000,-.816 +Asymp. Sig. (2-tailed),1.000,.414 +]) + + +AT_CLEANUP + -- 2.30.2