lexer: New function lex_force_int_range().
[pspp] / src / language / stats / quick-cluster.c
index fe9f40a0ae63e1f510fb40e7d51d3ccd2646abeb..8b2432ac455fec61a7fe8a56043ba035e5991c3d 100644 (file)
@@ -40,7 +40,7 @@
 #include "libpspp/str.h"
 #include "math/random.h"
 #include "output/pivot-table.h"
-#include "output/text-item.h"
+#include "output/output-item.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -196,7 +196,7 @@ diff_matrix (const gsl_matrix *m1, const gsl_matrix *m2)
       double diff = 0;
       for (j = 0; j < m1->size2; ++j)
        {
-         diff += pow2 (gsl_matrix_get (m1,i,j) - gsl_matrix_get (m2,i,j) );
+         diff += pow2 (gsl_matrix_get (m1,i,j) - gsl_matrix_get (m2,i,j));
        }
       if (diff > max_diff)
        max_diff = diff;
@@ -247,7 +247,7 @@ dist_from_case (const struct Kmeans *kmeans, const struct ccase *c,
   for (j = 0; j < qc->n_vars; j++)
     {
       const union value *val = case_data (c, qc->vars[j]);
-      if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+      if (var_is_value_missing (qc->vars[j], val, qc->exclude))
        NOT_REACHED ();
 
       dist += pow2 (gsl_matrix_get (kmeans->centers, which, j) - val->f);
@@ -302,7 +302,7 @@ kmeans_initial_centers (struct Kmeans *kmeans,
       for (j = 0; j < qc->n_vars; ++j)
        {
          const union value *val = case_data (c, qc->vars[j]);
-         if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+         if (var_is_value_missing (qc->vars[j], val, qc->exclude))
            {
              missing = true;
              break;
@@ -385,7 +385,7 @@ kmeans_get_nearest_group (const struct Kmeans *kmeans, struct ccase *c,
       for (j = 0; j < qc->n_vars; j++)
        {
          const union value *val = case_data (c, qc->vars[j]);
-         if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+         if (var_is_value_missing (qc->vars[j], val, qc->exclude))
            continue;
 
          dist += pow2 (gsl_matrix_get (kmeans->centers, i, j) - val->f);
@@ -462,7 +462,7 @@ kmeans_cluster (struct Kmeans *kmeans, struct casereader *reader,
              for (j = 0; j < qc->n_vars; j++)
                {
                  const union value *val = case_data (c, qc->vars[j]);
-                 if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+                 if (var_is_value_missing (qc->vars[j], val, qc->exclude))
                    missing = true;
                }
 
@@ -488,7 +488,7 @@ kmeans_cluster (struct Kmeans *kmeans, struct casereader *reader,
              for (j = 0; j < qc->n_vars; ++j)
                {
                  const union value *val = case_data (c, qc->vars[j]);
-                 if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+                 if (var_is_value_missing (qc->vars[j], val, qc->exclude))
                    continue;
                  double *x = gsl_matrix_ptr (kmeans->updated_centers, group, j);
                  *x += val->f * (qc->wv ? case_data (c, qc->wv)->f : 1.0);
@@ -529,7 +529,7 @@ kmeans_cluster (struct Kmeans *kmeans, struct casereader *reader,
            for (j = 0; j < qc->n_vars; ++j)
              {
                const union value *val = case_data (c, qc->vars[j]);
-               if ( var_is_value_missing (qc->vars[j], val, qc->exclude))
+               if (var_is_value_missing (qc->vars[j], val, qc->exclude))
                  continue;
 
                double *x = gsl_matrix_ptr (kmeans->updated_centers, group, j);
@@ -920,14 +920,9 @@ quick_cluster_parse (struct lexer *lexer, struct qc *qc)
              if (lex_match_id (lexer, "CLUSTERS"))
                {
                  if (lex_force_match (lexer, T_LPAREN) &&
-                     lex_force_int (lexer))
+                     lex_force_int_range (lexer, "CLUSTERS", 1, INT_MAX))
                    {
                      qc->ngroups = lex_integer (lexer);
-                     if (qc->ngroups <= 0)
-                       {
-                         lex_error (lexer, _("The number of clusters must be positive"));
-                         return false;
-                       }
                      lex_get (lexer);
                      if (!lex_force_match (lexer, T_RPAREN))
                        return false;
@@ -952,14 +947,9 @@ quick_cluster_parse (struct lexer *lexer, struct qc *qc)
              else if (lex_match_id (lexer, "MXITER"))
                {
                  if (lex_force_match (lexer, T_LPAREN) &&
-                     lex_force_int (lexer))
+                     lex_force_int_range (lexer, "MXITER", 1, INT_MAX))
                    {
                      qc->maxiter = lex_integer (lexer);
-                     if (qc->maxiter <= 0)
-                       {
-                         lex_error (lexer, _("The number of iterations must be positive"));
-                         return false;
-                       }
                      lex_get (lexer);
                      if (!lex_force_match (lexer, T_RPAREN))
                        return false;
@@ -1016,7 +1006,7 @@ cmd_quick_cluster (struct lexer *lexer, struct dataset *ds)
 
     while (casegrouper_get_next_group (grouper, &group))
       {
-       if ( qc.missing_type == MISS_LISTWISE )
+       if (qc.missing_type == MISS_LISTWISE)
          {
            group = casereader_create_filter_missing (group, qc.vars, qc.n_vars,
                                                       qc.exclude,