matrix-reader tests matrix
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 27 Sep 2021 05:31:04 +0000 (22:31 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 27 Sep 2021 05:31:04 +0000 (22:31 -0700)
src/language/data-io/matrix-reader.c
tests/automake.mk
tests/language/data-io/mconvert.at

index 44ea5b18a88c8929011a4e37947a99725bf128b5..73d60c844dc19cfd66ad265fca9bfd107d1900fd 100644 (file)
 
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/casewriter.h"
 #include "data/data-out.h"
 #include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/variable.h"
 #include "language/command.h"
+#include "language/lexer/lexer.h"
 #include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/str.h"
@@ -99,12 +101,12 @@ find_matrix_string_var (const struct dictionary *dict, const char *name)
   const struct variable *var = dict_lookup_var (dict, name);
   if (var == NULL)
     {
-      msg (ME, _("Matrix dataset lacks a variable called %s."), name);
+      msg (SE, _("Matrix dataset lacks a variable called %s."), name);
       return NULL;
     }
   if (!var_is_alpha (var))
     {
-      msg (ME, _("Matrix dataset variable %s should be of string type."), name);
+      msg (SE, _("Matrix dataset variable %s should be of string type."), name);
       return NULL;
     }
   return var;
@@ -123,7 +125,7 @@ matrix_reader_create (const struct dictionary *dict,
   size_t rowtype_idx = var_get_dict_index (rowtype);
   if (varname_idx < rowtype_idx)
     {
-      msg (ME, _("Variable %s must precede %s in matrix file dictionary."),
+      msg (SE, _("Variable %s must precede %s in matrix file dictionary."),
            "ROWTYPE_", "VARNAME_");
       return NULL;
     }
@@ -133,7 +135,7 @@ matrix_reader_create (const struct dictionary *dict,
       const struct variable *v = dict_get_var (dict, i);
       if (!var_is_numeric (v) && v != rowtype && v != varname)
         {
-          msg (ME, _("Matrix dataset variable %s should be numeric."),
+          msg (SE, _("Matrix dataset variable %s should be numeric."),
                var_get_name (v));
           return NULL;
         }
@@ -152,7 +154,7 @@ matrix_reader_create (const struct dictionary *dict,
   size_t n_cvars = n_vars - varname_idx - 1;
   if (!n_cvars)
     {
-      msg (ME, _("Matrix dataset does not have any continuous variables."));
+      msg (SE, _("Matrix dataset does not have any continuous variables."));
       free (vars);
       return NULL;
     }
@@ -340,8 +342,19 @@ matrix_reader_next (struct matrix_material *mm, struct matrix_reader *mr,
 }
 
 int
-cmd_debug_matrix_read (struct lexer *lexer UNUSED, struct dataset *ds)
+cmd_debug_matrix_read (struct lexer *lexer, struct dataset *ds)
 {
+  if (lex_match_id (lexer, "NODATA"))
+    {
+      struct casereader *cr = casewriter_make_reader (
+        mem_writer_create (dict_get_proto (dataset_dict (ds))));
+      struct matrix_reader *mr = matrix_reader_create (dataset_dict (ds), cr);
+      if (!mr)
+        return CMD_FAILURE;
+      matrix_reader_destroy (mr);
+      return CMD_SUCCESS;
+    }
+
   struct matrix_reader *mr = matrix_reader_create (dataset_dict (ds),
                                                    proc_open (ds));
   if (!mr)
index 802666bfac27405a3161a9050612ecdc1f370ce0..3f76cbc32a358ece4fd6084c506acde347e43182 100644 (file)
@@ -358,6 +358,7 @@ TESTSUITE_AT = \
        tests/language/data-io/list.at \
        tests/language/data-io/match-files.at \
        tests/language/data-io/matrix-data.at \
+       tests/language/data-io/matrix-reader.at \
        tests/language/data-io/mconvert.at \
        tests/language/data-io/print-space.at \
        tests/language/data-io/print.at \
index a6b9ab69483e8d228eb01553d52a9299c7ddd5dd..fccd435f65409ec648d6d45c56b50a1b89f2a2d2 100644 (file)
@@ -216,5 +216,7 @@ AT_SETUP([MCONVERT negative test])
 AT_DATA([mconvert.sps], [MCONVERT.
 ])
 AT_CHECK([pspp mconvert.sps], [1], [dnl
+mconvert.sps:1: error: MCONVERT: No active file is defined and no external file
+is specified on MATRIX=IN.
 ])
 AT_CLEANUP
\ No newline at end of file