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