Fix bugs #20493, #20494.
authorBen Pfaff <blp@gnu.org>
Wed, 25 Jul 2007 04:03:58 +0000 (04:03 +0000)
committerBen Pfaff <blp@gnu.org>
Wed, 25 Jul 2007 04:03:58 +0000 (04:03 +0000)
* flip.c (struct flip_pgm): Remove `case_size' member (now
unused).
(cmd_flip): Pass var_cnt as number of cases instead of case_cnt,
to fix bug #20494.  Don't assign to `case_size' member, which was
unused after assignment.
(build_dictionary): When NEWNAMES not used, get the number of
variables right, to fix bug #20493.
* tests/command/flip.sh: Add tests to avoid regression on bugs
#20493, #20494.

src/language/stats/ChangeLog
src/language/stats/flip.c
tests/ChangeLog
tests/command/flip.sh

index 3ec57a78dad65da6e6633705fc87babbb0adb27f..78a256afcaa33066e17ea4cad5cd26d536853400 100644 (file)
@@ -1,3 +1,13 @@
+2007-07-24  Ben Pfaff  <blp@gnu.org>
+
+       * flip.c (struct flip_pgm): Remove `case_size' member (now
+       unused).
+       (cmd_flip): Pass var_cnt as number of cases instead of case_cnt,
+       to fix bug #20494.  Don't assign to `case_size' member, which was
+       unused after assignment.
+       (build_dictionary): When NEWNAMES not used, get the number of
+       variables right, to fix bug #20493.
+
 2007-07-10  Jason Stover  <jhs@math.gcsu.edu>
 
        * glm.q: Initial version of the GLM procedure.
index 9afcf422c5c0b12173109edf763f03c5302d59b8..53d9873d538f427715296b9e04e6770876549abb 100644 (file)
@@ -65,7 +65,6 @@ struct flip_pgm
     int *idx_to_fv;             /* var[]->index to compacted sink case fv. */
     size_t var_cnt;             /* Number of elements in `var'. */
     int case_cnt;               /* Pre-flip case count. */
-    size_t case_size;           /* Post-flip bytes per case. */
 
     struct variable *new_names; /* Variable containing new variable names. */
     struct varname *new_names_head; /* First new variable. */
@@ -119,7 +118,7 @@ cmd_flip (struct lexer *lexer, struct dataset *ds)
     {
       lex_match (lexer, '=');
       if (!parse_variables_const (lexer, dict, &flip->var, &flip->var_cnt,
-                            PV_NO_DUPLICATE))
+                                  PV_NO_DUPLICATE))
        goto error;
       lex_match (lexer, '/');
     }
@@ -149,8 +148,7 @@ cmd_flip (struct lexer *lexer, struct dataset *ds)
          }
     }
 
-  output_buf = pool_nalloc (flip->pool,
-                                  flip->var_cnt, sizeof *output_buf);
+  output_buf = pool_nalloc (flip->pool, flip->var_cnt, sizeof *output_buf);
 
   flip->file = pool_tmpfile (flip->pool);
   if (flip->file == NULL)
@@ -199,11 +197,10 @@ cmd_flip (struct lexer *lexer, struct dataset *ds)
       proc_discard_active_file (ds);
       goto error;
     }
-  flip->case_size = dict_get_case_size (dict);
 
   /* Set up flipped data for reading. */
   reader = casereader_create_sequential (NULL, dict_get_next_value_idx (dict),
-                                         flip->case_cnt,
+                                         flip->var_cnt,
                                          &flip_casereader_class, flip);
   proc_set_active_file_data (ds, reader);
   return lex_end_of_command (lexer);
@@ -288,7 +285,7 @@ build_dictionary (struct dictionary *dict, struct flip_pgm *flip)
          return false;
        }
 
-      for (i = 0; i < flip->case_cnt; i++)
+      for (i = 0; i < flip->case_cnt - 1; i++)
        {
           struct variable *v;
          char s[SHORT_NAME_LEN + 1];
index 5c851b2045d0d4199686dbf39c21e5dcb51f6682..795da07ec61f07b9ca1c93cf1be8a41d9271ea79 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-24  Ben Pfaff  <blp@gnu.org>
+
+       * tests/command/flip.sh: Add tests to avoid regression on bugs
+       #20493, #20494.
+
 2007-07-22  Ben Pfaff  <blp@gnu.org>
 
        * command/very-long-strings.sh: Test both compressed and
index 29caa1422c5d0e00a09d02ee4bb74f9c55bb497c..cfafa9612cd717d2a792293a2ccd1dc0346d275f 100755 (executable)
@@ -56,7 +56,8 @@ cd $TEMPDIR
 
 activity="create flip.stat"
 cat > $TEMPDIR/flip.stat <<EOF
-data list /N 1 (a) A B C D 2-9.
+* Test FLIP with NEWNAME or, equivalently, with a variable named CASE_LBL.
+data list notable /N 1 (a) A B C D 2-9.
 list.
 begin data.
 v 1 2 3 4 5
@@ -69,6 +70,19 @@ flip newnames=n.
 list.
 flip.
 list.
+
+* Test FLIP without NEWNAME.
+data list list notable /v1 to v10.
+format all(f2).
+begin data.
+1 2 3 4 5 6 7 8 9 10
+4 5 6 7 8 9 10 11 12 13
+end data.
+
+list.
+
+flip.
+list. 
 EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
@@ -80,16 +94,6 @@ if [ $? -ne 0 ] ; then no_result ; fi
 activity="compare output"
 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
 diff  -b  $TEMPDIR/pspp.list - << EOF
-1.1 DATA LIST.  Reading 1 record from INLINE.
-+--------+------+-------+------+
-|Variable|Record|Columns|Format|
-#========#======#=======#======#
-|N       |     1|  1-  1|A1    |
-|A       |     1|  2-  3|F2.0  |
-|B       |     1|  4-  5|F2.0  |
-|C       |     1|  6-  7|F2.0  |
-|D       |     1|  8-  9|F2.0  |
-+--------+------+-------+------+
 N  A  B  C  D
 - -- -- -- --
 v  1  2  3  4 
@@ -110,6 +114,22 @@ W            6.00     7.00     8.00     9.00
 X           11.00    12.00    13.00    14.00 
 Y           16.00    17.00    18.00    19.00 
 Z           21.00    22.00    23.00    24.00 
+v1 v2 v3 v4 v5 v6 v7 v8 v9 v10
+-- -- -- -- -- -- -- -- -- ---
+ 1  2  3  4  5  6  7  8  9  10 
+ 4  5  6  7  8  9 10 11 12  13 
+CASE_LBL   VAR000   VAR001
+-------- -------- --------
+v1           1.00     4.00 
+v2           2.00     5.00 
+v3           3.00     6.00 
+v4           4.00     7.00 
+v5           5.00     8.00 
+v6           6.00     9.00 
+v7           7.00    10.00 
+v8           8.00    11.00 
+v9           9.00    12.00 
+v10         10.00    13.00 
 EOF
 if [ $? -ne 0 ] ; then fail ; fi