Automatically infer variables' measurement level from format and data.
[pspp] / tests / data / pc+-file-reader.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([SPSS/PC+ file reader - positive])
18
19 AT_SETUP([variable labels and missing values])
20 AT_KEYWORDS([sack synthetic PC+ file positive])
21 AT_DATA([pc+-file.sack], [dnl
22 dnl File header.
23 2; 0;
24 @MAIN; @MAIN_END - @MAIN;
25 @VARS; @VARS_END - @VARS;
26 @LABELS; @LABELS_END - @LABELS;
27 @DATA; @DATA_END - @DATA;
28 (0; 0) * 11;
29 i8 0 * 128;
30
31 MAIN:
32     i16 1;         dnl Fixed.
33     s62 "PCSPSS PSPP synthetic test product";
34     PCSYSMIS;
35     0; 0; i16 1;   dnl Fixed.
36     i16 0;
37     i16 15;
38     1;
39     i16 0;         dnl Fixed.
40     1;
41     s8 "11/28/14";
42     s8 "15:11:00";
43     s64 "PSPP synthetic test file";
44 MAIN_END:
45
46 VARS:
47     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
48     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
49     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
50
51     dnl Numeric variable, no label or missing values.
52     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
53
54     dnl Numeric variable, variable label.
55     0; 0; @NUM2_LABEL - @LABELS_OFS; 0x050800; s8 "NUM2"; PCSYSMIS;
56
57     dnl Numeric variable with missing value.
58     0; 0; 0; 0x050800; s8 "NUM3"; 1.0;
59
60     dnl Numeric variable, variable label and missing value.
61     0; 0; @NUM4_LABEL - @LABELS_OFS; 0x050800; s8 "NUM4"; 2.0;
62
63     dnl String variable, no label or missing values.
64     0; 0; 0; 0x010800; s8 "STR1"; PCSYSMIS;
65
66     dnl String variable, variable label.
67     0; 0; @STR2_LABEL - @LABELS_OFS; 0x010400; s8 "STR2"; PCSYSMIS;
68
69     dnl String variable with missing value.
70     0; 0; 0; 0x010500; s8 "STR3"; s8 "MISS";
71
72     dnl String variable, variable label and missing value.
73     0; 0; @STR4_LABEL - @LABELS_OFS; 0x010100; s8 "STR4"; s8 "OTHR";
74
75     dnl Long string variable
76     0; 0; 0; 0x010b00; s8 "STR5"; PCSYSMIS;
77     0 * 8;
78
79     dnl Long string variable with variable label
80     0; 0; @STR6_LABEL - @LABELS_OFS; 0x010b00; s8 "STR6"; PCSYSMIS;
81     0 * 8;
82 VARS_END:
83
84 LABELS:
85     3; i8 0 0 0; LABELS_OFS: i8 0;
86     NUM2_LABEL: COUNT8("Numeric variable 2's label");
87     NUM4_LABEL: COUNT8("Another numeric variable label");
88     STR2_LABEL: COUNT8("STR2's variable label");
89     STR4_LABEL: COUNT8("STR4's variable label");
90     STR6_LABEL: COUNT8("Another string variable's label");
91 LABELS_END:
92
93 DATA:
94     0.0; "11/28/14"; 1.0;
95     0.0; 1.0; 2.0; PCSYSMIS; s8 "abcdefgh"; s8 "ijkl"; s8 "mnopq"; s8 "r";
96     s16 "stuvwxyzAB"; s16 "CDEFGHIJKLM";
97 DATA_END:
98 ])
99 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
100 AT_DATA([pc+-file.sps], [dnl
101 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
102 DISPLAY FILE LABEL.
103 DISPLAY DICTIONARY.
104 LIST.
105 ])
106 AT_CHECK([pspp -o pspp.csv pc+-file.sps])
107 AT_CHECK([cat pspp.csv], [0], [dnl
108 Table: File Label
109 Label,PSPP synthetic test file
110
111 Table: Variables
112 Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
113 NUM1,1,,Unknown,Input,8,Right,F8.0,F8.0,
114 NUM2,2,Numeric variable 2's label,Unknown,Input,8,Right,F8.0,F8.0,
115 NUM3,3,,Unknown,Input,8,Right,F8.0,F8.0,1
116 NUM4,4,Another numeric variable label,Unknown,Input,8,Right,F8.0,F8.0,2
117 STR1,5,,Nominal,Input,8,Left,A8,A8,
118 STR2,6,STR2's variable label,Nominal,Input,4,Left,A4,A4,
119 STR3,7,,Nominal,Input,5,Left,A5,A5,"""MISS """
120 STR4,8,STR4's variable label,Nominal,Input,1,Left,A1,A1,"""O"""
121 STR5,9,,Nominal,Input,11,Left,A11,A11,
122 STR6,10,Another string variable's label,Nominal,Input,11,Left,A11,A11,
123
124 Table: Data List
125 NUM1,NUM2,NUM3,NUM4,STR1,STR2,STR3,STR4,STR5,STR6
126 0,1,2,.,abcdefgh,ijkl,mnopq,r,stuvwxyzAB,CDEFGHIJKLM
127 ])
128 AT_CLEANUP
129
130 AT_SETUP([value labels])
131 AT_KEYWORDS([sack synthetic PC+ file positive])
132 AT_DATA([pc+-file.sack], [dnl
133 dnl File header.
134 2; 0;
135 @MAIN; @MAIN_END - @MAIN;
136 @VARS; @VARS_END - @VARS;
137 @LABELS; @LABELS_END - @LABELS;
138 @DATA; @DATA_END - @DATA;
139 (0; 0) * 11;
140 i8 0 * 128;
141
142 MAIN:
143     i16 1;         dnl Fixed.
144     s62 "PCSPSS PSPP synthetic test product";
145     PCSYSMIS;
146     0; 0; i16 1;   dnl Fixed.
147     i16 0;
148     i16 16;
149     1;
150     i16 0;         dnl Fixed.
151     1;
152     s8 "11/28/14";
153     s8 "15:11:00";
154     s64 "PSPP synthetic test file";
155 MAIN_END:
156
157 VARS:
158     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
159     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
160     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
161
162     dnl Numeric variables.
163     @N1 - @LOFF; @N1E - @LOFF; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
164     @N2 - @LOFF; @N2E - @LOFF; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
165     @N3 - @LOFF; @N3E - @LOFF; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
166     @N4 - @LOFF; @N4E - @LOFF; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
167     @N5 - @LOFF; @N5E - @LOFF; 0; 0x050800; s8 "NUM5"; PCSYSMIS;
168
169     dnl String variables.
170     @S1 - @LOFF; @S1E - @LOFF; 0; 0x010100; s8 "STR1"; PCSYSMIS;
171     @S2 - @LOFF; @S2E - @LOFF; 0; 0x010200; s8 "STR2"; PCSYSMIS;
172     @S3 - @LOFF; @S3E - @LOFF; 0; 0x010300; s8 "STR3"; PCSYSMIS;
173     @S4 - @LOFF; @S4E - @LOFF; 0; 0x010400; s8 "STR4"; PCSYSMIS;
174     @S5 - @LOFF; @S5E - @LOFF; 0; 0x010500; s8 "STR5"; PCSYSMIS;
175     @S6 - @LOFF; @S6E - @LOFF; 0; 0x010600; s8 "STR6"; PCSYSMIS;
176     @S7 - @LOFF; @S7E - @LOFF; 0; 0x010700; s8 "STR7"; PCSYSMIS;
177     @S8 - @LOFF; @S8E - @LOFF; 0; 0x010800; s8 "STR8"; PCSYSMIS;
178 VARS_END:
179
180 LABELS:
181     3; i8 0 0 0; LOFF: i8 0;
182
183     N1: 1.0; COUNT8("one"); N1E:
184     N2: 2.0; COUNT8("two"); 3.0; COUNT8("three"); N2E:
185     N3:
186         3.0; COUNT8("three");
187     N4: N5:
188         4.0; COUNT8("four");
189     N3E: N4E:
190         5.0; COUNT8("five");
191     N5E:
192
193     S1: s8 "a"; COUNT8("value label for `a'"); S1E:
194     S2: s8 "ab"; COUNT8("value label for `ab'"); S2E:
195     S3: s8 "abc"; COUNT8("value label for `abc'"); S3E:
196     S4: S5: S6: S7:
197         s8 "abcdefgh"; COUNT8("value label for abcdefgh"); S4E:
198     S8:
199         s8 "ijklmnop"; COUNT8("value label for ijklmnop"); S5E:
200         s8 "qrstuvwx"; COUNT8("value label for qrstuvwx"); S6E:
201         s8 "yzABCDEF"; COUNT8("value label for yzABCDEF"); S7E:
202         s8 "GHIJKLMN"; COUNT8("value label for GHIJKLMN"); S8E:
203 LABELS_END:
204
205 DATA:
206     1.0; "11/28/14"; 1.0;
207     1.0; 2.0; 3.0; 4.0; 5.0;
208     s8 "a"; s8 "bc"; s8 "cde"; s8 "fghj"; s8 "klmno"; s8 "pqrstu";
209     s8 "vwxyzAB"; s8 "CDEFGHIJ";
210 DATA_END:
211 ])
212 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
213 AT_DATA([pc+-file.sps], [dnl
214 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
215 DISPLAY FILE LABEL.
216 DISPLAY DICTIONARY.
217 LIST.
218 ])
219 AT_CHECK([pspp -o pspp.csv pc+-file.sps])
220 AT_CHECK([cat pspp.csv], [0], [dnl
221 Table: File Label
222 Label,PSPP synthetic test file
223
224 Table: Variables
225 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
226 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
227 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
228 NUM3,3,Unknown,Input,8,Right,F8.0,F8.0
229 NUM4,4,Unknown,Input,8,Right,F8.0,F8.0
230 NUM5,5,Unknown,Input,8,Right,F8.0,F8.0
231 STR1,6,Nominal,Input,1,Left,A1,A1
232 STR2,7,Nominal,Input,2,Left,A2,A2
233 STR3,8,Nominal,Input,3,Left,A3,A3
234 STR4,9,Nominal,Input,4,Left,A4,A4
235 STR5,10,Nominal,Input,5,Left,A5,A5
236 STR6,11,Nominal,Input,6,Left,A6,A6
237 STR7,12,Nominal,Input,7,Left,A7,A7
238 STR8,13,Nominal,Input,8,Left,A8,A8
239
240 Table: Value Labels
241 Variable Value,,Label
242 NUM1,1,one
243 NUM2,2,two
244 ,3,three
245 NUM3,3,three
246 ,4,four
247 NUM4,4,four
248 NUM5,4,four
249 ,5,five
250 STR1,a,value label for `a'
251 STR2,ab,value label for `ab'
252 STR3,abc,value label for `abc'
253 STR4,abcd,value label for abcdefgh
254 STR5,abcde,value label for abcdefgh
255 ,ijklm,value label for ijklmnop
256 STR6,abcdef,value label for abcdefgh
257 ,ijklmn,value label for ijklmnop
258 ,qrstuv,value label for qrstuvwx
259 STR7,abcdefg,value label for abcdefgh
260 ,ijklmno,value label for ijklmnop
261 ,qrstuvw,value label for qrstuvwx
262 ,yzABCDE,value label for yzABCDEF
263 STR8,GHIJKLMN,value label for GHIJKLMN
264 ,ijklmnop,value label for ijklmnop
265 ,qrstuvwx,value label for qrstuvwx
266 ,yzABCDEF,value label for yzABCDEF
267
268 Table: Data List
269 NUM1,NUM2,NUM3,NUM4,NUM5,STR1,STR2,STR3,STR4,STR5,STR6,STR7,STR8
270 1,2,3,4,5,a,bc,cde,fghj,klmno,pqrstu,vwxyzAB,CDEFGHIJ
271 ])
272 AT_CLEANUP
273
274 AT_SETUP([compressed data])
275 AT_KEYWORDS([sack synthetic PC+ file positive])
276 AT_DATA([pc+-file.sack], [dnl
277 dnl File header.
278 2; 0;
279 @MAIN; @MAIN_END - @MAIN;
280 @VARS; @VARS_END - @VARS;
281 0; 0;
282 @DATA; @DATA_END - @DATA;
283 (0; 0) * 11;
284 i8 0 * 128;
285
286 MAIN:
287     i16 1;         dnl Fixed.
288     s62 "PCSPSS PSPP synthetic test product";
289     PCSYSMIS;
290     0; 0; i16 1;   dnl Fixed.
291     i16 1;
292     i16 9;
293     2;
294     i16 0;         dnl Fixed.
295     2;
296     s8 "11/28/14";
297     s8 "15:11:00";
298     s64 "PSPP synthetic test file";
299 MAIN_END:
300
301 VARS:
302     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
303     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
304     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
305
306     dnl Numeric variables.
307     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
308     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
309
310     dnl String variables.
311     0; 0; 0; 0x010400; s8 "STR4"; PCSYSMIS;
312     0; 0; 0; 0x010800; s8 "STR8"; PCSYSMIS;
313     0; 0; 0; 0x010f00; s8 "STR15"; PCSYSMIS;
314     0 * 8;
315 VARS_END:
316
317 DATA:
318     i8 101 1 101 100 255 1 1 1;
319         s8 "11/28/14"; s8 "abcd"; s8 "efghj"; s8 "efghijkl";
320     i8 1; i8 102 1 101 1 0 1 1;
321          s8 "ABCDEFG"; s8 "11/28/14"; 1000.0; s8 "PQRS"; s8 "TUVWXYZa";
322     i8 1 1 0 0 0 0 0 0;
323         s16 "bcdefghijklmnop";
324 DATA_END:
325 ])
326 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
327 AT_DATA([pc+-file.sps], [dnl
328 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
329 DISPLAY FILE LABEL.
330 DISPLAY DICTIONARY.
331 LIST.
332 ])
333 AT_CHECK([pspp -o pspp.csv pc+-file.sps])
334 AT_CHECK([cat pspp.csv], [0], [dnl
335 Table: File Label
336 Label,PSPP synthetic test file
337
338 Table: Variables
339 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
340 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
341 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
342 STR4,3,Nominal,Input,4,Left,A4,A4
343 STR8,4,Nominal,Input,8,Left,A8,A8
344 STR15,5,Nominal,Input,15,Left,A15,A15
345
346 Table: Data List
347 NUM1,NUM2,STR4,STR8,STR15
348 -5,150,abcd,efghj,efghijklABCDEFG
349 1000,.,PQRS,TUVWXYZa,bcdefghijklmnop
350 ])
351 AT_CLEANUP
352
353 AT_SETUP([weighted])
354 AT_KEYWORDS([sack synthetic PC+ file negative])
355 AT_DATA([pc+-file.sack], [dnl
356 dnl File header.
357 2; 0;
358 @MAIN; @MAIN_END - @MAIN;
359 @VARS; @VARS_END - @VARS;
360 0; 0;
361 @DATA; @DATA_END - @DATA;
362 (0; 0) * 11;
363 i8 0 * 128;
364
365 MAIN:
366     i16 1;         dnl Fixed.
367     s62 "PCSPSS PSPP synthetic test product";
368     PCSYSMIS;
369     0; 0; i16 1;   dnl Fixed.
370     i16 0;
371     i16 7;
372     i16 1; i16 6;
373     i16 0;         dnl Fixed.
374     i16 1; i16 0;
375     s8 "11/28/14";
376     s8 "15:11:00";
377     s64 "PSPP synthetic test file";
378 MAIN_END:
379
380 VARS:
381     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
382     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
383     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
384
385     dnl Numeric variables.
386     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
387     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
388     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
389     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
390 VARS_END:
391
392 DATA:
393     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
394 DATA_END:
395 ])
396 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
397 AT_DATA([pc+-file.sps], [dnl
398 SYSFILE INFO FILE='pc+-file.sav' ENCODING='us-ascii'.
399 ])
400 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
401 Table: File Information
402 File,pc+-file.sav
403 Label,PSPP synthetic test file
404 Created,11/28/14 15:11:00 by PCSPSS PSPP synthetic test product
405 Integer Format,Little Endian
406 Real Format,IEEE 754 LE.
407 Variables,4
408 Cases,1
409 Type,SPSS/PC+ System File
410 Weight,NUM3
411 Compression,None
412 Encoding,us-ascii
413
414 Table: Variables
415 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
416 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
417 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
418 NUM3,3,Unknown,Input,8,Right,F8.0,F8.0
419 NUM4,4,Unknown,Input,8,Right,F8.0,F8.0
420 ])
421 AT_CLEANUP
422 \f
423 AT_BANNER([SPSS/PC+ file reader - negative])
424
425 AT_SETUP([unspecified character encoding])
426 AT_KEYWORDS([sack synthetic PC+ file negative])
427 AT_DATA([pc+-file.sack], [dnl
428 dnl File header.
429 2; 0;
430 @MAIN; @MAIN_END - @MAIN;
431 @VARS; @VARS_END - @VARS;
432 0; 0;
433 @DATA; @DATA_END - @DATA;
434 (0; 0) * 11;
435 i8 0 * 128;
436
437 MAIN:
438     i16 1;         dnl Fixed.
439     s62 "PCSPSS PSPP synthetic test product";
440     PCSYSMIS;
441     0; 0; i16 1;   dnl Fixed.
442     i16 0;
443     i16 7;
444     1;
445     i16 0;         dnl Fixed.
446     1;
447     s8 "11/28/14";
448     s8 "15:11:00";
449     s64 "PSPP synthetic test file";
450 MAIN_END:
451
452 VARS:
453     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
454     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
455     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
456
457     dnl Numeric variables.
458     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
459     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
460     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
461     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
462 VARS_END:
463
464 DATA:
465     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
466 DATA_END:
467 ])
468 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
469 AT_DATA([pc+-file.sps], [dnl
470 GET FILE='pc+-file.sav'.
471 DISPLAY FILE LABEL.
472 DISPLAY DICTIONARY.
473 LIST.
474
475 SYSFILE INFO FILE='pc+-file.sav' ENCODING='us-ascii'.
476 ])
477 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [stdout], [])
478 AT_CHECK([sed 's/default encoding.*For/default encoding.  For/' stdout], [0], [dnl
479 "warning: `pc+-file.sav': Using default encoding.  For best results, specify an encoding explicitly.  Use SYSFILE INFO with ENCODING=""DETECT"" to analyze the possible encodings."
480
481 Table: File Label
482 Label,PSPP synthetic test file
483
484 Table: Variables
485 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
486 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
487 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
488 NUM3,3,Unknown,Input,8,Right,F8.0,F8.0
489 NUM4,4,Unknown,Input,8,Right,F8.0,F8.0
490
491 Table: Data List
492 NUM1,NUM2,NUM3,NUM4
493 2,3,4,5
494
495 Table: File Information
496 File,pc+-file.sav
497 Label,PSPP synthetic test file
498 Created,11/28/14 15:11:00 by PCSPSS PSPP synthetic test product
499 Integer Format,Little Endian
500 Real Format,IEEE 754 LE.
501 Variables,4
502 Cases,1
503 Type,SPSS/PC+ System File
504 Weight,Not weighted
505 Compression,None
506 Encoding,us-ascii
507
508 Table: Variables
509 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
510 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
511 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
512 NUM3,3,Unknown,Input,8,Right,F8.0,F8.0
513 NUM4,4,Unknown,Input,8,Right,F8.0,F8.0
514 ])
515 AT_CLEANUP
516
517 AT_SETUP([unexpected fixed values])
518 AT_KEYWORDS([sack synthetic PC+ file negative])
519 AT_DATA([pc+-file.sack], [dnl
520 dnl File header.
521 >>1; 2;<<
522 @MAIN; @MAIN_END - @MAIN;
523 @VARS; @VARS_END - @VARS;
524 0; 0;
525 @DATA; @DATA_END - @DATA;
526 (0; 0) * 11;
527 i8 0 * 128;
528
529 MAIN:
530     i16 1;         dnl Fixed.
531     s62 "PCSPSS PSPP synthetic test product";
532     >>1.0<<;
533     0; >>2<<; i16 1;   dnl Fixed.
534     i16 0;
535     i16 7;
536     1;
537     i16 0;         dnl Fixed.
538     3;
539     s8 "11/28/14";
540     s8 "15:11:00";
541     s64 "PSPP synthetic test file";
542 MAIN_END:
543
544 VARS:
545     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
546     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
547     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
548
549     dnl Numeric variables.
550     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
551     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
552     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
553     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
554 VARS_END:
555
556 DATA:
557     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
558 DATA_END:
559 ])
560 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
561 AT_DATA([pc+-file.sps], [dnl
562 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
563 ])
564 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
565 "warning: `pc+-file.sav' near offset 0x0: Directory fields have unexpected values (1,2)."
566
567 warning: `pc+-file.sav' near offset 0x100: Record 0 specifies unexpected system missing value 1 (0x1p+0).
568
569 "warning: `pc+-file.sav' near offset 0x100: Record 0 reserved fields have unexpected values (1,1,0,2,0,0)."
570
571 warning: `pc+-file.sav' near offset 0x100: Record 0 case counts differ (1 versus 3).
572 ])
573 AT_CLEANUP
574
575 AT_SETUP([short main header])
576 AT_KEYWORDS([sack synthetic PC+ file negative])
577 AT_DATA([pc+-file.sack], [dnl
578 dnl File header.
579 2; 0;
580 @MAIN; @MAIN_END - @MAIN;
581 @VARS; @VARS_END - @VARS;
582 0; 0;
583 @DATA; @DATA_END - @DATA;
584 (0; 0) * 11;
585 i8 0 * 128;
586
587 MAIN:
588     i16 1;         dnl Fixed.
589     s62 "PCSPSS PSPP synthetic test product";
590     PCSYSMIS;
591     0; 0; i16 1;   dnl Fixed.
592     i16 0;
593     i16 7;
594     1;
595     i16 0;         dnl Fixed.
596     1;
597     s8 "11/28/14";
598     s8 "15:11:00";
599 MAIN_END:
600
601 VARS:
602     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
603     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
604     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
605
606     dnl Numeric variables.
607     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
608     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
609     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
610     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
611 VARS_END:
612
613 DATA:
614     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
615 DATA_END:
616 ])
617 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
618 AT_DATA([pc+-file.sps], [dnl
619 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
620 ])
621 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
622 error: `pc+-file.sav' near offset 0x100: This is not an SPSS/PC+ system file.
623 ])
624 AT_CLEANUP
625
626 AT_SETUP([long main header])
627 AT_KEYWORDS([sack synthetic PC+ file negative])
628 AT_DATA([pc+-file.sack], [dnl
629 dnl File header.
630 2; 0;
631 @MAIN; @MAIN_END - @MAIN;
632 @VARS; @VARS_END - @VARS;
633 0; 0;
634 @DATA; @DATA_END - @DATA;
635 (0; 0) * 11;
636 i8 0 * 128;
637
638 MAIN:
639     i16 1;         dnl Fixed.
640     s62 "PCSPSS PSPP synthetic test product";
641     PCSYSMIS;
642     0; 0; i16 1;   dnl Fixed.
643     i16 0;
644     i16 7;
645     1;
646     i16 0;         dnl Fixed.
647     1;
648     s8 "11/28/14";
649     s8 "15:11:00";
650     >>s80 "PSPP synthetic test file"<<;
651 MAIN_END:
652
653 VARS:
654     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
655     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
656     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
657
658     dnl Numeric variables.
659     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
660     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
661     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
662     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
663 VARS_END:
664
665 DATA:
666     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
667 DATA_END:
668 ])
669 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
670 AT_DATA([pc+-file.sps], [dnl
671 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
672 ])
673 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
674 warning: `pc+-file.sav' near offset 0x100: Record 0 has unexpected length 192.
675 ])
676 AT_CLEANUP
677
678 AT_SETUP([invalid compression type])
679 AT_KEYWORDS([sack synthetic PC+ file negative])
680 AT_DATA([pc+-file.sack], [dnl
681 dnl File header.
682 2; 0;
683 @MAIN; @MAIN_END - @MAIN;
684 @VARS; @VARS_END - @VARS;
685 0; 0;
686 @DATA; @DATA_END - @DATA;
687 (0; 0) * 11;
688 i8 0 * 128;
689
690 MAIN:
691     i16 1;         dnl Fixed.
692     s62 "PCSPSS PSPP synthetic test product";
693     PCSYSMIS;
694     0; 0; i16 1;   dnl Fixed.
695     i16 >>2<<;
696     i16 7;
697     1;
698     i16 0;         dnl Fixed.
699     1;
700     s8 "11/28/14";
701     s8 "15:11:00";
702     s64 "PSPP synthetic test file";
703 MAIN_END:
704
705 VARS:
706     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
707     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
708     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
709
710     dnl Numeric variables.
711     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
712     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
713     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
714     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
715 VARS_END:
716
717 DATA:
718     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
719 DATA_END:
720 ])
721 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
722 AT_DATA([pc+-file.sps], [dnl
723 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
724 ])
725 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
726 error: `pc+-file.sav' near offset 0x100: Invalid compression type 2.
727 ])
728 AT_CLEANUP
729
730 AT_SETUP([unrealistic number of cases])
731 AT_KEYWORDS([sack synthetic PC+ file negative])
732 AT_DATA([pc+-file.sack], [dnl
733 dnl File header.
734 2; 0;
735 @MAIN; @MAIN_END - @MAIN;
736 @VARS; @VARS_END - @VARS;
737 0; 0;
738 @DATA; @DATA_END - @DATA;
739 (0; 0) * 11;
740 i8 0 * 128;
741
742 MAIN:
743     i16 1;         dnl Fixed.
744     s62 "PCSPSS PSPP synthetic test product";
745     PCSYSMIS;
746     0; 0; i16 1;   dnl Fixed.
747     i16 0;
748     i16 7;
749     1000;
750     i16 0;         dnl Fixed.
751     1000;
752     s8 "11/28/14";
753     s8 "15:11:00";
754     s64 "PSPP synthetic test file";
755 MAIN_END:
756
757 VARS:
758     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
759     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
760     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
761
762     dnl Numeric variables.
763     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
764     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
765     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
766     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
767 VARS_END:
768
769 DATA:
770     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
771 DATA_END:
772 ])
773 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
774 AT_DATA([pc+-file.sps], [dnl
775 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
776 ])
777 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
778 warning: `pc+-file.sav' near offset 0x100: Record 0 claims 1000 cases with 7 values per case (requiring at least 56000 bytes) but data record is only 56 bytes long.
779 ])
780 AT_CLEANUP
781
782 AT_SETUP([labels bad offsets])
783 AT_KEYWORDS([sack synthetic PC+ file negative])
784 AT_DATA([pc+-file.sack], [dnl
785 dnl File header.
786 2; 0;
787 @MAIN; @MAIN_END - @MAIN;
788 @VARS; @VARS_END - @VARS;
789 @LABELS; @LABELS_END - @LABELS;
790 @DATA; @DATA_END - @DATA;
791 (0; 0) * 11;
792 i8 0 * 128;
793
794 MAIN:
795     i16 1;         dnl Fixed.
796     s62 "PCSPSS PSPP synthetic test product";
797     PCSYSMIS;
798     0; 0; i16 1;   dnl Fixed.
799     i16 0;
800     i16 7;
801     1;
802     i16 0;         dnl Fixed.
803     1;
804     s8 "11/28/14";
805     s8 "15:11:00";
806     s64 "PSPP synthetic test file";
807 MAIN_END:
808
809 VARS:
810     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
811     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
812     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
813
814     dnl Numeric variables.
815     @N1L - @LOFF; @N1E - @LOFF; 1000; 0x050800; s8 "NUM1"; PCSYSMIS;
816     @N1L - @LOFF - 1; @LABELS_END - @LOFF; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
817     @N1L - @LOFF + 1; @LABELS_END - @LOFF; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
818     0; 0; @LABELS_END - @LOFF - 1; 0x050800; s8 "NUM4"; PCSYSMIS;
819 VARS_END:
820
821 LABELS:
822     3; i8 0 0 0; LOFF: i8 0;
823     N1L: PCSYSMIS;
824 LABELS_END:
825
826 DATA:
827     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0; N1E:
828 DATA_END:
829 ])
830 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
831 AT_DATA([pc+-file.sps], [dnl
832 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
833 ])
834 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
835 warning: `pc+-file.sav' near offset 0x210: Variable label claimed to start at offset 1007 in labels record but labels record is only 16 bytes.
836
837 warning: `pc+-file.sav' near offset 0x210: Value labels claimed to end at offset 72 in labels record but labels record is only 16 bytes.
838
839 "warning: `pc+-file.sav' near offset 0x2a0: Value labels end with partial label (0 bytes left in record, label length 255)."
840
841 warning: `pc+-file.sav' near offset 0x299: 7 leftover bytes following value labels.
842
843 warning: `pc+-file.sav' near offset 0x29f: Variable label with length 255 starting at offset 16 in labels record overruns end of 16-byte labels record.
844 ])
845 AT_CLEANUP
846
847 AT_SETUP([record 1 bad length])
848 AT_KEYWORDS([sack synthetic PC+ file negative])
849 AT_DATA([pc+-file.sack], [dnl
850 dnl File header.
851 2; 0;
852 @MAIN; @MAIN_END - @MAIN;
853 @VARS; @VARS_END - @VARS;
854 0; 0;
855 @DATA; @DATA_END - @DATA;
856 (0; 0) * 11;
857 i8 0 * 128;
858
859 MAIN:
860     i16 1;         dnl Fixed.
861     s62 "PCSPSS PSPP synthetic test product";
862     PCSYSMIS;
863     0; 0; i16 1;   dnl Fixed.
864     i16 0;
865     i16 7;
866     1;
867     i16 0;         dnl Fixed.
868     1;
869     s8 "11/28/14";
870     s8 "15:11:00";
871     s64 "PSPP synthetic test file";
872 MAIN_END:
873
874 VARS:
875     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
876     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
877     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
878
879     dnl Numeric variables.
880     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
881     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
882     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
883 VARS_END:
884
885 DATA:
886     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
887 DATA_END:
888 ])
889 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
890 AT_DATA([pc+-file.sps], [dnl
891 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
892 ])
893 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
894 error: `pc+-file.sav' near offset 0x1b0: Record 1 has length 192 (expected 224).
895
896 pc+-file.sps:1: error: GET: `pc+-file.sav': Data file dictionary has no variables.
897 ])
898 AT_CLEANUP
899
900 AT_SETUP([bad variable format])
901 AT_KEYWORDS([sack synthetic PC+ file negative])
902 AT_DATA([pc+-file.sack], [dnl
903 dnl File header.
904 2; 0;
905 @MAIN; @MAIN_END - @MAIN;
906 @VARS; @VARS_END - @VARS;
907 0; 0;
908 @DATA; @DATA_END - @DATA;
909 (0; 0) * 11;
910 i8 0 * 128;
911
912 MAIN:
913     i16 1;         dnl Fixed.
914     s62 "PCSPSS PSPP synthetic test product";
915     PCSYSMIS;
916     0; 0; i16 1;   dnl Fixed.
917     i16 0;
918     i16 7;
919     1;
920     i16 0;         dnl Fixed.
921     1;
922     s8 "11/28/14";
923     s8 "15:11:00";
924     s64 "PSPP synthetic test file";
925 MAIN_END:
926
927 VARS:
928     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
929     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
930     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
931
932     dnl Numeric variables.
933     0; 0; 0; 0xff0000; s8 "NUM1"; PCSYSMIS;
934     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
935     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
936     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
937 VARS_END:
938
939 DATA:
940     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
941 DATA_END:
942 ])
943 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
944 AT_DATA([pc+-file.sps], [dnl
945 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
946 ])
947 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
948 error: `pc+-file.sav' near offset 0x210: Variable 3 has invalid type 255.
949 ])
950 AT_CLEANUP
951
952 AT_SETUP([bad variable name])
953 AT_KEYWORDS([sack synthetic PC+ file negative])
954 AT_DATA([pc+-file.sack], [dnl
955 dnl File header.
956 2; 0;
957 @MAIN; @MAIN_END - @MAIN;
958 @VARS; @VARS_END - @VARS;
959 0; 0;
960 @DATA; @DATA_END - @DATA;
961 (0; 0) * 11;
962 i8 0 * 128;
963
964 MAIN:
965     i16 1;         dnl Fixed.
966     s62 "PCSPSS PSPP synthetic test product";
967     PCSYSMIS;
968     0; 0; i16 1;   dnl Fixed.
969     i16 0;
970     i16 7;
971     1;
972     i16 0;         dnl Fixed.
973     1;
974     s8 "11/28/14";
975     s8 "15:11:00";
976     s64 "PSPP synthetic test file";
977 MAIN_END:
978
979 VARS:
980     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
981     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
982     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
983
984     dnl Numeric variables.
985     0; 0; 0; 0x050000; s8 "#NUM"; PCSYSMIS;
986     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
987     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
988     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
989 VARS_END:
990
991 DATA:
992     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
993 DATA_END:
994 ])
995 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
996 AT_DATA([pc+-file.sps], [dnl
997 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
998 ])
999 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
1000 error: `pc+-file.sav' near offset 0x210: Invalid variable name `#NUM'.
1001 ])
1002 AT_CLEANUP
1003
1004 AT_SETUP([duplicate variable name])
1005 AT_KEYWORDS([sack synthetic PC+ file negative])
1006 AT_DATA([pc+-file.sack], [dnl
1007 dnl File header.
1008 2; 0;
1009 @MAIN; @MAIN_END - @MAIN;
1010 @VARS; @VARS_END - @VARS;
1011 0; 0;
1012 @DATA; @DATA_END - @DATA;
1013 (0; 0) * 11;
1014 i8 0 * 128;
1015
1016 MAIN:
1017     i16 1;         dnl Fixed.
1018     s62 "PCSPSS PSPP synthetic test product";
1019     PCSYSMIS;
1020     0; 0; i16 1;   dnl Fixed.
1021     i16 0;
1022     i16 7;
1023     1;
1024     i16 0;         dnl Fixed.
1025     1;
1026     s8 "11/28/14";
1027     s8 "15:11:00";
1028     s64 "PSPP synthetic test file";
1029 MAIN_END:
1030
1031 VARS:
1032     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1033     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1034     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1035
1036     dnl Numeric variables.
1037     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1038     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1039     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1040     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1041 VARS_END:
1042
1043 DATA:
1044     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1045 DATA_END:
1046 ])
1047 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1048 AT_DATA([pc+-file.sps], [dnl
1049 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1050 ])
1051 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
1052 warning: `pc+-file.sav' near offset 0x230: Renaming variable with duplicate name `NUM1' to `VAR001'.
1053
1054 warning: `pc+-file.sav' near offset 0x250: Renaming variable with duplicate name `NUM1' to `VAR002'.
1055
1056 warning: `pc+-file.sav' near offset 0x270: Renaming variable with duplicate name `NUM1' to `VAR003'.
1057 ])
1058 AT_CLEANUP
1059
1060 AT_SETUP([partial case])
1061 AT_KEYWORDS([sack synthetic PC+ file negative])
1062 AT_DATA([pc+-file.sack], [dnl
1063 dnl File header.
1064 2; 0;
1065 @MAIN; @MAIN_END - @MAIN;
1066 @VARS; @VARS_END - @VARS;
1067 0; 0;
1068 @DATA; @DATA_END - @DATA;
1069 (0; 0) * 11;
1070 i8 0 * 128;
1071
1072 MAIN:
1073     i16 1;         dnl Fixed.
1074     s62 "PCSPSS PSPP synthetic test product";
1075     PCSYSMIS;
1076     0; 0; i16 1;   dnl Fixed.
1077     i16 0;
1078     i16 7;
1079     3;
1080     i16 0;         dnl Fixed.
1081     3;
1082     s8 "11/28/14";
1083     s8 "15:11:00";
1084     s64 "PSPP synthetic test file";
1085 MAIN_END:
1086
1087 VARS:
1088     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1089     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1090     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1091
1092     dnl Numeric variables.
1093     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1094     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1095     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1096     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1097 VARS_END:
1098
1099 DATA:
1100     1.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1101     2.0; "11/28/14"; 1.0; 6.0; 7.0; 8.0; 9.0;
1102     3.0; "11/28/14"; 1.0; 10.0;
1103 DATA_END:
1104 ])
1105 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1106 AT_DATA([pc+-file.sps], [dnl
1107 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1108 LIST.
1109 ])
1110 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
1111 warning: `pc+-file.sav' near offset 0x100: Record 0 claims 3 cases with 7 values per case (requiring at least 168 bytes) but data record is only 144 bytes long.
1112
1113 error: `pc+-file.sav' near offset 0x320: File ends in partial case.
1114
1115 error: Error reading case from file `pc+-file.sav'.
1116
1117 Table: Data List
1118 NUM1,NUM2,NUM3,NUM4
1119 2,3,4,5
1120 6,7,8,9
1121 ])
1122 AT_CLEANUP
1123
1124 AT_SETUP([case extends past end of data record])
1125 AT_KEYWORDS([sack synthetic PC+ file negative])
1126 AT_DATA([pc+-file.sack], [dnl
1127 dnl File header.
1128 2; 0;
1129 @MAIN; @MAIN_END - @MAIN;
1130 @VARS; @VARS_END - @VARS;
1131 0; 0;
1132 @DATA; @DATA_END - @DATA;
1133 (0; 0) * 11;
1134 i8 0 * 128;
1135
1136 MAIN:
1137     i16 1;         dnl Fixed.
1138     s62 "PCSPSS PSPP synthetic test product";
1139     PCSYSMIS;
1140     0; 0; i16 1;   dnl Fixed.
1141     i16 0;
1142     i16 7;
1143     3;
1144     i16 0;         dnl Fixed.
1145     3;
1146     s8 "11/28/14";
1147     s8 "15:11:00";
1148     s64 "PSPP synthetic test file";
1149 MAIN_END:
1150
1151 VARS:
1152     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1153     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1154     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1155
1156     dnl Numeric variables.
1157     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1158     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1159     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1160     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1161 VARS_END:
1162
1163 DATA:
1164     1.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1165     2.0; "11/28/14"; 1.0; 6.0; 7.0; 8.0; 9.0;
1166     3.0; "11/28/14"; 1.0; 10.0;
1167 DATA_END:
1168     11.0; 12.0; 13.0;
1169 ])
1170 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1171 AT_DATA([pc+-file.sps], [dnl
1172 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1173 LIST.
1174 ])
1175 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
1176 warning: `pc+-file.sav' near offset 0x100: Record 0 claims 3 cases with 7 values per case (requiring at least 168 bytes) but data record is only 144 bytes long.
1177
1178 error: `pc+-file.sav' near offset 0x338: Case beginning at offset 0x00000300 extends past end of data record at offset 0x00000320.
1179
1180 error: Error reading case from file `pc+-file.sav'.
1181
1182 Table: Data List
1183 NUM1,NUM2,NUM3,NUM4
1184 2,3,4,5
1185 6,7,8,9
1186 ])
1187 AT_CLEANUP
1188
1189 AT_SETUP([corrupt compressed data])
1190 AT_KEYWORDS([sack synthetic PC+ file positive])
1191 AT_DATA([pc+-file.sack], [dnl
1192 dnl File header.
1193 2; 0;
1194 @MAIN; @MAIN_END - @MAIN;
1195 @VARS; @VARS_END - @VARS;
1196 0; 0;
1197 @DATA; @DATA_END - @DATA;
1198 (0; 0) * 11;
1199 i8 0 * 128;
1200
1201 MAIN:
1202     i16 1;         dnl Fixed.
1203     s62 "PCSPSS PSPP synthetic test product";
1204     PCSYSMIS;
1205     0; 0; i16 1;   dnl Fixed.
1206     i16 1;
1207     i16 9;
1208     2;
1209     i16 0;         dnl Fixed.
1210     2;
1211     s8 "11/28/14";
1212     s8 "15:11:00";
1213     s64 "PSPP synthetic test file";
1214 MAIN_END:
1215
1216 VARS:
1217     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1218     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1219     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1220
1221     dnl Numeric variables.
1222     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1223     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1224
1225     dnl String variables.
1226     0; 0; 0; 0x010400; s8 "STR4"; PCSYSMIS;
1227     0; 0; 0; 0x010800; s8 "STR8"; PCSYSMIS;
1228     0; 0; 0; 0x010f00; s8 "STR15"; PCSYSMIS;
1229     0 * 8;
1230 VARS_END:
1231
1232 DATA:
1233     i8 101 1 101 100 255 1 1 1;
1234         s8 "11/28/14"; s8 "abcd"; s8 "efghj"; s8 "efghijkl";
1235     i8 1; i8 102 101 101 1 0 1 1;
1236          s8 "ABCDEFG"; 1000.0; s8 "PQRS"; s8 "TUVWXYZa";
1237     i8 1 1 0 0 0 0 0 0;
1238         s16 "bcdefghijklmnop";
1239 DATA_END:
1240 ])
1241 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1242 AT_DATA([pc+-file.sps], [dnl
1243 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1244 DISPLAY FILE LABEL.
1245 DISPLAY DICTIONARY.
1246 LIST.
1247 ])
1248 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
1249 Table: File Label
1250 Label,PSPP synthetic test file
1251
1252 Table: Variables
1253 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
1254 NUM1,1,Unknown,Input,8,Right,F8.0,F8.0
1255 NUM2,2,Unknown,Input,8,Right,F8.0,F8.0
1256 STR4,3,Nominal,Input,4,Left,A4,A4
1257 STR8,4,Nominal,Input,8,Left,A8,A8
1258 STR15,5,Nominal,Input,15,Left,A15,A15
1259
1260 warning: `pc+-file.sav' near offset 0x308: Possible compressed data corruption: string contains compressed integer (opcode 101).
1261
1262 Table: Data List
1263 NUM1,NUM2,STR4,STR8,STR15
1264 -5,150,abcd,efghj,efghijklABCDEFG
1265 1000,.,PQRS,TUVWXYZa,bcdefghijklmnop
1266 ])
1267 AT_CLEANUP
1268
1269 AT_SETUP([invalid weight index])
1270 AT_KEYWORDS([sack synthetic PC+ file negative])
1271 AT_DATA([pc+-file.sack], [dnl
1272 dnl File header.
1273 2; 0;
1274 @MAIN; @MAIN_END - @MAIN;
1275 @VARS; @VARS_END - @VARS;
1276 0; 0;
1277 @DATA; @DATA_END - @DATA;
1278 (0; 0) * 11;
1279 i8 0 * 128;
1280
1281 MAIN:
1282     i16 1;         dnl Fixed.
1283     s62 "PCSPSS PSPP synthetic test product";
1284     PCSYSMIS;
1285     0; 0; i16 1;   dnl Fixed.
1286     i16 0;
1287     i16 7;
1288     i16 1; i16 10;
1289     i16 0;         dnl Fixed.
1290     i16 1; i16 0;
1291     s8 "11/28/14";
1292     s8 "15:11:00";
1293     s64 "PSPP synthetic test file";
1294 MAIN_END:
1295
1296 VARS:
1297     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1298     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1299     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1300
1301     dnl Numeric variables.
1302     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1303     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1304     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1305     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1306 VARS_END:
1307
1308 DATA:
1309     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1310 DATA_END:
1311 ])
1312 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1313 AT_DATA([pc+-file.sps], [dnl
1314 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1315 ])
1316 AT_CHECK([pspp -O format=csv pc+-file.sps], [0],
1317   [warning: `pc+-file.sav': Invalid weight index 10.
1318 ])
1319 AT_CLEANUP
1320
1321 AT_SETUP([string weight])
1322 AT_KEYWORDS([sack synthetic PC+ file negative])
1323 AT_DATA([pc+-file.sack], [dnl
1324 dnl File header.
1325 2; 0;
1326 @MAIN; @MAIN_END - @MAIN;
1327 @VARS; @VARS_END - @VARS;
1328 0; 0;
1329 @DATA; @DATA_END - @DATA;
1330 (0; 0) * 11;
1331 i8 0 * 128;
1332
1333 MAIN:
1334     i16 1;         dnl Fixed.
1335     s62 "PCSPSS PSPP synthetic test product";
1336     PCSYSMIS;
1337     0; 0; i16 1;   dnl Fixed.
1338     i16 0;
1339     i16 7;
1340     i16 1; i16 6;
1341     i16 0;         dnl Fixed.
1342     i16 1; i16 0;
1343     s8 "11/28/14";
1344     s8 "15:11:00";
1345     s64 "PSPP synthetic test file";
1346 MAIN_END:
1347
1348 VARS:
1349     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1350     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1351     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1352
1353     dnl Variables.
1354     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1355     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1356     0; 0; 0; 0x010800; s8 "STR1"; PCSYSMIS;
1357     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1358 VARS_END:
1359
1360 DATA:
1361     0.0; "11/28/14"; 1.0; s8 "acbdefgh"; 3.0; 4.0; 5.0;
1362 DATA_END:
1363 ])
1364 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1365 AT_DATA([pc+-file.sps], [dnl
1366 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1367 ])
1368 AT_CHECK([pspp -O format=csv pc+-file.sps], [0],
1369   [warning: `pc+-file.sav' near offset 0x250: Cannot weight by string variable `STR1'.
1370 ])
1371 AT_CLEANUP