T-TEST: Allow comma to be omitted in GROUPS subcommand.
[pspp] / src / language / stats / t-test-parser.c
index 7c8d8a548a5ea42b7343e5fe8b5b716c744bc37a..660997e95c25ffa4b7af3c452a7771f8a4f7f80a 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2011 Free Software Foundation, Inc.
+   Copyright (C) 2011, 2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -48,18 +48,18 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
   const struct variable **v2 = NULL;
   size_t n_v2;
          
-  size_t n_pairs;
+  size_t n_pairs = 0;
   vp *pairs = NULL;
 
 
   /* One sample mode */
-  double testval;
+  double testval = SYSMIS;
 
   /* Independent samples mode */
   const struct variable *gvar;
   union value gval0;
   union value gval1;
-  bool cut;
+  bool cut = false;
 
   tt.wv = dict_get_weight (dict);
   tt.dict = dict;
@@ -100,8 +100,9 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
              value_init (&gval0, var_get_width (gvar));
              parse_value (lexer, &gval0, gvar);
              cut = true;
-             if (lex_match (lexer, T_COMMA))
+             if (lex_token (lexer) != T_RPAREN)
                {
+                 lex_match (lexer, T_COMMA);
                  value_init (&gval1, var_get_width (gvar));
                  parse_value (lexer, &gval1, gvar);
                  cut = false;
@@ -120,8 +121,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
 
          if ( cut == true && var_is_alpha (gvar))
            {
-             msg (SE, _("When applying GROUPS to a string variable, two "
-                        "values must be specified."));
+             msg (SE, _("When applying %s to a string variable, two "
+                        "values must be specified."), "GROUPS");
              goto parse_failed;
            }
        }
@@ -132,7 +133,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
 
          if (tt.n_vars > 0)
            {
-             msg (SE, _("VARIABLES subcommand may not be used with PAIRS."));
+             msg (SE, _("%s subcommand may not be used with %s."), "VARIABLES", "PAIRS");
              goto parse_failed;
            }
 
@@ -178,8 +179,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
            else
              n_pairs = n_v1 * n_v2;
          
-           pairs = xcalloc (sizeof *pairs, n_pairs);
-
+           pairs = xcalloc (n_pairs, sizeof *pairs);
 
            if ( with)
              {
@@ -229,7 +229,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
        {
          if ( tt.mode == MODE_PAIRED)
            {
-             msg (SE, _("VARIABLES subcommand may not be used with PAIRS."));
+             msg (SE, _("%s subcommand may not be used with %s."), "VARIABLES", "PAIRS");
              goto parse_failed;
            }
 
@@ -273,7 +273,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
       else if (lex_match_id (lexer, "CRITERIA"))
        {
           lex_match (lexer, T_EQUALS);
-         if ( lex_force_match_id (lexer, "CIN"))
+         if ( lex_match_id (lexer, "CIN") || lex_force_match_id (lexer, "CI"))
            if ( lex_force_match (lexer, T_LPAREN))
              {
                lex_force_num (lexer);
@@ -298,7 +298,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
 
   if (tt.n_vars == 0 && tt.mode != MODE_PAIRED)
     {
-      msg (SE, _("One or more VARIABLES must be specified."));
+      lex_sbc_missing ("VARIABLES");
       goto parse_failed;
     }