Merge remote-tracking branch 'origin/master' into sheet
[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 File label: PSPP synthetic test file
109
110 Variable,Description,Position
111 NUM1,Format: F8.0,1
112 NUM2,"Label: Numeric variable 2's label
113 Format: F8.0",2
114 NUM3,"Format: F8.0
115 Missing Values: 1",3
116 NUM4,"Label: Another numeric variable label
117 Format: F8.0
118 Missing Values: 2",4
119 STR1,Format: A8,5
120 STR2,"Label: STR2's variable label
121 Format: A4",6
122 STR3,"Format: A5
123 Missing Values: ""MISS """,7
124 STR4,"Label: STR4's variable label
125 Format: A1
126 Missing Values: ""O""",8
127 STR5,Format: A11,9
128 STR6,"Label: Another string variable's label
129 Format: A11",10
130
131 Table: Data List
132 NUM1,NUM2,NUM3,NUM4,STR1,STR2,STR3,STR4,STR5,STR6
133 0,1,2,.,abcdefgh,ijkl,mnopq,r,stuvwxyzAB ,CDEFGHIJKLM
134 ])
135 AT_CLEANUP
136
137 AT_SETUP([value labels])
138 AT_KEYWORDS([sack synthetic PC+ file positive])
139 AT_DATA([pc+-file.sack], [dnl
140 dnl File header.
141 2; 0;
142 @MAIN; @MAIN_END - @MAIN;
143 @VARS; @VARS_END - @VARS;
144 @LABELS; @LABELS_END - @LABELS;
145 @DATA; @DATA_END - @DATA;
146 (0; 0) * 11;
147 i8 0 * 128;
148
149 MAIN:
150     i16 1;         dnl Fixed.
151     s62 "PCSPSS PSPP synthetic test product";
152     PCSYSMIS;
153     0; 0; i16 1;   dnl Fixed.
154     i16 0;
155     i16 16;
156     1;
157     i16 0;         dnl Fixed.
158     1;
159     s8 "11/28/14";
160     s8 "15:11:00";
161     s64 "PSPP synthetic test file";
162 MAIN_END:
163
164 VARS:
165     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
166     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
167     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
168
169     dnl Numeric variables.
170     @N1 - @LOFF; @N1E - @LOFF; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
171     @N2 - @LOFF; @N2E - @LOFF; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
172     @N3 - @LOFF; @N3E - @LOFF; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
173     @N4 - @LOFF; @N4E - @LOFF; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
174     @N5 - @LOFF; @N5E - @LOFF; 0; 0x050800; s8 "NUM5"; PCSYSMIS;
175
176     dnl String variables.
177     @S1 - @LOFF; @S1E - @LOFF; 0; 0x010100; s8 "STR1"; PCSYSMIS;
178     @S2 - @LOFF; @S2E - @LOFF; 0; 0x010200; s8 "STR2"; PCSYSMIS;
179     @S3 - @LOFF; @S3E - @LOFF; 0; 0x010300; s8 "STR3"; PCSYSMIS;
180     @S4 - @LOFF; @S4E - @LOFF; 0; 0x010400; s8 "STR4"; PCSYSMIS;
181     @S5 - @LOFF; @S5E - @LOFF; 0; 0x010500; s8 "STR5"; PCSYSMIS;
182     @S6 - @LOFF; @S6E - @LOFF; 0; 0x010600; s8 "STR6"; PCSYSMIS;
183     @S7 - @LOFF; @S7E - @LOFF; 0; 0x010700; s8 "STR7"; PCSYSMIS;
184     @S8 - @LOFF; @S8E - @LOFF; 0; 0x010800; s8 "STR8"; PCSYSMIS;
185 VARS_END:
186
187 LABELS:
188     3; i8 0 0 0; LOFF: i8 0;
189
190     N1: 1.0; COUNT8("one"); N1E:
191     N2: 2.0; COUNT8("two"); 3.0; COUNT8("three"); N2E:
192     N3:
193         3.0; COUNT8("three");
194     N4: N5:
195         4.0; COUNT8("four");
196     N3E: N4E:
197         5.0; COUNT8("five");
198     N5E:
199
200     S1: s8 "a"; COUNT8("value label for `a'"); S1E:
201     S2: s8 "ab"; COUNT8("value label for `ab'"); S2E:
202     S3: s8 "abc"; COUNT8("value label for `abc'"); S3E:
203     S4: S5: S6: S7:
204         s8 "abcdefgh"; COUNT8("value label for abcdefgh"); S4E:
205     S8:
206         s8 "ijklmnop"; COUNT8("value label for ijklmnop"); S5E:
207         s8 "qrstuvwx"; COUNT8("value label for qrstuvwx"); S6E:
208         s8 "yzABCDEF"; COUNT8("value label for yzABCDEF"); S7E:
209         s8 "GHIJKLMN"; COUNT8("value label for GHIJKLMN"); S8E:
210 LABELS_END:
211
212 DATA:
213     1.0; "11/28/14"; 1.0;
214     1.0; 2.0; 3.0; 4.0; 5.0;
215     s8 "a"; s8 "bc"; s8 "cde"; s8 "fghj"; s8 "klmno"; s8 "pqrstu";
216     s8 "vwxyzAB"; s8 "CDEFGHIJ";
217 DATA_END:
218 ])
219 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
220 AT_DATA([pc+-file.sps], [dnl
221 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
222 DISPLAY FILE LABEL.
223 DISPLAY DICTIONARY.
224 LIST.
225 ])
226 AT_CHECK([pspp -o pspp.csv pc+-file.sps])
227 AT_CHECK([cat pspp.csv], [0], [dnl
228 File label: PSPP synthetic test file
229
230 Variable,Description,Position
231 NUM1,"Format: F8.0
232
233 Value,Label
234 1,one",1
235 NUM2,"Format: F8.0
236
237 Value,Label
238 2,two
239 3,three",2
240 NUM3,"Format: F8.0
241
242 Value,Label
243 3,three
244 4,four",3
245 NUM4,"Format: F8.0
246
247 Value,Label
248 4,four",4
249 NUM5,"Format: F8.0
250
251 Value,Label
252 4,four
253 5,five",5
254 STR1,"Format: A1
255
256 Value,Label
257 a,value label for `a'",6
258 STR2,"Format: A2
259
260 Value,Label
261 ab,value label for `ab'",7
262 STR3,"Format: A3
263
264 Value,Label
265 abc,value label for `abc'",8
266 STR4,"Format: A4
267
268 Value,Label
269 abcd,value label for abcdefgh",9
270 STR5,"Format: A5
271
272 Value,Label
273 abcde,value label for abcdefgh
274 ijklm,value label for ijklmnop",10
275 STR6,"Format: A6
276
277 Value,Label
278 abcdef,value label for abcdefgh
279 ijklmn,value label for ijklmnop
280 qrstuv,value label for qrstuvwx",11
281 STR7,"Format: A7
282
283 Value,Label
284 abcdefg,value label for abcdefgh
285 ijklmno,value label for ijklmnop
286 qrstuvw,value label for qrstuvwx
287 yzABCDE,value label for yzABCDEF",12
288 STR8,"Format: A8
289
290 Value,Label
291 GHIJKLMN,value label for GHIJKLMN
292 ijklmnop,value label for ijklmnop
293 qrstuvwx,value label for qrstuvwx
294 yzABCDEF,value label for yzABCDEF",13
295
296 Table: Data List
297 NUM1,NUM2,NUM3,NUM4,NUM5,STR1,STR2,STR3,STR4,STR5,STR6,STR7,STR8
298 1,2,3,4,5,a,bc,cde,fghj,klmno,pqrstu,vwxyzAB,CDEFGHIJ
299 ])
300 AT_CLEANUP
301
302 AT_SETUP([compressed data])
303 AT_KEYWORDS([sack synthetic PC+ file positive])
304 AT_DATA([pc+-file.sack], [dnl
305 dnl File header.
306 2; 0;
307 @MAIN; @MAIN_END - @MAIN;
308 @VARS; @VARS_END - @VARS;
309 0; 0;
310 @DATA; @DATA_END - @DATA;
311 (0; 0) * 11;
312 i8 0 * 128;
313
314 MAIN:
315     i16 1;         dnl Fixed.
316     s62 "PCSPSS PSPP synthetic test product";
317     PCSYSMIS;
318     0; 0; i16 1;   dnl Fixed.
319     i16 1;
320     i16 9;
321     2;
322     i16 0;         dnl Fixed.
323     2;
324     s8 "11/28/14";
325     s8 "15:11:00";
326     s64 "PSPP synthetic test file";
327 MAIN_END:
328
329 VARS:
330     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
331     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
332     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
333
334     dnl Numeric variables.
335     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
336     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
337
338     dnl String variables.
339     0; 0; 0; 0x010400; s8 "STR4"; PCSYSMIS;
340     0; 0; 0; 0x010800; s8 "STR8"; PCSYSMIS;
341     0; 0; 0; 0x010f00; s8 "STR15"; PCSYSMIS;
342     0 * 8;
343 VARS_END:
344
345 DATA:
346     i8 101 1 101 100 255 1 1 1;
347         s8 "11/28/14"; s8 "abcd"; s8 "efghj"; s8 "efghijkl";
348     i8 1; i8 102 1 101 1 0 1 1;
349          s8 "ABCDEFG"; s8 "11/28/14"; 1000.0; s8 "PQRS"; s8 "TUVWXYZa";
350     i8 1 1 0 0 0 0 0 0;
351         s16 "bcdefghijklmnop";
352 DATA_END:
353 ])
354 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
355 AT_DATA([pc+-file.sps], [dnl
356 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
357 DISPLAY FILE LABEL.
358 DISPLAY DICTIONARY.
359 LIST.
360 ])
361 AT_CHECK([pspp -o pspp.csv pc+-file.sps])
362 AT_CHECK([cat pspp.csv], [0], [dnl
363 File label: PSPP synthetic test file
364
365 Variable,Description,Position
366 NUM1,Format: F8.0,1
367 NUM2,Format: F8.0,2
368 STR4,Format: A4,3
369 STR8,Format: A8,4
370 STR15,Format: A15,5
371
372 Table: Data List
373 NUM1,NUM2,STR4,STR8,STR15
374 -5,150,abcd,efghj   ,efghijklABCDEFG
375 1000,.,PQRS,TUVWXYZa,bcdefghijklmnop
376 ])
377 AT_CLEANUP
378
379 AT_SETUP([weighted])
380 AT_KEYWORDS([sack synthetic PC+ file negative])
381 AT_DATA([pc+-file.sack], [dnl
382 dnl File header.
383 2; 0;
384 @MAIN; @MAIN_END - @MAIN;
385 @VARS; @VARS_END - @VARS;
386 0; 0;
387 @DATA; @DATA_END - @DATA;
388 (0; 0) * 11;
389 i8 0 * 128;
390
391 MAIN:
392     i16 1;         dnl Fixed.
393     s62 "PCSPSS PSPP synthetic test product";
394     PCSYSMIS;
395     0; 0; i16 1;   dnl Fixed.
396     i16 0;
397     i16 7;
398     i16 1; i16 6;
399     i16 0;         dnl Fixed.
400     i16 1; i16 0;
401     s8 "11/28/14";
402     s8 "15:11:00";
403     s64 "PSPP synthetic test file";
404 MAIN_END:
405
406 VARS:
407     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
408     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
409     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
410
411     dnl Numeric variables.
412     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
413     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
414     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
415     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
416 VARS_END:
417
418 DATA:
419     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
420 DATA_END:
421 ])
422 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
423 AT_DATA([pc+-file.sps], [dnl
424 SYSFILE INFO FILE='pc+-file.sav' ENCODING='us-ascii'.
425 ])
426 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
427 File:,pc+-file.sav
428 Label:,PSPP synthetic test file
429 Created:,11/28/14 15:11:00 by PCSPSS PSPP synthetic test product
430 Integer Format:,Little Endian
431 Real Format:,IEEE 754 LE.
432 Variables:,4
433 Cases:,1
434 Type:,SPSS/PC+ System File
435 Weight:,NUM3
436 Compression:,None
437 Encoding:,us-ascii
438
439 Variable,Description,Position
440 NUM1,"Format: F8.0
441 Measure: Scale
442 Role: Input
443 Display Alignment: Right
444 Display Width: 8",1
445 NUM2,"Format: F8.0
446 Measure: Scale
447 Role: Input
448 Display Alignment: Right
449 Display Width: 8",2
450 NUM3,"Format: F8.0
451 Measure: Scale
452 Role: Input
453 Display Alignment: Right
454 Display Width: 8",3
455 NUM4,"Format: F8.0
456 Measure: Scale
457 Role: Input
458 Display Alignment: Right
459 Display Width: 8",4
460 ])
461 AT_CLEANUP
462 \f
463 AT_BANNER([SPSS/PC+ file reader - negative])
464
465 AT_SETUP([unspecified character encoding])
466 AT_KEYWORDS([sack synthetic PC+ file negative])
467 AT_DATA([pc+-file.sack], [dnl
468 dnl File header.
469 2; 0;
470 @MAIN; @MAIN_END - @MAIN;
471 @VARS; @VARS_END - @VARS;
472 0; 0;
473 @DATA; @DATA_END - @DATA;
474 (0; 0) * 11;
475 i8 0 * 128;
476
477 MAIN:
478     i16 1;         dnl Fixed.
479     s62 "PCSPSS PSPP synthetic test product";
480     PCSYSMIS;
481     0; 0; i16 1;   dnl Fixed.
482     i16 0;
483     i16 7;
484     1;
485     i16 0;         dnl Fixed.
486     1;
487     s8 "11/28/14";
488     s8 "15:11:00";
489     s64 "PSPP synthetic test file";
490 MAIN_END:
491
492 VARS:
493     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
494     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
495     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
496
497     dnl Numeric variables.
498     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
499     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
500     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
501     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
502 VARS_END:
503
504 DATA:
505     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
506 DATA_END:
507 ])
508 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
509 AT_DATA([pc+-file.sps], [dnl
510 GET FILE='pc+-file.sav'.
511 DISPLAY FILE LABEL.
512 DISPLAY DICTIONARY.
513 LIST.
514
515 SYSFILE INFO FILE='pc+-file.sav' ENCODING='us-ascii'.
516 ])
517 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [stdout], [])
518 AT_CHECK([sed 's/default encoding.*For/default encoding.  For/' stdout], [0], [dnl
519 "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."
520
521 File label: PSPP synthetic test file
522
523 Variable,Description,Position
524 NUM1,Format: F8.0,1
525 NUM2,Format: F8.0,2
526 NUM3,Format: F8.0,3
527 NUM4,Format: F8.0,4
528
529 Table: Data List
530 NUM1,NUM2,NUM3,NUM4
531 2,3,4,5
532
533 File:,pc+-file.sav
534 Label:,PSPP synthetic test file
535 Created:,11/28/14 15:11:00 by PCSPSS PSPP synthetic test product
536 Integer Format:,Little Endian
537 Real Format:,IEEE 754 LE.
538 Variables:,4
539 Cases:,1
540 Type:,SPSS/PC+ System File
541 Weight:,Not weighted.
542 Compression:,None
543 Encoding:,us-ascii
544
545 Variable,Description,Position
546 NUM1,"Format: F8.0
547 Measure: Scale
548 Role: Input
549 Display Alignment: Right
550 Display Width: 8",1
551 NUM2,"Format: F8.0
552 Measure: Scale
553 Role: Input
554 Display Alignment: Right
555 Display Width: 8",2
556 NUM3,"Format: F8.0
557 Measure: Scale
558 Role: Input
559 Display Alignment: Right
560 Display Width: 8",3
561 NUM4,"Format: F8.0
562 Measure: Scale
563 Role: Input
564 Display Alignment: Right
565 Display Width: 8",4
566 ])
567 AT_CLEANUP
568
569 AT_SETUP([unexpected fixed values])
570 AT_KEYWORDS([sack synthetic PC+ file negative])
571 AT_DATA([pc+-file.sack], [dnl
572 dnl File header.
573 >>1; 2;<<
574 @MAIN; @MAIN_END - @MAIN;
575 @VARS; @VARS_END - @VARS;
576 0; 0;
577 @DATA; @DATA_END - @DATA;
578 (0; 0) * 11;
579 i8 0 * 128;
580
581 MAIN:
582     i16 1;         dnl Fixed.
583     s62 "PCSPSS PSPP synthetic test product";
584     >>1.0<<;
585     0; >>2<<; i16 1;   dnl Fixed.
586     i16 0;
587     i16 7;
588     1;
589     i16 0;         dnl Fixed.
590     3;
591     s8 "11/28/14";
592     s8 "15:11:00";
593     s64 "PSPP synthetic test file";
594 MAIN_END:
595
596 VARS:
597     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
598     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
599     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
600
601     dnl Numeric variables.
602     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
603     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
604     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
605     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
606 VARS_END:
607
608 DATA:
609     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
610 DATA_END:
611 ])
612 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
613 AT_DATA([pc+-file.sps], [dnl
614 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
615 ])
616 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
617 "warning: `pc+-file.sav' near offset 0x0: Directory fields have unexpected values (1,2)."
618
619 warning: `pc+-file.sav' near offset 0x100: Record 0 specifies unexpected system missing value 1 (0x1p+0).
620
621 "warning: `pc+-file.sav' near offset 0x100: Record 0 reserved fields have unexpected values (1,1,0,2,0,0)."
622
623 warning: `pc+-file.sav' near offset 0x100: Record 0 case counts differ (1 versus 3).
624 ])
625 AT_CLEANUP
626
627 AT_SETUP([short main header])
628 AT_KEYWORDS([sack synthetic PC+ file negative])
629 AT_DATA([pc+-file.sack], [dnl
630 dnl File header.
631 2; 0;
632 @MAIN; @MAIN_END - @MAIN;
633 @VARS; @VARS_END - @VARS;
634 0; 0;
635 @DATA; @DATA_END - @DATA;
636 (0; 0) * 11;
637 i8 0 * 128;
638
639 MAIN:
640     i16 1;         dnl Fixed.
641     s62 "PCSPSS PSPP synthetic test product";
642     PCSYSMIS;
643     0; 0; i16 1;   dnl Fixed.
644     i16 0;
645     i16 7;
646     1;
647     i16 0;         dnl Fixed.
648     1;
649     s8 "11/28/14";
650     s8 "15:11:00";
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], [1], [dnl
674 error: `pc+-file.sav' near offset 0x100: This is not an SPSS/PC+ system file.
675 ])
676 AT_CLEANUP
677
678 AT_SETUP([long main header])
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 0;
696     i16 7;
697     1;
698     i16 0;         dnl Fixed.
699     1;
700     s8 "11/28/14";
701     s8 "15:11:00";
702     >>s80 "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], [0], [dnl
726 warning: `pc+-file.sav' near offset 0x100: Record 0 has unexpected length 192.
727 ])
728 AT_CLEANUP
729
730 AT_SETUP([invalid compression type])
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 >>2<<;
748     i16 7;
749     1;
750     i16 0;         dnl Fixed.
751     1;
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], [1], [dnl
778 error: `pc+-file.sav' near offset 0x100: Invalid compression type 2.
779 ])
780 AT_CLEANUP
781
782 AT_SETUP([unrealistic number of cases])
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 0; 0;
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     1000;
802     i16 0;         dnl Fixed.
803     1000;
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     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
816     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
817     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
818     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
819 VARS_END:
820
821 DATA:
822     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
823 DATA_END:
824 ])
825 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
826 AT_DATA([pc+-file.sps], [dnl
827 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
828 ])
829 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
830 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.
831 ])
832 AT_CLEANUP
833
834 AT_SETUP([labels bad offsets])
835 AT_KEYWORDS([sack synthetic PC+ file negative])
836 AT_DATA([pc+-file.sack], [dnl
837 dnl File header.
838 2; 0;
839 @MAIN; @MAIN_END - @MAIN;
840 @VARS; @VARS_END - @VARS;
841 @LABELS; @LABELS_END - @LABELS;
842 @DATA; @DATA_END - @DATA;
843 (0; 0) * 11;
844 i8 0 * 128;
845
846 MAIN:
847     i16 1;         dnl Fixed.
848     s62 "PCSPSS PSPP synthetic test product";
849     PCSYSMIS;
850     0; 0; i16 1;   dnl Fixed.
851     i16 0;
852     i16 7;
853     1;
854     i16 0;         dnl Fixed.
855     1;
856     s8 "11/28/14";
857     s8 "15:11:00";
858     s64 "PSPP synthetic test file";
859 MAIN_END:
860
861 VARS:
862     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
863     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
864     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
865
866     dnl Numeric variables.
867     @N1L - @LOFF; @N1E - @LOFF; 1000; 0x050800; s8 "NUM1"; PCSYSMIS;
868     @N1L - @LOFF - 1; @LABELS_END - @LOFF; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
869     @N1L - @LOFF + 1; @LABELS_END - @LOFF; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
870     0; 0; @LABELS_END - @LOFF - 1; 0x050800; s8 "NUM4"; PCSYSMIS;
871 VARS_END:
872
873 LABELS:
874     3; i8 0 0 0; LOFF: i8 0;
875     N1L: PCSYSMIS;
876 LABELS_END:
877
878 DATA:
879     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0; N1E:
880 DATA_END:
881 ])
882 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
883 AT_DATA([pc+-file.sps], [dnl
884 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
885 ])
886 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
887 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.
888
889 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.
890
891 "warning: `pc+-file.sav' near offset 0x2a0: Value labels end with partial label (0 bytes left in record, label length 255)."
892
893 warning: `pc+-file.sav' near offset 0x299: 7 leftover bytes following value labels.
894
895 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.
896 ])
897 AT_CLEANUP
898
899 AT_SETUP([record 1 bad length])
900 AT_KEYWORDS([sack synthetic PC+ file negative])
901 AT_DATA([pc+-file.sack], [dnl
902 dnl File header.
903 2; 0;
904 @MAIN; @MAIN_END - @MAIN;
905 @VARS; @VARS_END - @VARS;
906 0; 0;
907 @DATA; @DATA_END - @DATA;
908 (0; 0) * 11;
909 i8 0 * 128;
910
911 MAIN:
912     i16 1;         dnl Fixed.
913     s62 "PCSPSS PSPP synthetic test product";
914     PCSYSMIS;
915     0; 0; i16 1;   dnl Fixed.
916     i16 0;
917     i16 7;
918     1;
919     i16 0;         dnl Fixed.
920     1;
921     s8 "11/28/14";
922     s8 "15:11:00";
923     s64 "PSPP synthetic test file";
924 MAIN_END:
925
926 VARS:
927     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
928     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
929     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
930
931     dnl Numeric variables.
932     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
933     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
934     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
935 VARS_END:
936
937 DATA:
938     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
939 DATA_END:
940 ])
941 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
942 AT_DATA([pc+-file.sps], [dnl
943 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
944 ])
945 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
946 error: `pc+-file.sav' near offset 0x1b0: Record 1 has length 192 (expected 224).
947
948 pc+-file.sps:1: error: GET: `pc+-file.sav': Data file dictionary has no variables.
949 ])
950 AT_CLEANUP
951
952 AT_SETUP([bad variable format])
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; 0xff0000; s8 "NUM1"; 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: Variable 3 has invalid type 255.
1001 ])
1002 AT_CLEANUP
1003
1004 AT_SETUP([bad 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 "#NUM"; PCSYSMIS;
1038     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1039     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1040     0; 0; 0; 0x050800; s8 "NUM4"; 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], [1], [dnl
1052 error: `pc+-file.sav' near offset 0x210: Invalid variable name `#NUM'.
1053 ])
1054 AT_CLEANUP
1055
1056 AT_SETUP([duplicate variable name])
1057 AT_KEYWORDS([sack synthetic PC+ file negative])
1058 AT_DATA([pc+-file.sack], [dnl
1059 dnl File header.
1060 2; 0;
1061 @MAIN; @MAIN_END - @MAIN;
1062 @VARS; @VARS_END - @VARS;
1063 0; 0;
1064 @DATA; @DATA_END - @DATA;
1065 (0; 0) * 11;
1066 i8 0 * 128;
1067
1068 MAIN:
1069     i16 1;         dnl Fixed.
1070     s62 "PCSPSS PSPP synthetic test product";
1071     PCSYSMIS;
1072     0; 0; i16 1;   dnl Fixed.
1073     i16 0;
1074     i16 7;
1075     1;
1076     i16 0;         dnl Fixed.
1077     1;
1078     s8 "11/28/14";
1079     s8 "15:11:00";
1080     s64 "PSPP synthetic test file";
1081 MAIN_END:
1082
1083 VARS:
1084     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1085     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1086     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1087
1088     dnl Numeric variables.
1089     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1090     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1091     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1092     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1093 VARS_END:
1094
1095 DATA:
1096     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1097 DATA_END:
1098 ])
1099 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1100 AT_DATA([pc+-file.sps], [dnl
1101 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1102 ])
1103 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
1104 warning: `pc+-file.sav' near offset 0x230: Renaming variable with duplicate name `NUM1' to `VAR001'.
1105
1106 warning: `pc+-file.sav' near offset 0x250: Renaming variable with duplicate name `NUM1' to `VAR002'.
1107
1108 warning: `pc+-file.sav' near offset 0x270: Renaming variable with duplicate name `NUM1' to `VAR003'.
1109 ])
1110 AT_CLEANUP
1111
1112 AT_SETUP([partial case])
1113 AT_KEYWORDS([sack synthetic PC+ file negative])
1114 AT_DATA([pc+-file.sack], [dnl
1115 dnl File header.
1116 2; 0;
1117 @MAIN; @MAIN_END - @MAIN;
1118 @VARS; @VARS_END - @VARS;
1119 0; 0;
1120 @DATA; @DATA_END - @DATA;
1121 (0; 0) * 11;
1122 i8 0 * 128;
1123
1124 MAIN:
1125     i16 1;         dnl Fixed.
1126     s62 "PCSPSS PSPP synthetic test product";
1127     PCSYSMIS;
1128     0; 0; i16 1;   dnl Fixed.
1129     i16 0;
1130     i16 7;
1131     3;
1132     i16 0;         dnl Fixed.
1133     3;
1134     s8 "11/28/14";
1135     s8 "15:11:00";
1136     s64 "PSPP synthetic test file";
1137 MAIN_END:
1138
1139 VARS:
1140     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1141     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1142     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1143
1144     dnl Numeric variables.
1145     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1146     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1147     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1148     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1149 VARS_END:
1150
1151 DATA:
1152     1.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1153     2.0; "11/28/14"; 1.0; 6.0; 7.0; 8.0; 9.0;
1154     3.0; "11/28/14"; 1.0; 10.0;
1155 DATA_END:
1156 ])
1157 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1158 AT_DATA([pc+-file.sps], [dnl
1159 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1160 LIST.
1161 ])
1162 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
1163 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.
1164
1165 error: `pc+-file.sav' near offset 0x320: File ends in partial case.
1166
1167 error: Error reading case from file `pc+-file.sav'.
1168
1169 Table: Data List
1170 NUM1,NUM2,NUM3,NUM4
1171 2,3,4,5
1172 6,7,8,9
1173 ])
1174 AT_CLEANUP
1175
1176 AT_SETUP([case extends past end of data record])
1177 AT_KEYWORDS([sack synthetic PC+ file negative])
1178 AT_DATA([pc+-file.sack], [dnl
1179 dnl File header.
1180 2; 0;
1181 @MAIN; @MAIN_END - @MAIN;
1182 @VARS; @VARS_END - @VARS;
1183 0; 0;
1184 @DATA; @DATA_END - @DATA;
1185 (0; 0) * 11;
1186 i8 0 * 128;
1187
1188 MAIN:
1189     i16 1;         dnl Fixed.
1190     s62 "PCSPSS PSPP synthetic test product";
1191     PCSYSMIS;
1192     0; 0; i16 1;   dnl Fixed.
1193     i16 0;
1194     i16 7;
1195     3;
1196     i16 0;         dnl Fixed.
1197     3;
1198     s8 "11/28/14";
1199     s8 "15:11:00";
1200     s64 "PSPP synthetic test file";
1201 MAIN_END:
1202
1203 VARS:
1204     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1205     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1206     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1207
1208     dnl Numeric variables.
1209     0; 0; 0; 0x050000; s8 "NUM1"; PCSYSMIS;
1210     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1211     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1212     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1213 VARS_END:
1214
1215 DATA:
1216     1.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1217     2.0; "11/28/14"; 1.0; 6.0; 7.0; 8.0; 9.0;
1218     3.0; "11/28/14"; 1.0; 10.0;
1219 DATA_END:
1220     11.0; 12.0; 13.0;
1221 ])
1222 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1223 AT_DATA([pc+-file.sps], [dnl
1224 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1225 LIST.
1226 ])
1227 AT_CHECK([pspp -O format=csv pc+-file.sps], [1], [dnl
1228 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.
1229
1230 error: `pc+-file.sav' near offset 0x338: Case beginning at offset 0x00000300 extends past end of data record at offset 0x00000320.
1231
1232 error: Error reading case from file `pc+-file.sav'.
1233
1234 Table: Data List
1235 NUM1,NUM2,NUM3,NUM4
1236 2,3,4,5
1237 6,7,8,9
1238 ])
1239 AT_CLEANUP
1240
1241 AT_SETUP([corrupt compressed data])
1242 AT_KEYWORDS([sack synthetic PC+ file positive])
1243 AT_DATA([pc+-file.sack], [dnl
1244 dnl File header.
1245 2; 0;
1246 @MAIN; @MAIN_END - @MAIN;
1247 @VARS; @VARS_END - @VARS;
1248 0; 0;
1249 @DATA; @DATA_END - @DATA;
1250 (0; 0) * 11;
1251 i8 0 * 128;
1252
1253 MAIN:
1254     i16 1;         dnl Fixed.
1255     s62 "PCSPSS PSPP synthetic test product";
1256     PCSYSMIS;
1257     0; 0; i16 1;   dnl Fixed.
1258     i16 1;
1259     i16 9;
1260     2;
1261     i16 0;         dnl Fixed.
1262     2;
1263     s8 "11/28/14";
1264     s8 "15:11:00";
1265     s64 "PSPP synthetic test file";
1266 MAIN_END:
1267
1268 VARS:
1269     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1270     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1271     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1272
1273     dnl Numeric variables.
1274     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1275     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1276
1277     dnl String variables.
1278     0; 0; 0; 0x010400; s8 "STR4"; PCSYSMIS;
1279     0; 0; 0; 0x010800; s8 "STR8"; PCSYSMIS;
1280     0; 0; 0; 0x010f00; s8 "STR15"; PCSYSMIS;
1281     0 * 8;
1282 VARS_END:
1283
1284 DATA:
1285     i8 101 1 101 100 255 1 1 1;
1286         s8 "11/28/14"; s8 "abcd"; s8 "efghj"; s8 "efghijkl";
1287     i8 1; i8 102 101 101 1 0 1 1;
1288          s8 "ABCDEFG"; 1000.0; s8 "PQRS"; s8 "TUVWXYZa";
1289     i8 1 1 0 0 0 0 0 0;
1290         s16 "bcdefghijklmnop";
1291 DATA_END:
1292 ])
1293 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1294 AT_DATA([pc+-file.sps], [dnl
1295 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1296 DISPLAY FILE LABEL.
1297 DISPLAY DICTIONARY.
1298 LIST.
1299 ])
1300 AT_CHECK([pspp -O format=csv pc+-file.sps], [0], [dnl
1301 File label: PSPP synthetic test file
1302
1303 Variable,Description,Position
1304 NUM1,Format: F8.0,1
1305 NUM2,Format: F8.0,2
1306 STR4,Format: A4,3
1307 STR8,Format: A8,4
1308 STR15,Format: A15,5
1309
1310 warning: `pc+-file.sav' near offset 0x308: Possible compressed data corruption: string contains compressed integer (opcode 101).
1311
1312 Table: Data List
1313 NUM1,NUM2,STR4,STR8,STR15
1314 -5,150,abcd,efghj   ,efghijklABCDEFG
1315 1000,.,PQRS,TUVWXYZa,bcdefghijklmnop
1316 ])
1317 AT_CLEANUP
1318
1319 AT_SETUP([invalid weight index])
1320 AT_KEYWORDS([sack synthetic PC+ file negative])
1321 AT_DATA([pc+-file.sack], [dnl
1322 dnl File header.
1323 2; 0;
1324 @MAIN; @MAIN_END - @MAIN;
1325 @VARS; @VARS_END - @VARS;
1326 0; 0;
1327 @DATA; @DATA_END - @DATA;
1328 (0; 0) * 11;
1329 i8 0 * 128;
1330
1331 MAIN:
1332     i16 1;         dnl Fixed.
1333     s62 "PCSPSS PSPP synthetic test product";
1334     PCSYSMIS;
1335     0; 0; i16 1;   dnl Fixed.
1336     i16 0;
1337     i16 7;
1338     i16 1; i16 10;
1339     i16 0;         dnl Fixed.
1340     i16 1; i16 0;
1341     s8 "11/28/14";
1342     s8 "15:11:00";
1343     s64 "PSPP synthetic test file";
1344 MAIN_END:
1345
1346 VARS:
1347     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1348     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1349     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1350
1351     dnl Numeric variables.
1352     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1353     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1354     0; 0; 0; 0x050800; s8 "NUM3"; PCSYSMIS;
1355     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1356 VARS_END:
1357
1358 DATA:
1359     0.0; "11/28/14"; 1.0; 2.0; 3.0; 4.0; 5.0;
1360 DATA_END:
1361 ])
1362 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1363 AT_DATA([pc+-file.sps], [dnl
1364 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1365 ])
1366 AT_CHECK([pspp -O format=csv pc+-file.sps], [0],
1367   [warning: `pc+-file.sav': Invalid weight index 10.
1368 ])
1369 AT_CLEANUP
1370
1371 AT_SETUP([string weight])
1372 AT_KEYWORDS([sack synthetic PC+ file negative])
1373 AT_DATA([pc+-file.sack], [dnl
1374 dnl File header.
1375 2; 0;
1376 @MAIN; @MAIN_END - @MAIN;
1377 @VARS; @VARS_END - @VARS;
1378 0; 0;
1379 @DATA; @DATA_END - @DATA;
1380 (0; 0) * 11;
1381 i8 0 * 128;
1382
1383 MAIN:
1384     i16 1;         dnl Fixed.
1385     s62 "PCSPSS PSPP synthetic test product";
1386     PCSYSMIS;
1387     0; 0; i16 1;   dnl Fixed.
1388     i16 0;
1389     i16 7;
1390     i16 1; i16 6;
1391     i16 0;         dnl Fixed.
1392     i16 1; i16 0;
1393     s8 "11/28/14";
1394     s8 "15:11:00";
1395     s64 "PSPP synthetic test file";
1396 MAIN_END:
1397
1398 VARS:
1399     0; 0; 0; 0x050800; s8 "$CASENUM"; PCSYSMIS;
1400     0; 0; 0; 0x010800; s8 "$DATE"; PCSYSMIS;
1401     0; 0; 0; 0x050802; s8 "$WEIGHT"; PCSYSMIS;
1402
1403     dnl Variables.
1404     0; 0; 0; 0x050800; s8 "NUM1"; PCSYSMIS;
1405     0; 0; 0; 0x050800; s8 "NUM2"; PCSYSMIS;
1406     0; 0; 0; 0x010800; s8 "STR1"; PCSYSMIS;
1407     0; 0; 0; 0x050800; s8 "NUM4"; PCSYSMIS;
1408 VARS_END:
1409
1410 DATA:
1411     0.0; "11/28/14"; 1.0; s8 "acbdefgh"; 3.0; 4.0; 5.0;
1412 DATA_END:
1413 ])
1414 AT_CHECK([sack --le pc+-file.sack > pc+-file.sav])
1415 AT_DATA([pc+-file.sps], [dnl
1416 GET FILE='pc+-file.sav' ENCODING='us-ascii'.
1417 ])
1418 AT_CHECK([pspp -O format=csv pc+-file.sps], [0],
1419   [warning: `pc+-file.sav' near offset 0x250: Cannot weight by string variable `STR1'.
1420 ])
1421 AT_CLEANUP