model-checker: Move summary printing function into model checker.
[pspp-builds.git] / src / language / tests / check-model.q
index 74a0025752be7ef4c7360f6ad26918239ccf712d..888557a91e438b3a5a05a3d7db75ac7713cc5e18 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009 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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
+#include <limits.h>
 
 #include <language/tests/check-model.h>
 
 #include <errno.h>
 
-#include <libpspp/model-checker.h>
 #include <language/lexer/lexer.h>
+#include <libpspp/model-checker.h>
 
 #include "error.h"
 #include "fwriteerror.h"
@@ -53,7 +54,6 @@
 /* (functions) */
 
 static struct mc_options *parse_options (struct lexer *);
-static void print_results (const struct mc_results *, FILE *);
 
 /* Parses a syntax description of model checker options from
    LEXER and passes them, along with AUX, to the CHECKER
@@ -79,7 +79,7 @@ check_model (struct lexer *lexer,
 
   results = checker (options, aux);
 
-  print_results (results, output_file);
+  mc_results_print (results, output_file);
 
   if (output_file != stdout && output_file != stderr)
     {
@@ -155,9 +155,9 @@ parse_options (struct lexer *lexer)
             msg (SW, _("At least one value must be specified on PATH."));
         }
     }
-  if (cmd.max_depth != NOT_LONG)
+  if (cmd.max_depth != LONG_MIN)
     mc_options_set_max_depth (options, cmd.max_depth);
-  if (cmd.hash_bits != NOT_LONG)
+  if (cmd.hash_bits != LONG_MIN)
     {
       int hash_bits;
       mc_options_set_hash_bits (options, cmd.hash_bits);
@@ -165,7 +165,7 @@ parse_options (struct lexer *lexer)
       if (hash_bits != cmd.hash_bits)
         msg (SW, _("Hash bits adjusted to %d."), hash_bits);
     }
-  if (cmd.queue_limit != NOT_LONG)
+  if (cmd.queue_limit != LONG_MIN)
     mc_options_set_queue_limit (options, cmd.queue_limit);
   if (cmd.drop != -1)
     {
@@ -178,15 +178,15 @@ parse_options (struct lexer *lexer)
     }
   if (cmd.sbc_search > 0)
     mc_options_set_seed (options, cmd.n_seed[0]);
-  if (cmd.max_unique_states != NOT_LONG)
+  if (cmd.max_unique_states != LONG_MIN)
     mc_options_set_max_unique_states (options, cmd.max_unique_states);
-  if (cmd.max_errors != NOT_LONG)
+  if (cmd.max_errors != LONG_MIN)
     mc_options_set_max_errors (options, cmd.max_errors);
   if (cmd.time_limit != SYSMIS)
     mc_options_set_time_limit (options, cmd.time_limit);
-  if (cmd.verbosity != NOT_LONG)
+  if (cmd.verbosity != LONG_MIN)
     mc_options_set_verbosity (options, cmd.verbosity);
-  if (cmd.err_verbosity != NOT_LONG)
+  if (cmd.err_verbosity != LONG_MIN)
     mc_options_set_failure_verbosity (options, cmd.err_verbosity);
   if (cmd.progress != -1)
     {
@@ -219,52 +219,6 @@ parse_options (struct lexer *lexer)
   return options;
 }
 
-/* Prints a description of RESULTS to stream F. */
-static void
-print_results (const struct mc_results *results, FILE *f)
-{
-  enum mc_stop_reason reason = mc_results_get_stop_reason (results);
-
-  fputs ("\n"
-         "MODEL CHECKING SUMMARY\n"
-         "----------------------\n\n", f);
-
-  fprintf (f, "Stopped by: %s\n",
-           reason == MC_SUCCESS ? "state space exhaustion"
-           : reason == MC_MAX_UNIQUE_STATES ? "reaching max unique states"
-           : reason == MC_MAX_ERROR_COUNT ? "reaching max error count"
-           : reason == MC_END_OF_PATH ? "reached end of specified path"
-           : reason == MC_TIMEOUT ? "reaching time limit"
-           : reason == MC_INTERRUPTED ? "user interruption"
-           : "unknown reason");
-  fprintf (f, "Errors found: %d\n\n", mc_results_get_error_count (results));
-
-  fprintf (f, "Unique states checked: %d\n",
-           mc_results_get_unique_state_count (results));
-  fprintf (f, "Maximum depth reached: %d\n",
-           mc_results_get_max_depth_reached (results));
-  fprintf (f, "Mean depth reached: %.2f\n\n",
-           mc_results_get_mean_depth_reached (results));
-
-  fprintf (f, "Dropped duplicate states: %d\n",
-           mc_results_get_duplicate_dropped_states (results));
-  fprintf (f, "Dropped off-path states: %d\n",
-           mc_results_get_off_path_dropped_states (results));
-  fprintf (f, "Dropped too-deep states: %d\n",
-           mc_results_get_depth_dropped_states (results));
-  fprintf (f, "Dropped queue-overflow states: %d\n",
-           mc_results_get_queue_dropped_states (results));
-  fprintf (f, "Checked states still queued when stopped: %d\n",
-           mc_results_get_queued_unprocessed_states (results));
-  fprintf (f, "Maximum queue length reached: %d\n\n",
-           mc_results_get_max_queue_length (results));
-
-  fprintf (f, "Runtime: %.2f seconds\n",
-           mc_results_get_duration (results));
-
-  putc ('\n', f);
-}
-
 /*
   Local Variables:
   mode: c