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