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