X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fnpar.c;h=071a02ee16a53ddd243e8197d41486b1c4f085cb;hb=bc37c3f489947cf081a930a5d4e58dbd133eb563;hp=7c2b37af1524d4324d16c1a1f8300cb9c39bdddd;hpb=00a0a46dcdb3bf9e93200a145df94ff24d2d35d4;p=pspp diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c index 7c2b37af15..071a02ee16 100644 --- a/src/language/stats/npar.c +++ b/src/language/stats/npar.c @@ -498,7 +498,6 @@ parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests if (!lex_match (lexer, T_SLASH)) break; } - if (lex_token (lexer) != T_ENDCMD) { lex_error (lexer, _("expecting end of command")); @@ -540,7 +539,7 @@ npar_execute (struct casereader *input, test->execute (ds, casereader_clone (input), specs->filter, test, specs->exact, specs->timer); } - if ( specs->descriptives ) + if (specs->descriptives && specs->n_vars > 0) { summary_descriptives = xnmalloc (sizeof (*summary_descriptives), specs->n_vars); @@ -602,7 +601,7 @@ cmd_npar_tests (struct lexer *lexer, struct dataset *ds) } } - sort (npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv), + sort (npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv), compare_var_ptrs_by_name, NULL); if ( cmd.statistics ) @@ -691,13 +690,13 @@ npar_runs (struct lexer *lexer, struct dataset *ds, lex_error (lexer, _("Expecting %s, %s, %s or a number."), "MEAN", "MEDIAN", "MODE"); return 0; } - + if (! lex_force_match (lexer, T_RPAREN)) return 2; - + if (! lex_force_match (lexer, T_EQUALS)) return 2; - + if (!parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), &tp->vars, &tp->n_vars, PV_NO_SCRATCH | PV_NO_DUPLICATE | PV_NUMERIC)) @@ -720,7 +719,7 @@ static int npar_friedman (struct lexer *lexer, struct dataset *ds, struct npar_specs *specs) { - struct friedman_test *ft = pool_alloc (specs->pool, sizeof (*ft)); + struct friedman_test *ft = pool_alloc (specs->pool, sizeof (*ft)); struct one_sample_test *ost = &ft->parent; struct npar_test *nt = &ost->parent; @@ -751,7 +750,7 @@ static int npar_kendall (struct lexer *lexer, struct dataset *ds, struct npar_specs *specs) { - struct friedman_test *kt = pool_alloc (specs->pool, sizeof (*kt)); + struct friedman_test *kt = pool_alloc (specs->pool, sizeof (*kt)); struct one_sample_test *ost = &kt->parent; struct npar_test *nt = &ost->parent; @@ -783,7 +782,7 @@ static int npar_cochran (struct lexer *lexer, struct dataset *ds, struct npar_specs *specs) { - struct one_sample_test *ft = pool_alloc (specs->pool, sizeof (*ft)); + struct one_sample_test *ft = pool_alloc (specs->pool, sizeof (*ft)); struct npar_test *nt = &ft->parent; nt->execute = cochran_execute; @@ -836,7 +835,7 @@ npar_chisquare (struct lexer *lexer, struct dataset *ds, if ( ! lex_force_num (lexer)) return 0; cstp->lo = lex_number (lexer); lex_get (lexer); - lex_force_match (lexer, T_COMMA); + if (! lex_force_match (lexer, T_COMMA)) return 0; if (! lex_force_num (lexer) ) return 0; cstp->hi = lex_number (lexer); if ( cstp->lo >= cstp->hi ) @@ -855,8 +854,8 @@ npar_chisquare (struct lexer *lexer, struct dataset *ds, cstp->expected = NULL; if (lex_match_phrase (lexer, "/EXPECTED")) { - lex_force_match (lexer, T_EQUALS); - if ( ! lex_match_id (lexer, "EQUAL") ) + if (! lex_force_match (lexer, T_EQUALS)) return 0; + if (! lex_match_id (lexer, "EQUAL") ) { double f; int n; @@ -935,7 +934,8 @@ npar_binomial (struct lexer *lexer, struct dataset *ds, { btp->p = lex_number (lexer); lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (!lex_force_match (lexer, T_RPAREN)) + return 0; } else return 0; @@ -943,36 +943,41 @@ npar_binomial (struct lexer *lexer, struct dataset *ds, else equals = true; - if (equals || lex_match (lexer, T_EQUALS) ) - { - if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), - &tp->vars, &tp->n_vars, - PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) - { - if (lex_match (lexer, T_LPAREN)) - { - if (! lex_force_num (lexer)) - return 2; - btp->category1 = lex_number (lexer); - lex_get (lexer); - if ( lex_match (lexer, T_COMMA)) - { - if ( ! lex_force_num (lexer) ) return 2; - btp->category2 = lex_number (lexer); - lex_get (lexer); - } - else - { - btp->cutpoint = btp->category1; - } - - lex_force_match (lexer, T_RPAREN); - } - } - else - return 2; + if (!equals) + if (!lex_force_match (lexer, T_EQUALS)) + return 0; - } + { + if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), + &tp->vars, &tp->n_vars, + PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) ) + { + if (lex_match (lexer, T_LPAREN)) + { + if (! lex_force_num (lexer)) + return 2; + btp->category1 = lex_number (lexer); + lex_get (lexer); + if ( lex_match (lexer, T_COMMA)) + { + if ( ! lex_force_num (lexer) ) return 2; + btp->category2 = lex_number (lexer); + lex_get (lexer); + } + else + { + btp->cutpoint = btp->category1; + } + + if (! lex_force_match (lexer, T_RPAREN)) + return 0; + } + } + else + { + return 2; + } + } specs->n_tests++; specs->test = pool_realloc (specs->pool, @@ -1286,7 +1291,8 @@ npar_median (struct lexer *lexer, { mt->median = lex_number (lexer); lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (! lex_force_match (lexer, T_RPAREN)) + return 0; } lex_match (lexer, T_EQUALS); @@ -1408,7 +1414,7 @@ insert_variable_into_map (struct hmapx *var_map, const struct variable *var) size_t hash = hash_pointer (var, 0); struct hmapx_node *node; const struct variable *v = NULL; - + HMAPX_FOR_EACH_WITH_HASH (v, node, hash, var_map) { if ( v == var) @@ -1447,7 +1453,7 @@ two_sample_insert_variables (const struct npar_test *test, } } -static void +static void n_sample_insert_variables (const struct npar_test *test, struct hmapx *var_map) { @@ -1474,12 +1480,13 @@ npar_method (struct lexer *lexer, struct npar_specs *specs) if ( lex_match (lexer, T_LPAREN)) { - if ( lex_force_num (lexer) ) + if (lex_force_num (lexer) ) { specs->timer = lex_number (lexer); lex_get (lexer); } - lex_force_match (lexer, T_RPAREN); + if (lex_force_match (lexer, T_RPAREN)) + return 0; } } }