sys-file-reader: Get rid of longjmp().
[pspp] / tests / data / sys-file-reader.at
1 AT_BANNER([system file reader - positive])
2
3 AT_SETUP([variable labels and missing values])
4 AT_KEYWORDS([sack synthetic system file positive])
5 AT_DATA([sys-file.sack], [dnl
6 dnl File header.
7 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
8 2; dnl Layout code
9 28; dnl Nominal case size
10 0; dnl Not compressed
11 0; dnl Not weighted
12 1; dnl 1 case.
13 100.0; dnl Bias.
14 "01 Jan 11"; "20:53:52";
15 "PSPP synthetic test file: "; i8 244; i8 245; i8 246; i8 248; s34 "";
16 i8 0 *3;
17
18 dnl Numeric variable, no label or missing values.
19 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
20
21 dnl Numeric variable, variable label.
22 2; 0; 1; 0; 0x050800 *2; s8 "NUM2";
23 32; "Numeric variable 2's label ("; i8 249; i8 250; i8 251; ")";
24
25 dnl Numeric variable, one missing value.
26 2; 0; 0; 1; 0x050800 *2; s8 "NUM3";
27 1.0;
28
29 dnl Numeric variable, variable label and missing value.
30 2; 0; 1; 1; 0x050800 *2; s8 "NUM4";
31 30; "Another numeric variable label"; i8 0 * 2;
32 1.0;
33
34 dnl Numeric variable, two missing values.
35 2; 0; 0; 2; 0x050800 *2; s8 "NUM5"; 1.0; 2.0;
36
37 dnl Numeric variable, three missing values.
38 2; 0; 0; 3; 0x050800 *2; s8 "NUM6"; 1.0; 2.0; 3.0;
39
40 dnl Numeric variable, range of missing values.
41 2; 0; 0; -2; 0x050800 *2; s8 "NUM7"; 1.0; 3.0;
42
43 dnl Numeric variables, range of missing values plus discrete value.
44 2; 0; 0; -3; 0x050800 *2; s8 "NUM8"; 1.0; 3.0; 5.0;
45 2; 0; 0; -3; 0x050800 *2; s8 "NUM9"; 1.0; HIGHEST; -5.0;
46 2; 0; 0; -3; 0x050800 *2; "NUM"; i8 192; i8 200; i8 204; i8 209; i8 210;
47 LOWEST; 1.0; 5.0;
48
49 dnl String variable, no label or missing values.
50 2; 4; 0; 0; 0x010400 *2; s8 "STR1";
51
52 dnl String variable, variable label.
53 2; 4; 1; 0; 0x010400 *2; s8 "STR2";
54 25; "String variable 2's label"; i8 0 * 3;
55
56 dnl String variable, one missing value.
57 2; 4; 0; 1; 0x010400 *2; s8 "STR3"; s8 "MISS";
58
59 dnl String variable, variable label and missing value.
60 2; 4; 1; 1; 0x010400 *2; s8 "STR4";
61 29; "Another string variable label"; i8 0 * 3;
62 s8 "OTHR";
63
64 dnl String variable, two missing values.
65 2; 4; 0; 2; 0x010400 *2; s8 "STR5"; s8 "MISS"; s8 "OTHR";
66
67 dnl String variable, three missing values.
68 2; 4; 0; 3; 0x010400 *2; s8 "STR6"; s8 "MISS"; s8 "OTHR"; s8 "MORE";
69
70 dnl Long string variable, one missing value.
71 dnl (This is not how SPSS represents missing values for long strings--it
72 dnl uses a separate record as shown later below--but old versions of PSPP
73 dnl did use this representation so we continue supporting it for backward
74 dnl compatibility.
75 2; 11; 0; 1; 0x010b00 *2; s8 "STR7"; "first8by";
76 2; -1; 0; 0; 0; 0; s8 "";
77
78 dnl Long string variables that will have missing values added with a
79 dnl later record.
80 2; 9; 0; 0; 0x010900 *2; s8 "STR8";
81 2; -1; 0; 0; 0; 0; s8 "";
82 2; 10; 0; 0; 0x010a00 *2; s8 "STR9";
83 2; -1; 0; 0; 0; 0; s8 "";
84 2; 11; 0; 0; 0x010b00 *2; s8 "STR10";
85 2; -1; 0; 0; 0; 0; s8 "";
86
87 dnl Long string variable, value label.
88 2; 25; 1; 0; 0x011900 *2; s8 "STR11"; 14; "25-byte string"; i8 0 * 2;
89 ( 2; -1; 0; 0; 0; 0; s8 ""; ) * 2;
90 dnl Variable label fields on continuation records have been spotted in system
91 dnl files created by "SPSS Power Macintosh Release 6.1".
92 2; -1; 1; 0; 0; 0; s8 ""; 20; "dummy variable label";
93
94 dnl Machine integer info record.
95 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
96
97 dnl Machine floating-point info record.
98 7; 4; 8; 3; SYSMIS; HIGHEST; LOWEST;
99
100 dnl Long string variable missing values record.
101 7; 22; 1; COUNT (
102 dnl One missing value for STR8.
103 COUNT("STR8"); i8 1; 8; "abcdefgh";
104
105 dnl Two missing values for STR9.
106 COUNT("STR9"); i8 2; 8; "abcdefgh"; 8; "01234567";
107
108 dnl Three missing values for STR9.
109 COUNT("STR10"); i8 3; 8; "abcdefgh"; 8; "01234567"; 8; "0       ";
110 );
111
112 dnl Character encoding record.
113 7; 20; 1; 12; "windows-1252";
114
115 dnl Dictionary termination record.
116 999; 0;
117
118 dnl Data.
119 1.0; 2.0; 3.0; 4.0; 5.0; 6.0; 7.0; 8.0; 9.0; 10.0;
120 s8 "abcd"; s8 "efgh"; s8 "ijkl"; s8 "mnop"; s8 "qrst"; s8 "uvwx";
121 s16 "yzABCDEFGHI"; s16 "JKLMNOPQR"; s16 "STUVWXYZ01";
122 s16 "23456789abc"; s32 "defghijklmnopqstuvwxyzABC";
123 ])
124 for variant in \
125         "be ae072375af73d628a544cc2230dd72c9" \
126         "le 039a21ab64f68c65b240e782a6b0f563"
127 do
128   set $variant
129   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
130 ])
131   AT_DATA([sys-file.sps], [dnl
132 GET FILE='sys-file.sav'.
133 DISPLAY FILE LABEL.
134 DISPLAY DICTIONARY.
135 LIST.
136 ])
137   AT_CHECK([pspp -o pspp.csv sys-file.sps])
138   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
139 File label: PSPP synthetic test file: ôõöø
140
141 Variable,Description,,Position
142 num1,Format: F8.0,,1
143 num2,Label: Numeric variable 2's label (ùúû),,2
144 ,Format: F8.0,,
145 num3,Format: F8.0,,3
146 ,Missing Values: 1,,
147 num4,Label: Another numeric variable label,,4
148 ,Format: F8.0,,
149 ,Missing Values: 1,,
150 num5,Format: F8.0,,5
151 ,Missing Values: 1; 2,,
152 num6,Format: F8.0,,6
153 ,Missing Values: 1; 2; 3,,
154 num7,Format: F8.0,,7
155 ,Missing Values: 1 THRU 3,,
156 num8,Format: F8.0,,8
157 ,Missing Values: 1 THRU 3; 5,,
158 num9,Format: F8.0,,9
159 ,Missing Values: 1 THRU HIGHEST; -5,,
160 numàèìñò,Format: F8.0,,10
161 ,Missing Values: LOWEST THRU 1; 5,,
162 str1,Format: A4,,11
163 str2,Label: String variable 2's label,,12
164 ,Format: A4,,
165 str3,Format: A4,,13
166 ,"Missing Values: ""MISS""",,
167 str4,Label: Another string variable label,,14
168 ,Format: A4,,
169 ,"Missing Values: ""OTHR""",,
170 str5,Format: A4,,15
171 ,"Missing Values: ""MISS""; ""OTHR""",,
172 str6,Format: A4,,16
173 ,"Missing Values: ""MISS""; ""OTHR""; ""MORE""",,
174 str7,Format: A11,,17
175 ,"Missing Values: ""first8by""",,
176 str8,Format: A9,,18
177 ,"Missing Values: ""abcdefgh""",,
178 str9,Format: A10,,19
179 ,"Missing Values: ""abcdefgh""; ""01234567""",,
180 str10,Format: A11,,20
181 ,"Missing Values: ""abcdefgh""; ""01234567""; ""0       """,,
182 str11,Label: 25-byte string,,21
183 ,Format: A25,,
184
185 Table: Data List
186 num1,num2,num3,num4,num5,num6,num7,num8,num9,numàèìñò,str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11
187 1,2,3,4,5,6,7,8,9,10,abcd,efgh,ijkl,mnop,qrst,uvwx,yzABCDEFGHI,JKLMNOPQR,STUVWXYZ01,23456789abc,defghijklmnopqstuvwxyzABC
188 ])
189 done
190 AT_CLEANUP
191
192 AT_SETUP([unspecified number of variable positions])
193 AT_KEYWORDS([sack synthetic system file positive])
194 AT_DATA([sys-file.sack], [dnl
195 dnl File header.
196 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
197 2; dnl Layout code
198 -1; dnl Nominal case size (unspecified)
199 0; dnl Not compressed
200 0; dnl Not weighted 
201 1; dnl 1 case.
202 100.0; dnl Bias.
203 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
204 i8 0 *3;
205
206 dnl Numeric variable, no label or missing values.
207 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
208
209 dnl Numeric variable, variable label.
210 2; 0; 1; 0; 0x050800 *2; s8 "NUM2";
211 26; "Numeric variable 2's label"; i8 0 *2;
212
213 dnl Dictionary termination record.
214 999; 0;
215
216 dnl Data.
217 1.0; 2.0; 
218 ])
219 for variant in \
220         "be 413e7bc80a47fcd7e4c8020e8e120060" \
221         "le d7db9120b1ff28c83aa6fe9fc405d903"
222 do
223   set $variant
224   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
225 ])
226   AT_DATA([sys-file.sps], [dnl
227 GET FILE='sys-file.sav'.
228 DISPLAY DICTIONARY.
229 LIST.
230 ])
231   AT_CHECK([pspp -o pspp.csv sys-file.sps])
232   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
233 Variable,Description,,Position
234 num1,Format: F8.0,,1
235 num2,Label: Numeric variable 2's label,,2
236 ,Format: F8.0,,
237
238 Table: Data List
239 num1,num2
240 1,2
241 ])
242 done
243 AT_CLEANUP
244
245 AT_SETUP([wrong number of variable positions but version 13])
246 AT_KEYWORDS([sack synthetic system file positive])
247 AT_DATA([sys-file.sack], [dnl
248 dnl File header.
249 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
250 2; dnl Layout code
251 -1; dnl Nominal case size (unspecified)
252 0; dnl Not compressed
253 0; dnl Not weighted 
254 1; dnl 1 case.
255 100.0; dnl Bias.
256 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
257 i8 0 *3;
258
259 dnl Numeric variable, no label or missing values.
260 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
261
262 dnl Numeric variable, variable label.
263 2; 0; 1; 0; 0x050800 *2; s8 "NUM2";
264 26; "Numeric variable 2's label"; i8 0 *2;
265
266 dnl Machine integer info record (SPSS 13).
267 7; 3; 4; 8; 13; 2; 3; -1; 1; 1; ENDIAN; 1252;
268
269 dnl Dictionary termination record.
270 999; 0;
271
272 dnl Data.
273 1.0; 2.0; 
274 ])
275 for variant in \
276         "be 3d17aae7d99538dc73c5cb42692b1038" \
277         "le 8ad1000df598617d5258f323c882d749"
278 do
279   set $variant
280   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
281 ])
282   AT_DATA([sys-file.sps], [dnl
283 GET FILE='sys-file.sav'.
284 DISPLAY DICTIONARY.
285 LIST.
286 ])
287   AT_CHECK([pspp -o pspp.csv sys-file.sps])
288   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
289 Variable,Description,,Position
290 num1,Format: F8.0,,1
291 num2,Label: Numeric variable 2's label,,2
292 ,Format: F8.0,,
293
294 Table: Data List
295 num1,num2
296 1,2
297 ])
298 done
299 AT_CLEANUP
300
301 AT_SETUP([value labels])
302 AT_KEYWORDS([sack synthetic system file positive])
303 AT_DATA([sys-file.sack], [dnl
304 dnl File header.
305 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
306 2; dnl Layout code
307 22; dnl Nominal case size
308 0; dnl Not compressed
309 0; dnl Not weighted 
310 1; dnl 1 case.
311 100.0; dnl Bias.
312 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
313 i8 0 *3;
314
315 dnl Numeric variables.
316 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
317 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
318 2; 0; 0; 0; 0x050800 *2; s8 "NUM3";
319 2; 0; 0; 0; 0x050800 *2; s8 "NUM4";
320 2; 0; 0; 0; 0x050800 *2; s8 "NUM5";
321
322 dnl String variables.
323 2; 1; 0; 0; 0x010100 *2; s8 "STR1"; dnl index 6
324 2; 2; 0; 0; 0x010200 *2; s8 "STR2"; dnl index 7
325 2; 3; 0; 0; 0x010300 *2; s8 "STR3"; dnl index 8
326 2; 4; 0; 0; 0x010400 *2; s8 "STR4"; dnl index 9
327 2; 4; 0; 0; 0x010400 *2; s8 "STR5"; dnl index 10
328 2; 6; 0; 0; 0x010600 *2; s8 "STR6"; dnl index 11
329 2; 7; 0; 0; 0x010700 *2; s8 "STR7"; dnl index 12
330 2; 8; 0; 0; 0x010800 *2; s8 "STR8"; dnl index 13
331 2; 9; 0; 0; 0x010900 *2; "STR9"; i8 230; s3 ""; dnl index 14
332 2; -1; 0; 0; 0; 0; s8 "";
333 2; 12; 0; 0; 0x010c00 *2; s8 "STR12"; dnl index 16
334 2; -1; 0; 0; 0; 0; s8 "";
335 2; 16; 0; 0; 0x011000 *2; s8 "STR16"; dnl index 18
336 2; -1; 0; 0; 0; 0; s8 "";
337 2; 17; 0; 0; 0x011100 *2; s8 "STR17"; dnl index 20
338 ( 2; -1; 0; 0; 0; 0; s8 ""; ) * 2;
339
340 dnl One value label for NUM1.
341 3; 1; 1.0; i8 17; i8 238; i8 228; i8 232; i8 237; s19 " (in Russian)"; 4; 1; 1;
342
343 dnl Two value labels for NUM2, as a single pair of type 3 and type 4 records.
344 3; 2; 1.0; i8 3; s7 "one"; 2.0; i8 3; s7 "two"; 4; 1; 2;
345
346 dnl Two value labels for NUM3, as two pairs of type 3 and type 4 records.
347 3; 1; 3.0; i8 5; s7 "three"; 4; 1; 3;
348 3; 1; 4.0; i8 4; s7 "four"; 4; 1; 3;
349
350 dnl Two common value labels for NUM4 and NUM5, plus two different ones for each.
351 3; 1; 5.0; i8 4; s7 "five"; 4; 1; 4;
352 3; 1; 6.0; i8 3; s7 "six"; 4; 1; 5;
353 3; 2; 7.0; i8 5; s7 "seven"; 8.0; i8 5; s7 "eight"; 4; 2; 4; 5;
354 3; 1; 9.0; i8 4; s7 "nine"; 4; 1; 4;
355 3; 1; 10.0; i8 3; s7 "ten"; 4; 1; 5;
356
357 dnl One value label for STR1.
358 3; 1; s8 "a"; i8 19; s23 "value label for `a'"; 4; 1; 6;
359
360 dnl Two value labels for STR2, as a single pair of type 3 and type 4 records.
361 3; 2;
362 s8 "bc"; i8 20; s23 "value label for `bc'";
363 s8 "de"; i8 20; s23 "value label for `de'";
364 4; 1; 7;
365
366 dnl Two value labels for STR3, as two pairs of type 3 and type 4 records.
367 3; 1; s8 "fgh"; i8 21; s23 "value label for `fgh'"; 4; 1; 8;
368 3; 1; s8 "ijk"; i8 21; s23 "value label for `ijk'"; 4; 1; 8;
369
370 dnl Two common value labels for STR4 and STR5, plus two different ones for each.
371 3; 1; s8 "lmno"; i8 22; s23 "value label for `lmno'"; 4; 1; 9;
372 3; 1; s8 "pqrs"; i8 22; s23 "value label for `pqrs'"; 4; 1; 10;
373 3; 2;
374 s8 "tuvw"; i8 22; s23 "value label for `tuvw'";
375 s8 "xyzA"; i8 22; s23 "value label for `xyzA'";
376 4; 2; 9; 10;
377 3; 1; s8 "BCDE"; i8 22; s23 "value label for `BCDE'"; 4; 1; 9;
378 3; 1; s8 "FGHI"; i8 22; s23 "value label for `FGHI'"; 4; 1; 10;
379
380 dnl One value label for STR6, STR7, STR8.
381 3; 1; s8 "JKLMNO"; i8 24; s31 "value label for `JKLMNO'"; 4; 1; 11;
382 3; 1; s8 "JKLMNOP"; i8 25; s31 "value label for `JKLMNOP'"; 4; 1; 12;
383 3; 1; s8 "JKLMNOPQ"; i8 26; s31 "value label for `JKLMNOPQ'"; 4; 1; 13;
384
385 dnl Machine integer info record.
386 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1251;
387
388 dnl Character encoding record.
389 7; 20; 1; 12; "windows-1251";
390
391 7; 21; 1; COUNT (
392 dnl One value label for STR9ж,
393 COUNT("STR9"; i8 230); 9; 1; COUNT("RSTUVWXYZ"); COUNT("value label for `RSTUVWXYZ'");
394
395 dnl Two value labels for STR12.
396 COUNT("STR12"); 12; 2;
397 COUNT("0123456789ab"); COUNT("value label for `0123456789ab'");
398 COUNT("cdefghijklmn"); COUNT("value label for `cdefghijklmn'");
399
400 dnl Three value labels for STR16.
401 COUNT("STR16"); 16; 3;
402 COUNT("opqrstuvwxyzABCD"); COUNT("value label for `opqrstuvwxyzABCD'");
403 COUNT("EFGHIJKLMNOPQRST"); COUNT("value label for `EFGHIJKLMNOPQRST'");
404 COUNT("UVWXYZ0123456789"); COUNT("value label for `UVWXYZ0123456789' with Cyrillic letters: `"; i8 244; i8 245; i8 246; "'");
405
406 dnl One value label for STR17.
407 COUNT("STR17"); 17; 1;
408 COUNT("abcdefghijklmnopq"); COUNT("value label for `abcdefghijklmnopq'");
409 );
410
411 dnl Dictionary termination record.
412 999; 0;
413 ])
414 for variant in \
415         "be b27d766d8a5ad9e901c8b244591a5942" \
416         "le eb2e93f3cc29acd605b80e6c3af25ba6"
417 do
418   set $variant
419   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
420 ])
421   AT_DATA([sys-file.sps], [dnl
422 GET FILE='sys-file.sav'.
423 DISPLAY DICTIONARY.
424 ])
425   AT_CHECK([pspp -o pspp.csv sys-file.sps])
426   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
427 Variable,Description,,Position
428 num1,Format: F8.0,,1
429 ,1,один (in Russian),
430 num2,Format: F8.0,,2
431 ,1,one,
432 ,2,two,
433 num3,Format: F8.0,,3
434 ,3,three,
435 ,4,four,
436 num4,Format: F8.0,,4
437 ,5,five,
438 ,7,seven,
439 ,8,eight,
440 ,9,nine,
441 num5,Format: F8.0,,5
442 ,6,six,
443 ,7,seven,
444 ,8,eight,
445 ,10,ten,
446 str1,Format: A1,,6
447 ,a,value label for `a',
448 str2,Format: A2,,7
449 ,bc,value label for `bc',
450 ,de,value label for `de',
451 str3,Format: A3,,8
452 ,fgh,value label for `fgh',
453 ,ijk,value label for `ijk',
454 str4,Format: A4,,9
455 ,BCDE,value label for `BCDE',
456 ,lmno,value label for `lmno',
457 ,tuvw,value label for `tuvw',
458 ,xyzA,value label for `xyzA',
459 str5,Format: A4,,10
460 ,FGHI,value label for `FGHI',
461 ,pqrs,value label for `pqrs',
462 ,tuvw,value label for `tuvw',
463 ,xyzA,value label for `xyzA',
464 str6,Format: A6,,11
465 ,JKLMNO,value label for `JKLMNO',
466 str7,Format: A7,,12
467 ,JKLMNOP,value label for `JKLMNOP',
468 str8,Format: A8,,13
469 ,JKLMNOPQ,value label for `JKLMNOPQ',
470 str9ж,Format: A9,,14
471 ,RSTUVWXYZ,value label for `RSTUVWXYZ',
472 str12,Format: A12,,15
473 ,0123456789ab,value label for `0123456789ab',
474 ,cdefghijklmn,value label for `cdefghijklmn',
475 str16,Format: A16,,16
476 ,EFGHIJKLMNOPQRST,value label for `EFGHIJKLMNOPQRST',
477 ,UVWXYZ0123456789,value label for `UVWXYZ0123456789' with Cyrillic letters: `фхц',
478 ,opqrstuvwxyzABCD,value label for `opqrstuvwxyzABCD',
479 str17,Format: A17,,17
480 ,abcdefghijklmnopq,value label for `abcdefghijklmnopq',
481 ])
482 done
483 AT_CLEANUP
484
485 AT_SETUP([documents])
486 AT_KEYWORDS([sack synthetic system file positive])
487 AT_DATA([sys-file.sack], [dnl
488 dnl File header.
489 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
490 2; dnl Layout code
491 1; dnl Nominal case size
492 0; dnl Not compressed
493 0; dnl Not weighted 
494 1; dnl 1 case.
495 100.0; dnl Bias.
496 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
497 i8 0 *3;
498
499 dnl Numeric variable, no label or missing values.
500 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
501
502 dnl Machine integer info record.
503 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
504
505 dnl Document record.
506 6; 5;
507 s80 "First line of documents";
508 s80 "Second line of documents";
509 "abb"; i8 233; " appliqu"; i8 233; " attach"; i8 233; " blas"; i8 233; " caf"; i8 233; " canap"; i8 233; " clich"; i8 233; " consomm"; i8 233;
510 s25 "";
511 s80 "";
512 s80 "Last line of documents";
513
514 dnl Character encoding record.
515 7; 20; 1; 12; "windows-1252";
516
517 dnl Dictionary termination record.
518 999; 0;
519
520 dnl Data.
521 1.0;
522 ])
523 for variant in \
524         "be 3555f74f3e714a3a703de7df56ce6d24" \
525         "le ede5a0f805a1aab096ea86abf677ff34"
526 do
527   set $variant
528   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
529 ])
530   AT_DATA([sys-file.sps], [dnl
531 GET FILE='sys-file.sav'.
532 DISPLAY DOCUMENTS.
533 LIST.
534 ])
535   AT_CHECK([pspp -o pspp.csv sys-file.sps])
536   AT_CHECK([cat pspp.csv], [0], [dnl
537 Documents in the active dataset:
538
539 First line of documents
540
541 Second line of documents
542
543 abbé appliqué attaché blasé café canapé cliché consommé
544
545
546
547 Last line of documents
548
549 Table: Data List
550 num1
551 1
552 ])
553 done
554 AT_CLEANUP
555
556 AT_SETUP([multiple response sets])
557 AT_KEYWORDS([sack synthetic system file positive])
558 AT_DATA([sys-file.sack], [dnl
559 dnl File header.
560 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
561 2; dnl Layout code
562 16; dnl Nominal case size
563 0; dnl Not compressed
564 0; dnl Not weighted 
565 0; dnl No cases.
566 100.0; dnl Bias.
567 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
568 i8 0 *3;
569
570 dnl $a
571 2; 0; 0; 0; 0x050800 *2; i8 0x82; i8 0xa0; s6 "";
572 2; 0; 0; 0; 0x050800 *2; s8 "B";
573 2; 0; 0; 0; 0x050800 *2; s8 "C";
574
575 dnl $b
576 2; 0; 0; 0; 0x050800 *2; s8 "D";
577 2; 0; 0; 0; 0x050800 *2; s8 "E";
578 2; 0; 0; 0; 0x050800 *2; s8 "F";
579 2; 0; 0; 0; 0x050800 *2; s8 "G";
580
581 dnl $c
582 2; 4; 0; 0; 0x010400 *2; s8 "H";
583 2; 4; 0; 0; 0x010400 *2; s8 "I";
584 2; 4; 0; 0; 0x010400 *2; s8 "J";
585
586 dnl $d
587 2; 0; 0; 0; 0x050800 *2; s8 "K";
588 2; 0; 0; 0; 0x050800 *2; s8 "L";
589 2; 0; 0; 0; 0x050800 *2; s8 "M";
590
591 dnl $e
592 2; 6; 0; 0; 0x010600 *2; s8 "N";
593 2; 6; 0; 0; 0x010600 *2; s8 "O";
594 2; 6; 0; 0; 0x010600 *2; s8 "P";
595
596 dnl Machine integer info record.
597 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 932;
598
599 7; 7; 1;
600 COUNT(
601   "$a=C 10 my mcgroup "; i8 0x82; i8 0xa0; " b c"; i8 10;
602   "$b=D2 55 0  g e f d"; i8 10; i8 10;
603   "$c=D4 "; i8 0x82; i8 0xcd; i8 0x82; i8 0xa2; " 10 mdgroup #2 h i j"; i8 10);
604
605 7; 19; 1;
606 COUNT(
607   i8 10;
608   "$d=E 1 2 34 13 third mdgroup k l m"; i8 10;
609   "$e=E 11 6 choice 0  n o p"; i8 10; i8 10; i8 10; i8 10);
610
611 dnl Character encoding record.
612 7; 20; 1; 9; "shift_jis";
613
614 dnl Dictionary termination record.
615 999; 0;
616 ])
617 for variant in \
618         "be eab38c68398324ac1663161512a8516a" \
619         "le afc6173eed7f4c4e63dc4252bc18f6a2"
620 do
621   set $variant
622   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
623 ])
624   AT_DATA([sys-file.sps], [dnl
625 GET FILE='sys-file.sav'.
626 MRSETS /DISPLAY NAME=ALL.
627 ])
628   AT_CHECK([pspp -o pspp.csv sys-file.sps])
629   AT_CHECK([cat pspp.csv], [0], [dnl
630 Table: Multiple Response Sets
631 Name,Variables,Details
632 $a,"あ
633 b
634 c
635 ","Multiple category set
636 Label: my mcgroup
637 "
638 $b,"g
639 e
640 f
641 d
642 ","Multiple dichotomy set
643 Counted value: 55
644 Category label source: Variable labels
645 "
646 $c,"h
647 i
648 j
649 ","Multiple dichotomy set
650 Label: mdgroup #2
651 Label source: Provided by user
652 Counted value: `はい'
653 Category label source: Variable labels
654 "
655 $d,"k
656 l
657 m
658 ","Multiple dichotomy set
659 Label: third mdgroup
660 Label source: Provided by user
661 Counted value: 34
662 Category label source: Value labels of counted value
663 "
664 $e,"n
665 o
666 p
667 ","Multiple dichotomy set
668 Label source: First variable label among variables
669 Counted value: `choice'
670 Category label source: Value labels of counted value
671 "
672 ])
673 done
674 AT_CLEANUP
675
676 dnl Also checks for handling of CR-only line ends in file label and
677 dnl extra product info.
678 AT_SETUP([extra product info])
679 AT_KEYWORDS([sack synthetic system file positive])
680 AT_DATA([sys-file.sack], [dnl
681 dnl File header.
682 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
683 2; dnl Layout code
684 4; dnl Nominal case size
685 0; dnl Not compressed
686 0; dnl Not weighted
687 0; dnl No cases.
688 100.0; dnl Bias.
689 "01 Jan 11"; "20:53:52"; "PSPP synthetic"; i8 13; s49 "test file";
690 i8 0 *3;
691
692 dnl Numeric variables.
693 2; 0; 0; 0; 0x050800 *2; s8 "A";
694 2; 0; 0; 0; 0x050800 *2; s8 "B";
695 2; 0; 0; 0; 0x050800 *2; s8 "C";
696 2; 0; 0; 0; 0x050800 *2; s8 "D";
697
698 dnl Extra product info.
699 7; 10; 1; COUNT ("Extra product info"; i8 13; "another line"; i8 13; "blah");
700
701 dnl Dictionary termination record.
702 999; 0;
703 ])
704 for variant in \
705         "be 0e1cac77501322b012637dcaeb3858ab" \
706         "le ecffd25cae41bbc89c29487abe192016"
707 do
708   set $variant
709   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
710 ])
711   AT_DATA([sys-file.sps], [dnl
712 SYSFILE INFO FILE='sys-file.sav'.
713 ])
714   AT_CHECK([pspp -o pspp.csv sys-file.sps])
715   AT_CHECK([sed 7q pspp.csv], [0], [dnl
716 File:,sys-file.sav
717 Label:,"PSPP synthetic
718 test file"
719 Created:,01 Jan 11 20:53:52 by $(@%:@) SPSS DATA FILE PSPP synthetic test file
720 Product:,"Extra product info
721 another line
722 blah"
723 ])
724 done
725 AT_CLEANUP
726
727 AT_SETUP([variable display parameters, without width])
728 AT_KEYWORDS([sack synthetic system file positive])
729 AT_DATA([sys-file.sack], [dnl
730 dnl File header.
731 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
732 2; dnl Layout code
733 19; dnl Nominal case size
734 0; dnl Not compressed
735 0; dnl Not weighted 
736 0; dnl No cases.
737 100.0; dnl Bias.
738 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
739 i8 0 *3;
740
741 dnl Numeric variables.
742 2; 0; 0; 0; 0x050800 *2; s8 "A";
743 2; 0; 0; 0; 0x050800 *2; s8 "B";
744 2; 0; 0; 0; 0x050800 *2; s8 "C";
745 2; 0; 0; 0; 0x050800 *2; s8 "D";
746
747 dnl Short string variables.
748 2; 3; 0; 0; 0x010300 *2; s8 "H";
749 2; 3; 0; 0; 0x010300 *2; s8 "I";
750 2; 3; 0; 0; 0x010300 *2; s8 "J";
751 2; 3; 0; 0; 0x010300 *2; s8 "K";
752
753 dnl Long string variables.
754 2; 9; 0; 0; 0x010900 *2; s8 "L";
755 2; -1; 0; 0; 0; 0; s8 "";
756 2; 10; 0; 0; 0x010a00 *2; s8 "M";
757 2; -1; 0; 0; 0; 0; s8 "";
758 2; 17; 0; 0; 0x011100 *2; s8 "N";
759 ( 2; -1; 0; 0; 0; 0; s8 "" ) * 2;
760 2; 25; 0; 0; 0x011900 *2; s8 "O";
761 ( 2; -1; 0; 0; 0; 0; s8 "" ) * 3;
762
763 dnl Variable display parameters
764 7; 11; 4; 24;
765 1; 0;
766 2; 0;
767 3; 0;
768 1; 1;
769 2; 1;
770 3; 1;
771 1; 2;
772 2; 2;
773 3; 2;
774 0; 0;
775 0; 1;
776 0; 2;
777
778 dnl Dictionary termination record.
779 999; 0;
780 ])
781 for variant in \
782         "be c130d9345080579b8862b360924edbfa" \
783         "le 6fde96f5a7c7386bff6cca049cd84d6a"
784 do
785   set $variant
786   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
787 ])
788   AT_DATA([sys-file.sps], [dnl
789 GET FILE='sys-file.sav'.
790 DISPLAY DICTIONARY.
791 ])
792   AT_CHECK([pspp -o pspp.csv sys-file.sps])
793   AT_CHECK([cat pspp.csv], [0], [dnl
794 Variable,Description,,Position
795 a,Format: F8.0,,1
796 ,Measure: Nominal,,
797 ,Display Alignment: Left,,
798 ,Display Width: 8,,
799 b,Format: F8.0,,2
800 ,Measure: Ordinal,,
801 ,Display Alignment: Left,,
802 ,Display Width: 8,,
803 c,Format: F8.0,,3
804 ,Measure: Scale,,
805 ,Display Alignment: Left,,
806 ,Display Width: 8,,
807 d,Format: F8.0,,4
808 ,Measure: Nominal,,
809 ,Display Alignment: Right,,
810 ,Display Width: 8,,
811 h,Format: A3,,5
812 ,Measure: Ordinal,,
813 ,Display Alignment: Right,,
814 ,Display Width: 3,,
815 i,Format: A3,,6
816 ,Measure: Scale,,
817 ,Display Alignment: Right,,
818 ,Display Width: 3,,
819 j,Format: A3,,7
820 ,Measure: Nominal,,
821 ,Display Alignment: Center,,
822 ,Display Width: 3,,
823 k,Format: A3,,8
824 ,Measure: Ordinal,,
825 ,Display Alignment: Center,,
826 ,Display Width: 3,,
827 l,Format: A9,,9
828 ,Measure: Scale,,
829 ,Display Alignment: Center,,
830 ,Display Width: 9,,
831 m,Format: A10,,10
832 ,Measure: Nominal,,
833 ,Display Alignment: Left,,
834 ,Display Width: 10,,
835 n,Format: A17,,11
836 ,Measure: Nominal,,
837 ,Display Alignment: Right,,
838 ,Display Width: 17,,
839 o,Format: A25,,12
840 ,Measure: Nominal,,
841 ,Display Alignment: Center,,
842 ,Display Width: 25,,
843 ])
844 done
845 AT_CLEANUP
846
847 AT_SETUP([variable display parameters, with width])
848 AT_KEYWORDS([sack synthetic system file positive])
849 AT_DATA([sys-file.sack], [dnl
850 dnl File header.
851 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
852 2; dnl Layout code
853 19; dnl Nominal case size
854 0; dnl Not compressed
855 0; dnl Not weighted 
856 0; dnl No cases.
857 100.0; dnl Bias.
858 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
859 i8 0 *3;
860
861 dnl Numeric variables.
862 2; 0; 0; 0; 0x050800 *2; s8 "A";
863 2; 0; 0; 0; 0x050800 *2; s8 "B";
864 2; 0; 0; 0; 0x050800 *2; s8 "C";
865 2; 0; 0; 0; 0x050800 *2; s8 "D";
866
867 dnl Short string variables.
868 2; 3; 0; 0; 0x010300 *2; s8 "H";
869 2; 3; 0; 0; 0x010300 *2; s8 "I";
870 2; 3; 0; 0; 0x010300 *2; s8 "J";
871 2; 3; 0; 0; 0x010300 *2; s8 "K";
872
873 dnl Long string variables.
874 2; 9; 0; 0; 0x010900 *2; s8 "L";
875 2; -1; 0; 0; 0; 0; s8 "";
876 2; 10; 0; 0; 0x010a00 *2; s8 "M";
877 2; -1; 0; 0; 0; 0; s8 "";
878 2; 17; 0; 0; 0x011100 *2; s8 "N";
879 ( 2; -1; 0; 0; 0; 0; s8 "" ) * 2;
880 2; 25; 0; 0; 0x011900 *2; s8 "O";
881 ( 2; -1; 0; 0; 0; 0; s8 "" ) * 3;
882
883 dnl Variable display parameters
884 7; 11; 4; 36;
885 1; 1; 0;
886 2; 2; 0;
887 3; 3; 0;
888 1; 4; 1;
889 2; 5; 1;
890 3; 6; 1;
891 1; 7; 2;
892 2; 8; 2;
893 3; 9; 2;
894 0; 10; 0;
895 0; 11; 1;
896 0; 12; 2;
897
898 dnl Dictionary termination record.
899 999; 0;
900 ])
901 for variant in \
902         "be 3ace75689a0b7faa9360936bbfe26055" \
903         "le 6e93f35d19a9882eb53ffb1b067ef7cd"
904 do
905   set $variant
906   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
907 ])
908   AT_DATA([sys-file.sps], [dnl
909 GET FILE='sys-file.sav'.
910 DISPLAY DICTIONARY.
911 ])
912   AT_CHECK([pspp -o pspp.csv sys-file.sps])
913   AT_CHECK([cat pspp.csv], [0], [dnl
914 Variable,Description,,Position
915 a,Format: F8.0,,1
916 ,Measure: Nominal,,
917 ,Display Alignment: Left,,
918 ,Display Width: 1,,
919 b,Format: F8.0,,2
920 ,Measure: Ordinal,,
921 ,Display Alignment: Left,,
922 ,Display Width: 2,,
923 c,Format: F8.0,,3
924 ,Measure: Scale,,
925 ,Display Alignment: Left,,
926 ,Display Width: 3,,
927 d,Format: F8.0,,4
928 ,Measure: Nominal,,
929 ,Display Alignment: Right,,
930 ,Display Width: 4,,
931 h,Format: A3,,5
932 ,Measure: Ordinal,,
933 ,Display Alignment: Right,,
934 ,Display Width: 5,,
935 i,Format: A3,,6
936 ,Measure: Scale,,
937 ,Display Alignment: Right,,
938 ,Display Width: 6,,
939 j,Format: A3,,7
940 ,Measure: Nominal,,
941 ,Display Alignment: Center,,
942 ,Display Width: 7,,
943 k,Format: A3,,8
944 ,Measure: Ordinal,,
945 ,Display Alignment: Center,,
946 ,Display Width: 8,,
947 l,Format: A9,,9
948 ,Measure: Scale,,
949 ,Display Alignment: Center,,
950 ,Display Width: 9,,
951 m,Format: A10,,10
952 ,Measure: Nominal,,
953 ,Display Alignment: Left,,
954 ,Display Width: 10,,
955 n,Format: A17,,11
956 ,Measure: Nominal,,
957 ,Display Alignment: Right,,
958 ,Display Width: 11,,
959 o,Format: A25,,12
960 ,Measure: Nominal,,
961 ,Display Alignment: Center,,
962 ,Display Width: 12,,
963 ])
964 done
965 AT_CLEANUP
966
967 AT_SETUP([long variable names])
968 AT_KEYWORDS([sack synthetic system file positive])
969 AT_DATA([sys-file.sack], [dnl
970 dnl File header.
971 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
972 2; dnl Layout code
973 7; dnl Nominal case size
974 0; dnl Not compressed
975 0; dnl Not weighted 
976 0; dnl No cases.
977 100.0; dnl Bias.
978 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
979 i8 0 *3;
980
981 dnl Numeric variables.
982 2; 0; 0; 0; 0x050800 *2; s8 "LONGVARI";
983 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_A";
984 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_B";
985 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_C";
986 2; 0; 0; 0; 0x050800 *2; "CO"; i8 214; "RDINA";
987 2; 0; 0; 0; 0x050800 *2; "CO"; i8 214; "RDI_A";
988 2; 0; 0; 0; 0x050800 *2; "CO"; i8 214; "RDI_B";
989
990 dnl Machine integer info record.
991 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
992
993 dnl Machine floating-point info record.
994 7; 4; 8; 3; SYSMIS; HIGHEST; LOWEST;
995
996 dnl Long variable names.
997 7; 13; 1; COUNT (
998 "LONGVARI=LongVariableName1"; i8 9;
999 "LONGVA_A=LongVariableName2"; i8 9;
1000 "LONGVA_B=LongVariableName3"; i8 9;
1001 "LONGVA_C=LongVariableName4"; i8 9;
1002 "CO"; i8 214; "RDINA=Co"; i8 246; "rdinate_X"; i8 9;
1003 "CO"; i8 214; "RDI_A=Co"; i8 246; "rdinate_Y"; i8 9;
1004 "CO"; i8 214; "RDI_B=Co"; i8 246; "rdinate_Z";
1005 );
1006
1007 dnl Character encoding record.
1008 7; 20; 1; 12; "windows-1252";
1009
1010 dnl Dictionary termination record.
1011 999; 0;
1012 ])
1013 for variant in \
1014         "be 8ea5a72f3ae6e732371e92a7719c3951" \
1015         "le 02bcf02cf08b1e8fc80a858101ae22fc"
1016 do
1017   set $variant
1018   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1019 ])
1020   AT_DATA([sys-file.sps], [dnl
1021 GET FILE='sys-file.sav'.
1022 DISPLAY DICTIONARY.
1023 ])
1024   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1025   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1026 Variable,Description,,Position
1027 LongVariableName1,Format: F8.0,,1
1028 LongVariableName2,Format: F8.0,,2
1029 LongVariableName3,Format: F8.0,,3
1030 LongVariableName4,Format: F8.0,,4
1031 Coördinate_X,Format: F8.0,,5
1032 Coördinate_Y,Format: F8.0,,6
1033 Coördinate_Z,Format: F8.0,,7
1034 ])
1035 done
1036 AT_CLEANUP
1037
1038 AT_SETUP([very long strings])
1039 AT_KEYWORDS([sack synthetic system file positive])
1040 AT_DATA([sys-file.sack], [dnl
1041 dnl File header.
1042 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1043 2; dnl Layout code
1044 109; dnl Nominal case size
1045 0; dnl Not compressed
1046 0; dnl Not weighted 
1047 1; dnl No cases.
1048 100.0; dnl Bias.
1049 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1050 i8 0 *3;
1051
1052 dnl 256-byte string.
1053 2; 255; 0; 0; 0x01FF00 *2; "S"; i8 201; s6 "Q256";
1054 (2; -1; 0; 0; 0; 0; s8 "") * 31;
1055 2; 4; 0; 0; 0x010400 *2; "S"; i8 201; "Q256_1";
1056
1057 dnl 600-byte string.
1058 2; 255; 0; 0; 0x01FF00 *2; s8 "STR600";
1059 (2; -1; 0; 0; 0; 0; s8 "") * 31;
1060 2; 255; 0; 0; 0x01FF00 *2; s8 "STR600_1";
1061 (2; -1; 0; 0; 0; 0; s8 "") * 31;
1062 2; 96; 0; 0; 0x016000 *2; s8 "STR600_2";
1063 (2; -1; 0; 0; 0; 0; s8 "") * 11;
1064
1065 dnl Machine integer info record.
1066 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
1067
1068 dnl Very long string record.
1069 7; 14; 1; COUNT (
1070 "S"; i8 201; "Q256=00256"; i8 0; i8 9;
1071 "STR600=00600"; i8 0; i8 9;
1072 );
1073
1074 dnl Character encoding record.
1075 7; 20; 1; 12; "windows-1252";
1076
1077 dnl Dictionary termination record.
1078 999; 0;
1079
1080 dnl Data.
1081 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#" * 4;
1082 "abcdefgh";
1083 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#" * 9;
1084 "abcdefghijklmnopqrstuvwxyzABCDEF";
1085 ])
1086 for variant in \
1087         "be 844a4704f669dfe292482e587d690133" \
1088         "le b76025f602bdff6a42c1e0795a8b62ff"
1089 do
1090   set $variant
1091   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1092 ])
1093   AT_DATA([sys-file.sps], [dnl
1094 GET FILE='sys-file.sav'.
1095 DISPLAY DICTIONARY.
1096 LIST.
1097 ])
1098   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1099   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1100 Variable,Description,,Position
1101 séq256,Format: A256,,1
1102 str600,Format: A600,,2
1103
1104 Table: Data List
1105 séq256,str600
1106 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@a,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#abcdefghijklmnopqrstuvwxyz
1107 ])
1108 done
1109 AT_CLEANUP
1110
1111 AT_SETUP([data file and variable attributes])
1112 AT_KEYWORDS([sack synthetic system file positive])
1113 AT_DATA([sys-file.sack], [dnl
1114 dnl File header.
1115 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1116 2; dnl Layout code
1117 2; dnl Nominal case size
1118 0; dnl Not compressed
1119 0; dnl Not weighted 
1120 0; dnl 1 case.
1121 100.0; dnl Bias.
1122 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1123 i8 0 *3;
1124
1125 dnl Variables.
1126 2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
1127 2; 0; 0; 0; 0x050800 *2; s8 "SECONDVA";
1128
1129 dnl Machine integer info record.
1130 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
1131
1132 dnl Long variable names.
1133 7; 13; 1; COUNT (
1134 "FIRSTVAR=FirstVariable"; i8 9;
1135 "SECONDVA=S"; i8 233; "condVariable"; i8 9;
1136 );
1137
1138 dnl Data file attributes record.
1139 7; 17; 1; COUNT (
1140 "Attr1('Value1'"; i8 10; "''d"; i8 233; "claration''"; i8 10; ")";
1141 "S"; i8 233; "condAttr('123'"; i8 10; "'456'"; i8 10; ")";
1142 );
1143
1144 dnl Variable attributes record.
1145 7; 18; 1; COUNT (
1146 "FirstVariable:";
1147   "ad"; i8 232; "le('23'"; i8 10; "'34'"; i8 10; ")";
1148   "bert('123'"; i8 10; ")";
1149   "$@Role('1'"; i8 10; ")";
1150 "/S"; i8 233; "condVariable:";
1151   "xyzzy('quux'"; i8 10; ")";
1152 );
1153
1154
1155 dnl Character encoding record.
1156 7; 20; 1; 12; "windows-1252";
1157
1158 dnl Dictionary termination record.
1159 999; 0;
1160 ])
1161 for variant in \
1162         "be 7fff0c04f697adf45f55d8be4aaa8712" \
1163         "le 7331339199344aa58bc60d7d05d538a7"
1164 do
1165   set $variant
1166   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1167 ])
1168   AT_DATA([sys-file.sps], [dnl
1169 GET FILE='sys-file.sav'.
1170 DISPLAY @ATTRIBUTES.
1171 ])
1172   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1173   AT_CHECK([cat pspp.csv], [0],
1174 [[Variable,Description,
1175 FirstVariable,Custom attributes:,
1176 ,$@Role,1
1177 ,adèle[1],23
1178 ,adèle[2],34
1179 ,bert,123
1180 SécondVariable,Custom attributes:,
1181 ,xyzzy,quux
1182
1183 Table: Custom data file attributes.
1184 Attribute,Value
1185 Attr1[1],Value1
1186 Attr1[2],'déclaration'
1187 SécondAttr[1],123
1188 SécondAttr[2],456
1189 ]])
1190   AT_DATA([sys-file.sps], [dnl
1191 GET FILE='sys-file.sav'.
1192 DISPLAY DICTIONARY.
1193 ])
1194   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1195   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0],
1196 [[Variable,Description,,Position
1197 FirstVariable,Format: F8.0,,1
1198 ,Role: Output,,
1199 ,Custom attributes:,,
1200 ,adèle[1],23,
1201 ,adèle[2],34,
1202 ,bert,123,
1203 SécondVariable,Format: F8.0,,2
1204 ,Custom attributes:,,
1205 ,xyzzy,quux,
1206
1207 Table: Custom data file attributes.
1208 Attribute,Value
1209 Attr1[1],Value1
1210 Attr1[2],'déclaration'
1211 SécondAttr[1],123
1212 SécondAttr[2],456
1213 ]])
1214 done
1215 AT_CLEANUP
1216
1217 AT_SETUP([variable roles])
1218 AT_KEYWORDS([sack synthetic system file positive])
1219 AT_DATA([sys-file.sack], [dnl
1220 dnl File header.
1221 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1222 2; dnl Layout code
1223 7; dnl Nominal case size
1224 0; dnl Not compressed
1225 0; dnl Not weighted
1226 0; dnl 1 case.
1227 100.0; dnl Bias.
1228 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1229 i8 0 *3;
1230
1231 dnl Variables.
1232 2; 0; 0; 0; 0x050800 *2; s8 "I";
1233 2; 0; 0; 0; 0x050800 *2; s8 "O";
1234 2; 0; 0; 0; 0x050800 *2; s8 "B";
1235 2; 0; 0; 0; 0x050800 *2; s8 "N";
1236 2; 0; 0; 0; 0x050800 *2; s8 "P";
1237 2; 0; 0; 0; 0x050800 *2; s8 "S";
1238 2; 0; 0; 0; 0x050800 *2; s8 "X";
1239
1240 dnl Machine integer info record.
1241 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
1242
1243 dnl Variable attributes record.
1244 7; 18; 1; COUNT (
1245 "I:$@Role('0'"; i8 10; ")";
1246 "/O:$@Role('1'"; i8 10; ")";
1247 "/B:$@Role('2'"; i8 10; ")";
1248 "/N:$@Role('3'"; i8 10; ")";
1249 "/P:$@Role('4'"; i8 10; ")";
1250 "/S:$@Role('5'"; i8 10; ")";
1251 "/X:$@Role('6'"; i8 10; ")";
1252 );
1253
1254 dnl Character encoding record.
1255 7; 20; 1; 12; "windows-1252";
1256
1257 dnl Dictionary termination record.
1258 999; 0;
1259 ])
1260 for variant in \
1261         "be b08b39cd005682f680d132d272f5158d" \
1262         "le 176e4ac91197f5cb8732258033cfabdc"
1263 do
1264   set $variant
1265   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1266 ])
1267   AT_DATA([sys-file.sps], [dnl
1268 GET FILE='sys-file.sav'.
1269 DISPLAY DICTIONARY.
1270 ])
1271   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], [dnl
1272 warning: `sys-file.sav': Invalid role for variable x.
1273 ])
1274   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1275 warning: `sys-file.sav': Invalid role for variable x.
1276
1277 Variable,Description,,Position
1278 i,Format: F8.0,,1
1279 o,Format: F8.0,,2
1280 ,Role: Output,,
1281 b,Format: F8.0,,3
1282 ,Role: Both,,
1283 n,Format: F8.0,,4
1284 ,Role: None,,
1285 p,Format: F8.0,,5
1286 ,Role: Partition,,
1287 s,Format: F8.0,,6
1288 ,Role: Split,,
1289 x,Format: F8.0,,7
1290 ])
1291 done
1292 AT_CLEANUP
1293
1294 AT_SETUP([compressed data])
1295 AT_KEYWORDS([sack synthetic system file positive])
1296 AT_DATA([sys-file.sack], [dnl
1297 dnl File header.
1298 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1299 2; dnl Layout code
1300 6; dnl Nominal case size
1301 1; dnl Simple compression
1302 0; dnl Not weighted 
1303 -1; dnl Unspecified number of cases.
1304 100.0; dnl Bias.
1305 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1306 i8 0 *3;
1307
1308 dnl Numeric variables.
1309 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1310 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
1311
1312 dnl String variable.
1313 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
1314 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
1315 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
1316 2; -1; 0; 0; 0; 0; s8 "";
1317
1318 dnl Dictionary termination record.
1319 999; 0;
1320
1321 dnl Compressed data.
1322 i8 1 100 254 253 254 253; i8 255 251; "abcdefgh"; s8 "0123";
1323 i8 253 253 253 254; i8 101 102 253 253; s8 "jklm"; s8 "nopqrstu";
1324 s8 "vwxyzABC"; s8 "DEFG"; s8 "HIJKLMNO";
1325 i8 254 253 252 0 0 0 0 0; s8 "PQRSTUVW";
1326
1327 ])
1328 for variant in \
1329         "be c0670e436b068f45710b98f6f7d01dc5" \
1330         "le 2e43a7f8861df4e714a192dfb3c8b2f4"
1331 do
1332   set $variant
1333   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1334 ])
1335   AT_DATA([sys-file.sps], [dnl
1336 GET FILE='sys-file.sav'.
1337 DISPLAY DICTIONARY.
1338 LIST.
1339 ])
1340   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1341   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1342 Variable,Description,,Position
1343 num1,Format: F8.0,,1
1344 num2,Format: F8.0,,2
1345 str4,Format: A4,,3
1346 str8,Format: A8,,4
1347 str15,Format: A15,,5
1348
1349 Table: Data List
1350 num1,num2,str4,str8,str15
1351 -99,0,,abcdefgh,0123   @&t@
1352 .,151,jklm,nopqrstu,vwxyzABC       @&t@
1353 1,2,DEFG,HIJKLMNO,PQRSTUV
1354 ])
1355 done
1356 AT_CLEANUP
1357
1358 AT_SETUP([compressed data, zero bias])
1359 AT_KEYWORDS([sack synthetic system file positive])
1360 AT_DATA([sys-file.sack], [dnl
1361 dnl File header.
1362 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1363 2; dnl Layout code
1364 6; dnl Nominal case size
1365 1; dnl Simple compression.
1366 0; dnl Not weighted 
1367 -1; dnl Unspecified number of cases.
1368 0.0; dnl Bias.
1369 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1370 i8 0 *3;
1371
1372 dnl Numeric variables.
1373 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1374 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
1375
1376 dnl String variable.
1377 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
1378 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
1379 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
1380 2; -1; 0; 0; 0; 0; s8 "";
1381
1382 dnl Dictionary termination record.
1383 999; 0;
1384
1385 dnl Compressed data.
1386 i8 1 100 254 253 254 253; i8 255 251; "abcdefgh"; s8 "0123";
1387 i8 253 253 253 254; i8 101 102 253 253; s8 "jklm"; s8 "nopqrstu";
1388 s8 "vwxyzABC"; s8 "DEFG"; s8 "HIJKLMNO";
1389 i8 254 253 252 0 0 0 0 0; s8 "PQRSTUVW";
1390
1391 ])
1392 for variant in \
1393         "be 2f0d25704ee497ae833213a3e4ff5e8b" \
1394         "le 49f68a9e1ba02a2f7e9166686a0db9d9"
1395 do
1396   set $variant
1397   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1398 ])
1399   AT_DATA([sys-file.sps], [dnl
1400 GET FILE='sys-file.sav'.
1401 DISPLAY DICTIONARY.
1402 LIST.
1403 ])
1404   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0])
1405   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1406 Variable,Description,,Position
1407 num1,Format: F8.0,,1
1408 num2,Format: F8.0,,2
1409 str4,Format: A4,,3
1410 str8,Format: A8,,4
1411 str15,Format: A15,,5
1412
1413 Table: Data List
1414 num1,num2,str4,str8,str15
1415 1,100,,abcdefgh,0123   @&t@
1416 .,251,jklm,nopqrstu,vwxyzABC       @&t@
1417 101,102,DEFG,HIJKLMNO,PQRSTUV
1418 ])
1419 done
1420 AT_CLEANUP
1421
1422 AT_SETUP([compressed data, other bias])
1423 AT_KEYWORDS([sack synthetic system file positive])
1424 AT_DATA([sys-file.sack], [dnl
1425 dnl File header.
1426 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1427 2; dnl Layout code
1428 6; dnl Nominal case size
1429 1; dnl Simple compression.
1430 0; dnl Not weighted 
1431 -1; dnl Unspecified number of cases.
1432 50.0; dnl Bias.
1433 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1434 i8 0 *3;
1435
1436 dnl Numeric variables.
1437 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1438 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
1439
1440 dnl String variable.
1441 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
1442 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
1443 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
1444 2; -1; 0; 0; 0; 0; s8 "";
1445
1446 dnl Dictionary termination record.
1447 999; 0;
1448
1449 dnl Compressed data.
1450 i8 1 100 254 253 254 253; i8 255 251; "abcdefgh"; s8 "0123";
1451 i8 253 253 253 254; i8 101 102 253 253; s8 "jklm"; s8 "nopqrstu";
1452 s8 "vwxyzABC"; s8 "DEFG"; s8 "HIJKLMNO";
1453 i8 254 253 252 0 0 0 0 0; s8 "PQRSTUVW";
1454
1455 ])
1456 for variant in \
1457         "be 668b85e3dee0797883e9933a096b8c18" \
1458         "le 5e7a9c4e88cd2dbc2322943da663868e"
1459 do
1460   set $variant
1461   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1462 ])
1463   AT_DATA([sys-file.sps], [dnl
1464 GET FILE='sys-file.sav'.
1465 DISPLAY DICTIONARY.
1466 LIST.
1467 ])
1468   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], 
1469     [warning: `sys-file.sav' near offset 0x54: Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format.
1470 ])
1471   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1472 "warning: `sys-file.sav' near offset 0x54: Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format."
1473
1474 Variable,Description,,Position
1475 num1,Format: F8.0,,1
1476 num2,Format: F8.0,,2
1477 str4,Format: A4,,3
1478 str8,Format: A8,,4
1479 str15,Format: A15,,5
1480
1481 Table: Data List
1482 num1,num2,str4,str8,str15
1483 -49,50,,abcdefgh,0123   @&t@
1484 .,201,jklm,nopqrstu,vwxyzABC       @&t@
1485 51,52,DEFG,HIJKLMNO,PQRSTUV
1486 ])
1487 done
1488 AT_CLEANUP
1489
1490 m4_divert_push([PREPARE_TESTS])
1491 zcompressed_sack () {
1492     cat <<'EOF'
1493 dnl File header.
1494 "$FL3"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1495 2; dnl Layout code
1496 6; dnl Nominal case size
1497 2; dnl zlib compressed
1498 0; dnl Not weighted
1499 -1; dnl Unspecified number of cases.
1500 100.0; dnl Bias.
1501 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
1502 i8 0 *3;
1503
1504 dnl Numeric variables.
1505 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1506 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
1507
1508 dnl String variable.
1509 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
1510 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
1511 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
1512 2; -1; 0; 0; 0; 0; s8 "";
1513
1514 dnl Dictionary termination record.
1515 999; 0;
1516
1517 dnl ZLIB data header.
1518 i64 0x178;    # zheader_ofs
1519 i64 0x1e9;    # ztrailer_ofs
1520 i64 48;       # ztrailer_len
1521
1522 dnl ZLIB data block.
1523 dnl
1524 dnl This is the compressed form of:
1525 dnl
1526 dnl 01 64 fe fd fe fd ff fb  61 62 63 64 65 66 67 68  |.d......abcdefgh|
1527 dnl 30 31 32 33 20 20 20 20  fd fd fd fe 65 66 fd fd  |0123    ....ef..|
1528 dnl 6a 6b 6c 6d 20 20 20 20  6e 6f 70 71 72 73 74 75  |jklm    nopqrstu|
1529 dnl 76 77 78 79 7a 41 42 43  44 45 46 47 20 20 20 20  |vwxyzABCDEFG    |
1530 dnl 48 49 4a 4b 4c 4d 4e 4f  fe fd fc 00 00 00 00 00  |HIJKLMNO........|
1531 dnl 50 51 52 53 54 55 56 57                           |PQRSTUVW|
1532 dnl
1533 dnl which is the data from the "compressed data" test.
1534 hex "78 01 63 4c f9 f7 f7 df  df ff bf 13 93 92 53 52";
1535 hex "d3 d2 33 0c 0c 8d 8c 15  80 e0 ef df bf ff 52 d3";
1536 hex "fe fe cd ca ce c9 05 f1  f3 f2 0b 0a 8b 8a 4b 4a";
1537 hex "cb ca 2b 2a ab 1c 9d 9c  5d 5c dd dc 41 e2 1e 9e";
1538 hex "5e de 3e be 7e fe ff fe  fe 61 00 81 80 c0 a0 e0";
1539 hex "90 d0 b0 70 00 0f 3f 23  d7";
1540
1541 dnl ZLIB data trailer fixed header:
1542 i64 -100;     # ztrailer_bias
1543 i64 0;        # ztrailer_zero
1544 0x3ff000;     # block_size
1545 1;            # n_blocks
1546
1547 dnl ZLIB block descriptor:
1548 i64 0x178;    # uncompressed_ofs
1549 i64 0x190;    # compressed_ofs
1550 88;           # uncompressed_size
1551 89;           # compressed_size
1552 EOF
1553 }
1554 m4_divert_pop([PREPARE_TESTS])
1555
1556 AT_SETUP([zcompressed data])
1557 AT_KEYWORDS([sack synthetic system file positive zlib])
1558 zcompressed_sack > sys-file.sack
1559 for variant in \
1560         "be 2d706c3ca0cc9be7f1721f09d0d42179" \
1561         "le 3f362f338d65b0a836b3c752cc3fc5bc"
1562 do
1563   set $variant
1564   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1565 ])
1566   AT_DATA([sys-file.sps], [dnl
1567 GET FILE='sys-file.sav'.
1568 DISPLAY DICTIONARY.
1569 LIST.
1570 ])
1571   AT_CHECK([pspp -o pspp.csv sys-file.sps])
1572   AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
1573 Variable,Description,,Position
1574 num1,Format: F8.0,,1
1575 num2,Format: F8.0,,2
1576 str4,Format: A4,,3
1577 str8,Format: A8,,4
1578 str15,Format: A15,,5
1579
1580 Table: Data List
1581 num1,num2,str4,str8,str15
1582 -99,0,,abcdefgh,0123   @&t@
1583 .,151,jklm,nopqrstu,vwxyzABC       @&t@
1584 1,2,DEFG,HIJKLMNO,PQRSTUV
1585 ])
1586 done
1587 AT_CLEANUP
1588 \f
1589 AT_BANNER([system file reader - negative])
1590
1591 AT_SETUP([misplaced type 4 record])
1592 AT_KEYWORDS([sack synthetic system file negative])
1593 AT_DATA([sys-file.sack], [dnl
1594 dnl File header.
1595 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1596 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1597
1598 dnl Numeric variable.
1599 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1600
1601 dnl Type 4 record.
1602 >>4<<;
1603 ])
1604 for variant in \
1605         "be 6e0bb549fff1fd1af333d51b8a6e0f43" \
1606         "le 7b62734edcee2a1689c463f2866d11b8"
1607 do
1608   set $variant
1609   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1610 ])
1611   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1612 ])
1613   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1614    [error: `sys-file.sav' near offset 0xd4: Misplaced type 4 record.
1615 ])
1616 done
1617 AT_CLEANUP
1618
1619 AT_SETUP([bad record type])
1620 AT_KEYWORDS([sack synthetic system file negative])
1621 AT_DATA([sys-file.sack], [dnl
1622 dnl File header.
1623 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1624 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1625
1626 dnl Numeric variable.
1627 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1628
1629 dnl Type 8 record (not a valid type).
1630 >>8<<;
1631 ])
1632 for variant in \
1633         "be dc8f078c23046ee7db74ec1003178a11" \
1634         "le dc7f111642f0629f4370630fd092eee3"
1635 do
1636   set $variant
1637   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1638 ])
1639   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1640 ])
1641   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1642    [error: `sys-file.sav' near offset 0xd4: Unrecognized record type 8.
1643 ])
1644 done
1645 AT_CLEANUP
1646
1647 AT_SETUP([wrong number of variable positions])
1648 AT_KEYWORDS([sack synthetic system file negative])
1649 AT_DATA([sys-file.sack], [dnl
1650 dnl File header.
1651 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1652 2; >>2<<; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1653
1654 dnl Numeric variable.
1655 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1656
1657 dnl End of dictionary.
1658 999; 0;
1659 ])
1660 for variant in \
1661         "be c57e91aa426f61813c3ad91ea3a56dda" \
1662         "le 5d1a6c114b135b219473c8ad5bb44bda"
1663 do
1664   set $variant
1665   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1666 ])
1667   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1668 ])
1669   AT_CHECK([pspp -O format=csv sys-file.sps], [0], 
1670    [warning: `sys-file.sav': File header claims 2 variable positions but 1 were read from file.
1671 ])
1672 done
1673 AT_CLEANUP
1674
1675 AT_SETUP([variable name may not begin with `#'])
1676 AT_KEYWORDS([sack synthetic system file negative])
1677 AT_DATA([sys-file.sack], [dnl
1678 dnl File header.
1679 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1680 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1681
1682 dnl Numeric variable.
1683 2; 0; 0; 0; 0x050800 *2; s8 >>"$UM1"<<;
1684
1685 dnl End of dictionary.
1686 999; 0;
1687 ])
1688 for variant in \
1689         "be decb7ac6defa1ab3cc7a386d1843c1ae" \
1690         "le 5279b6275633bac55d167faebccfdb14"
1691 do
1692   set $variant
1693   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1694 ])
1695   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1696 ])
1697   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1698    [error: `sys-file.sav' near offset 0xb4: Invalid variable name `$UM1'.
1699 ])
1700 done
1701 AT_CLEANUP
1702
1703 AT_SETUP([variable name may not be reserved word])
1704 AT_KEYWORDS([sack synthetic system file negative])
1705 AT_DATA([sys-file.sack], [dnl
1706 dnl File header.
1707 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1708 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1709
1710 dnl Numeric variable.
1711 2; 0; 0; 0; 0x050800 *2; s8 >>"TO"<<;
1712
1713 dnl End of dictionary.
1714 999; 0;
1715 ])
1716 for variant in \
1717         "be 57e6ad709668bbf538e2efee4af49916" \
1718         "le 523f14b611efa380bbadf7a16ea43fed"
1719 do
1720   set $variant
1721   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1722 ])
1723   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1724 ])
1725   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1726    [error: `sys-file.sav' near offset 0xb4: Invalid variable name `TO'.
1727 ])
1728 done
1729 AT_CLEANUP
1730
1731 AT_SETUP([variable width must be between 0 and 255])
1732 AT_KEYWORDS([sack synthetic system file negative])
1733 AT_DATA([sys-file.sack], [dnl
1734 dnl File header.
1735 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1736 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1737
1738 dnl String variable with invalid width 256.
1739 2; 256; 0; 0; 0x050800 *2; s8 "VAR1";
1740
1741 dnl End of dictionary.
1742 999; 0;
1743 ])
1744 for variant in \
1745         "be 170bb18589ba264a0ed2d57b41fe77e1" \
1746         "le 9528b4b5936ef5630bbd3bdd60a123c3"
1747 do
1748   set $variant
1749   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1750 ])
1751   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1752 ])
1753   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1754    [error: `sys-file.sav' near offset 0xb4: Bad width 256 for variable VAR1.
1755 ])
1756 done
1757 AT_CLEANUP
1758
1759 dnl SPSS-generated system file can contain duplicate variable names
1760 dnl (see bug #41475).
1761 AT_SETUP([duplicate variable name])
1762 AT_KEYWORDS([sack synthetic system file negative])
1763 AT_DATA([sys-file.sack], [dnl
1764 dnl File header.
1765 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1766 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1767
1768 dnl Numeric variables.
1769 2; 0; 0; 0; 0x050800 *2; s8 "VAR1";
1770 2; 0; 0; 0; 0x050800 *2; s8 "VAR1";
1771
1772 dnl End of dictionary.
1773 999; 0;
1774 ])
1775 for variant in \
1776         "be d8f5fd768ab1d641f9330a4840c71343" \
1777         "le f01e123d384cdaa7c2f7fc4791325ebf"
1778 do
1779   set $variant
1780   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1781 ])
1782   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1783 DISPLAY DICTIONARY.
1784 ])
1785   AT_CHECK([pspp -O format=csv sys-file.sps], [0],
1786    [warning: `sys-file.sav' near offset 0xd4: Renaming variable with duplicate name `VAR1' to `VAR001'.
1787
1788 Variable,Description,,Position
1789 var1,Format: F8.0,,1
1790 ,Measure: Scale,,
1791 ,Display Alignment: Right,,
1792 ,Display Width: 8,,
1793 var001,Format: F8.0,,2
1794 ,Measure: Scale,,
1795 ,Display Alignment: Right,,
1796 ,Display Width: 8,,
1797 ])
1798 done
1799 AT_CLEANUP
1800
1801 AT_SETUP([variable label indicator not 0 or 1])
1802 AT_KEYWORDS([sack synthetic system file negative])
1803 AT_DATA([sys-file.sack], [dnl
1804 dnl File header.
1805 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1806 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1807
1808 dnl Numeric variable.
1809 2; 0; >>2<<; 0; 0x050800 *2; s8 "VAR1";
1810
1811 dnl End of dictionary.
1812 999; 0;
1813 ])
1814 for variant in \
1815         "be 3c5ff8d8f146457a385ca92d3d23ca8a" \
1816         "le 37e9f956d321ae57b0bf7fe2384e892b"
1817 do
1818   set $variant
1819   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1820 ])
1821   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1822 ])
1823   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1824    [error: `sys-file.sav' near offset 0xb4: Variable label indicator field is not 0 or 1.
1825 ])
1826 done
1827 AT_CLEANUP
1828
1829 AT_SETUP([invalid numeric missing value indicator])
1830 AT_KEYWORDS([sack synthetic system file negative])
1831 AT_DATA([sys-file.sack], [dnl
1832 dnl File header.
1833 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1834 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1835
1836 dnl Numeric variable.
1837 2; 0; 0; >>-1<<; 0x050800 *2; s8 "VAR1";
1838
1839 dnl End of dictionary.
1840 999; 0;
1841 ])
1842 for variant in \
1843         "be d1d0d4aedf9f053452c4b1e658ade5e2" \
1844         "le df697575499fe12921185a3d23a5d61d"
1845 do
1846   set $variant
1847   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1848 ])
1849   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1850 ])
1851   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1852    ["error: `sys-file.sav' near offset 0xb4: Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
1853 ])
1854 done
1855 AT_CLEANUP
1856
1857 AT_SETUP([invalid string missing value indicator])
1858 AT_KEYWORDS([sack synthetic system file negative])
1859 AT_DATA([sys-file.sack], [dnl
1860 dnl File header.
1861 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1862 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1863
1864 dnl String variable.
1865 2; 8; 0; >>4<<; 0x010800 *2; s8 "VAR1";
1866
1867 dnl End of dictionary.
1868 999; 0;
1869 ])
1870 for variant in \
1871         "be f833033be7b102fae19159989f62faa6" \
1872         "le 9704ba828bb7a36ef0262838f6b7936b"
1873 do
1874   set $variant
1875   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1876 ])
1877   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1878 ])
1879   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1880    ["error: `sys-file.sav' near offset 0xb4: String missing value indicator field is not 0, 1, 2, or 3."
1881 ])
1882 done
1883 AT_CLEANUP
1884
1885 AT_SETUP([missing string continuation record])
1886 AT_KEYWORDS([sack synthetic system file negative])
1887 AT_DATA([sys-file.sack], [dnl
1888 dnl File header.
1889 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1890 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1891
1892 dnl String variable.
1893 2; 10; 0; 0; 0x010a00 *2; s8 "VAR1";
1894 >>2; 0; 0; 0; 0x050800 *2; s8 "VAR2";<<
1895
1896 dnl End of dictionary.
1897 999; 0;
1898 ])
1899 for variant in \
1900         "be c8f9ad2b2acd2918055e2b78c1e0b4b8" \
1901         "le 1afab4d6aee90a6fe8d2dbf229e06409"
1902 do
1903   set $variant
1904   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1905 ])
1906   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1907 ])
1908   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
1909    [error: `sys-file.sav' near offset 0xb4: Missing string continuation record.
1910 ])
1911 done
1912 AT_CLEANUP
1913
1914 AT_SETUP([invalid variable format])
1915 AT_KEYWORDS([sack synthetic system file negative])
1916 AT_DATA([sys-file.sack], [dnl
1917 dnl File header.
1918 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1919 2; 4; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
1920
1921 dnl Numeric variable, invalid format types.
1922 dnl No warning is issued for type 0 because it has been observed in real
1923 dnl system files.
1924 2; 0; 0; 0; >>0xff0800; 0<<; s8 "NUM1";
1925
1926 dnl Numeric variable, string formats.
1927 2; 0; 0; 0; >>0x010800<<; >>0x021000<<; s8 "VAR1";
1928
1929 dnl String variable, numeric formats.
1930 2; 4; 0; 0; >>0x050800<<; >>0x110a01<<; s8 "STR1";
1931
1932 dnl String variable, wrong width formats.
1933 2; 4; 0; 0; >>0x010800<<; >>0x020400<<; s8 "STR2";
1934
1935 dnl End of dictionary.
1936 999; 0;
1937 ])
1938 for variant in \
1939         "be c6ef5d8fded46443aba89adfafe15cad" \
1940         "le fccaf1764c973892f2d5adbcc2c36fb7"
1941 do
1942   set $variant
1943   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
1944 ])
1945   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
1946 ])
1947   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
1948 warning: `sys-file.sav' near offset 0xc0: Variable NUM1 with width 0 has invalid print format 0xff0800.
1949
1950 warning: `sys-file.sav' near offset 0xe0: Variable VAR1 with width 0 has invalid print format 0x10800.
1951
1952 warning: `sys-file.sav' near offset 0xe4: Variable VAR1 with width 0 has invalid write format 0x21000.
1953
1954 warning: `sys-file.sav' near offset 0x100: Variable STR1 with width 4 has invalid print format 0x50800.
1955
1956 warning: `sys-file.sav' near offset 0x104: Variable STR1 with width 4 has invalid write format 0x110a01.
1957
1958 warning: `sys-file.sav' near offset 0x120: Variable STR2 with width 4 has invalid print format 0x10800.
1959
1960 warning: `sys-file.sav' near offset 0x124: Variable STR2 with width 4 has invalid write format 0x20400.
1961 ])
1962 done
1963 AT_CLEANUP
1964
1965 AT_SETUP([invalid long string missing values])
1966 AT_KEYWORDS([sack synthetic system file negative])
1967 AT_DATA([sys-file.sack], [dnl
1968 dnl File header.
1969 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
1970 2; dnl Layout code
1971 7; dnl Nominal case size
1972 0; dnl Not compressed
1973 0; dnl Not weighted
1974 1; dnl 1 case.
1975 100.0; dnl Bias.
1976 "01 Jan 11"; "20:53:52";
1977 "PSPP synthetic test file: "; i8 244; i8 245; i8 246; i8 248; s34 "";
1978 i8 0 *3;
1979
1980 dnl One numeric variable.
1981 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
1982
1983 dnl Long string variables that will have missing values added with a
1984 dnl later record.
1985 2; 9; 0; 0; 0x010900 *2; s8 "STR1";
1986 2; -1; 0; 0; 0; 0; s8 "";
1987 2; 10; 0; 0; 0x010a00 *2; s8 "STR2";
1988 2; -1; 0; 0; 0; 0; s8 "";
1989 2; 11; 0; 0; 0x010b00 *2; s8 "STR3";
1990 2; -1; 0; 0; 0; 0; s8 "";
1991
1992 dnl Machine integer info record.
1993 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
1994
1995 dnl Machine floating-point info record.
1996 7; 4; 8; 3; SYSMIS; HIGHEST; LOWEST;
1997
1998 dnl Long string variable missing values record.
1999 7; 22; 1; COUNT (
2000 dnl Zero missing values (not allowed) for STR1 .
2001 COUNT("STR1"); i8 >>0<<;
2002
2003 dnl Four missing values (not allowed) for STR2.
2004 COUNT("STR2"); i8 4;
2005 8; "abcdefgh"; 8; "ijklmnop"; 8; "qrstuvwx"; 8; "yz012345";
2006
2007 dnl Missing values for unknown variable
2008 COUNT(>>"Nonexistent"<<); i8 1; 8; "abcdefgh";
2009
2010 dnl Missing values for numeric variable
2011 COUNT(>>"NUM1"<<); i8 1; 8; "abcdefgh";
2012
2013 dnl Too long missing value
2014 COUNT("STR3"); i8 1; >>COUNT("abcdefghijkl")<<;
2015 );
2016
2017 dnl Character encoding record.
2018 7; 20; 1; 12; "windows-1252";
2019
2020 dnl Dictionary termination record.
2021 999; 0;
2022 s8 "abcd"; s8 "efgh"; s8 "ijkl"; s8 "mnop"; s8 "qrst"; s8 "uvwx";
2023 s16 "yzABCDEFGHI"; s16 "JKLMNOPQR"; s16 "STUVWXYZ01";
2024 s16 "23456789abc"; s32 "defghijklmnopqstuvwxyzABC";
2025 ])
2026
2027 for variant in \
2028         "be 26e815cfb41eaedb435ea3c81b96215c" \
2029         "le 72d70456bd4dc88bb0a0fdb039ccdfa3"
2030 do
2031   set $variant
2032   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2033 ])
2034   AT_DATA([sys-file.sps], [dnl
2035 GET FILE='sys-file.sav'.
2036 DISPLAY DICTIONARY.
2037 ])
2038   AT_CHECK([pspp -O format=csv sys-file.sps], [0],
2039    ["warning: `sys-file.sav' near offset 0x1f8: Long string missing values record says variable STR1 has 0 missing values, but only 1 to 3 missing values are allowed."
2040
2041 "warning: `sys-file.sav' near offset 0x201: Long string missing values record says variable STR2 has 4 missing values, but only 1 to 3 missing values are allowed."
2042
2043 warning: `sys-file.sav' near offset 0x242: Ignoring long string missing value record for unknown variable Nonexistent.
2044
2045 warning: `sys-file.sav' near offset 0x257: Ignoring long string missing value record for numeric variable NUM1.
2046
2047 "warning: `sys-file.sav' near offset 0x270: Ignoring long string missing value 0 for variable str3, with width 11, that has bad value width 12."
2048
2049 Variable,Description,,Position
2050 num1,Format: F8.0,,1
2051 ,Measure: Scale,,
2052 ,Display Alignment: Right,,
2053 ,Display Width: 8,,
2054 str1,Format: A9,,2
2055 ,Measure: Nominal,,
2056 ,Display Alignment: Left,,
2057 ,Display Width: 9,,
2058 str2,Format: A10,,3
2059 ,Measure: Nominal,,
2060 ,Display Alignment: Left,,
2061 ,Display Width: 10,,
2062 ,"Missing Values: ""abcdefgh""; ""ijklmnop""; ""qrstuvwx""",,
2063 str3,Format: A11,,4
2064 ,Measure: Nominal,,
2065 ,Display Alignment: Left,,
2066 ,Display Width: 11,,
2067 ])
2068 done
2069 AT_CLEANUP
2070
2071 AT_SETUP([weighting variable must be numeric])
2072 AT_KEYWORDS([sack synthetic system file negative])
2073 AT_DATA([sys-file.sack], [dnl
2074 dnl File header.
2075 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2076 2; 2; 1; >>2<<; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2077
2078 dnl Numeric variable.
2079 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2080
2081 dnl String variable.
2082 2; 4; 0; 0; 0x010400 *2; s8 "STR1";
2083
2084 dnl End of dictionary.
2085 999; 0;
2086 ])
2087 for variant in \
2088         "be 82d30105e46c4896c24f9dcec26c4749" \
2089         "le 32e235119be70050eb78bf4186a5a046"
2090 do
2091   set $variant
2092   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2093 ])
2094   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2095 DISPLAY DICTIONARY.
2096 ])
2097   AT_CHECK([pspp -O format=csv sys-file.sps], [0],
2098    [warning: `sys-file.sav': Ignoring string variable `STR1' set as weighting variable.
2099
2100 Variable,Description,,Position
2101 num1,Format: F8.0,,1
2102 ,Measure: Scale,,
2103 ,Display Alignment: Right,,
2104 ,Display Width: 8,,
2105 str1,Format: A4,,2
2106 ,Measure: Nominal,,
2107 ,Display Alignment: Left,,
2108 ,Display Width: 4,,
2109 ])
2110 done
2111 AT_CLEANUP
2112
2113 AT_SETUP([bad weighting variable index])
2114 AT_KEYWORDS([sack synthetic system file negative])
2115 AT_DATA([sys-file.sack], [dnl
2116 dnl File header.
2117 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2118 2; 2; 1; >>3<<; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2119
2120 dnl Numeric variable.
2121 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2122
2123 dnl String variable.
2124 2; 4; 0; 0; 0x010400 *2; s8 "STR1";
2125
2126 dnl End of dictionary.
2127 999; 0;
2128 ])
2129 for variant in \
2130         "be cd9af924ff20bc75834aa2c696254c97" \
2131         "le cbe0f2f514f5e95f27644d0b4314bc78"
2132 do
2133   set $variant
2134   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2135 ])
2136   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2137 ])
2138   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
2139    [error: `sys-file.sav' near offset 0x4c: Variable index 3 not in valid range 1...2.
2140 ])
2141 done
2142 AT_CLEANUP
2143
2144 AT_SETUP([variable index is long string contination])
2145 AT_KEYWORDS([sack synthetic system file negative])
2146 AT_DATA([sys-file.sack], [dnl
2147 dnl File header.
2148 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2149 2; 3; 1; >>3<<; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2150
2151 dnl Numeric variable.
2152 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2153
2154 dnl Long string variable.
2155 2; 9; 0; 0; 0x010900 *2; s8 "STR1";
2156 (2; -1; 0; 0; 0; 0; s8 "");
2157
2158 dnl End of dictionary.
2159 999; 0;
2160 ])
2161 for variant in \
2162         "be e47d2d0e65846a9b534e004f0ae65083" \
2163         "le e5e6e00f34c4697c7bee21f15f86c7e3"
2164 do
2165   set $variant
2166   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2167 ])
2168   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2169 ])
2170   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
2171    [error: `sys-file.sav' near offset 0x4c: Variable index 3 refers to long string continuation.
2172 ])
2173 done
2174 AT_CLEANUP
2175
2176 AT_SETUP([multiple documents records])
2177 AT_KEYWORDS([sack synthetic system file negative])
2178 AT_DATA([sys-file.sack], [dnl
2179 dnl File header.
2180 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2181 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2182
2183 dnl Numeric variable, no label or missing values.
2184 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2185
2186 dnl Two document records.
2187 (6; 1; s80 "One line of documents") >>* 2<<;
2188
2189 dnl Dictionary termination record.
2190 999; 0;
2191
2192 dnl Data.
2193 1.0;
2194 ])
2195 for variant in \
2196         "be 18aa3348a216ed494efe28285b348fa8" \
2197         "le 19b21522bcef1dcc60af328f923f307e"
2198 do
2199   set $variant
2200   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2201 ])
2202   AT_DATA([sys-file.sps], [dnl
2203 GET FILE='sys-file.sav'.
2204 ])
2205   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2206 error: `sys-file.sav' near offset 0x12c: Duplicate type 6 (document) record.
2207 ])
2208 done
2209 AT_CLEANUP
2210
2211
2212 AT_SETUP([empty document record])
2213 AT_KEYWORDS([sack synthetic system file negative])
2214 AT_DATA([sys-file.sack], [dnl
2215 dnl File header.
2216 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2217 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2218
2219 dnl Numeric variable, no label or missing values.
2220 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2221
2222 dnl Empty document record.
2223 6; >>0<<;
2224
2225 dnl Dictionary termination record.
2226 999; 0;
2227
2228 dnl Data.
2229 1.0;
2230 ])
2231 for variant in \
2232         "be d8ef29c1b97f9ed226cbd938c9c49b6e" \
2233         "le f6a560c5b62e2c472429d85294f36e61"
2234 do
2235   set $variant
2236   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2237 ])
2238   AT_DATA([sys-file.sps], [dnl
2239 GET FILE='sys-file.sav'.
2240 ])
2241   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2242 error: `sys-file.sav' near offset 0xd4: Number of document lines (0) must be greater than 0 and less than 26843545.
2243 ])
2244 done
2245 AT_CLEANUP
2246
2247 AT_SETUP([extension record too large])
2248 AT_KEYWORDS([sack synthetic system file negative])
2249 AT_DATA([sys-file.sack], [dnl
2250 dnl File header.
2251 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2252 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2253
2254 dnl Numeric variable, no label or missing values.
2255 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2256
2257 dnl Too-large extension record.
2258 7; 3; >>0xfffff000 * 2<<;
2259 ])
2260 for variant in \
2261         "be 5a6679dc41ac349b0b73fc430937c05c" \
2262         "le d4769c7f650cfbf160e0386d0d33be04"
2263 do
2264   set $variant
2265   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2266 ])
2267   AT_DATA([sys-file.sps], [dnl
2268 GET FILE='sys-file.sav'.
2269 ])
2270   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2271 error: `sys-file.sav' near offset 0xd8: Record type 7 subtype 3 too large.
2272 ])
2273 done
2274 AT_CLEANUP
2275
2276 AT_SETUP([unknown extension record])
2277 AT_KEYWORDS([sack synthetic system file negative])
2278 AT_DATA([sys-file.sack], [dnl
2279 dnl File header.
2280 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2281 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2282
2283 dnl Numeric variable, no label or missing values.
2284 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2285
2286 dnl Unknown extension record type.
2287 7; 30; 1; 1; i8 0;
2288
2289 dnl End of dictionary.
2290 999; 0;
2291 ])
2292 for variant in \
2293         "be ac8395e27677408189bcb8655e56cc0e" \
2294         "le e308bfcd51f1e3c28d7379c29271f9d6"
2295 do
2296   set $variant
2297   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2298 ])
2299   AT_DATA([sys-file.sps], [dnl
2300 GET FILE='sys-file.sav'.
2301 ])
2302   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2303 "warning: `sys-file.sav' near offset 0xd8: Unrecognized record type 7, subtype 30.  Please send a copy of this file, and the syntax which created it to bug-gnu-pspp@gnu.org."
2304 ])
2305 done
2306 AT_CLEANUP
2307
2308 AT_SETUP([bad machine integer info size])
2309 AT_KEYWORDS([sack synthetic system file negative])
2310 AT_DATA([sys-file.sack], [dnl
2311 dnl File header.
2312 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2313 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2314
2315 dnl Numeric variable, no label or missing values.
2316 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2317
2318 dnl Machine integer info record.
2319 7; 3; 4; >>9<<; 1; 2; 3; -1; 1; 1; ENDIAN; 1252; >>1234<<;
2320
2321 dnl End of dictionary.
2322 999; 0;
2323 ])
2324 for variant in \
2325         "be 21ec84826886b0a266d1360f8279d769" \
2326         "le 15dcba7b2b89b7d8a21ebcc872f515af"
2327 do
2328   set $variant
2329   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2330   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2331 ])
2332   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2333 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 3 has bad count 9 (expected 8)."
2334 ])
2335 done
2336 AT_CLEANUP
2337
2338 AT_SETUP([bad machine integer info float format])
2339 AT_KEYWORDS([sack synthetic system file negative])
2340 AT_DATA([sys-file.sack], [dnl
2341 dnl File header.
2342 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2343 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2344
2345 dnl Numeric variable, no label or missing values.
2346 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2347
2348 dnl Machine integer info record.
2349 7; 3; 4; 8; 1; 2; 3; -1; >>2<<; 1; ENDIAN; 1252;
2350
2351 dnl End of dictionary.
2352 999; 0;
2353 ])
2354 for variant in \
2355         "be d510ed28278649eee997fb6881a4c04f" \
2356         "le fbf1eca561a4e243b7ae844ed1677035"
2357 do
2358   set $variant
2359   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2360   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2361 ])
2362   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2363 error: `sys-file.sav' near offset 0xd8: Floating-point representation indicated by system file (2) differs from expected (1).
2364 ])
2365 done
2366 AT_CLEANUP
2367
2368 AT_SETUP([bad machine integer info endianness])
2369 AT_KEYWORDS([sack synthetic system file negative])
2370 AT_DATA([sys-file.sack], [dnl
2371 dnl File header.
2372 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2373 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2374
2375 dnl Numeric variable, no label or missing values.
2376 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2377
2378 dnl Machine integer info record.
2379 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; >>3<<; 1252;
2380
2381 dnl End of dictionary.
2382 999; 0;
2383 ])
2384 for variant in \
2385         "be 855123d16d5e1560b91d60753dad79ad 1" \
2386         "le d6626b4fa2e46a91f26c2fc609b2f1e0 2"
2387 do
2388   set $variant
2389   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2390 ])
2391   AT_DATA([sys-file.sps], [dnl
2392 GET FILE='sys-file.sav'.
2393 DISPLAY DICTIONARY.
2394 ])
2395   AT_CHECK_UNQUOTED([pspp -O format=csv sys-file.sps], [0], [dnl
2396 warning: \`sys-file.sav' near offset 0xd8: Integer format indicated by system file (3) differs from expected ($[3]).
2397
2398 Variable,Description,,Position
2399 num1,Format: F8.0,,1
2400 ,Measure: Scale,,
2401 ,Display Alignment: Right,,
2402 ,Display Width: 8,,
2403 ])
2404 done
2405 AT_CLEANUP
2406
2407
2408 AT_SETUP([bad machine floating-point info size])
2409 AT_KEYWORDS([sack synthetic system file negative])
2410 AT_DATA([sys-file.sack], [dnl
2411 dnl File header.
2412 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2413 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2414
2415 dnl Numeric variable, no label or missing values.
2416 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2417
2418 dnl Machine floating-point info record.
2419 7; 4; 8; >>4<<; SYSMIS; HIGHEST; LOWEST; 0.0;
2420
2421 dnl End of dictionary.
2422 999; 0;
2423 ])
2424 for variant in \
2425         "be 29c9a173638fbb8bb1efe1176c4d670f" \
2426         "le 5cb49eb1084e5b9cd573a54705ff86a7"
2427 do
2428   set $variant
2429   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2430   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2431 ])
2432   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2433 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 4 has bad count 4 (expected 3)."
2434 ])
2435 done
2436 AT_CLEANUP
2437
2438 AT_SETUP([wrong special floating point values])
2439 AT_KEYWORDS([sack synthetic system file negative])
2440 AT_DATA([sys-file.sack], [dnl
2441 dnl File header.
2442 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2443 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2444
2445 dnl Numeric variable, no label or missing values.
2446 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2447
2448 dnl Machine floating-point info record.
2449 7; 4; 8; 3; >>0.0<<; >>1.0<<; >>2.0<<;
2450
2451 dnl End of dictionary.
2452 999; 0;
2453 ])
2454 for variant in \
2455         "be 1e7452d9bb0a2397bf6084a25437514e" \
2456         "le f59f9a83f723cde1611869ff6d91d325"
2457 do
2458   set $variant
2459   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2460 ])
2461   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2462 ])
2463   AT_CHECK([pspp -O format=csv sys-file.sps | sed 's/ [(].*/.../'], [0], [dnl
2464 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 0...
2465
2466 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 1...
2467
2468 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 2...
2469 ])
2470 done
2471 AT_CLEANUP
2472
2473 AT_SETUP([bad mrsets name])
2474 AT_KEYWORDS([sack synthetic system file negative multiple response])
2475 AT_DATA([sys-file.sack], [dnl
2476 dnl File header.
2477 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2478 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2479
2480 dnl Numeric variable, no label or missing values.
2481 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2482
2483 dnl Multiple response sets.
2484 7; 7; 1; COUNT("a=C");
2485 7; 19; 1; COUNT("xyz=D");
2486
2487 999; 0;
2488 ])
2489 for variant in \
2490         "be 15a9bf44d0cd6186a60629b77079c5a5" \
2491         "le 161c99aca5e7a3684df096137e72ce5b"
2492 do
2493   set $variant
2494   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2495 ])
2496   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2497 ])
2498   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2499 warning: `sys-file.sav' near offset 0xd8: `a' does not begin with `$' at offset 2 in MRSETS record.
2500
2501 warning: `sys-file.sav' near offset 0xeb: `xyz' does not begin with `$' at offset 4 in MRSETS record.
2502 ])
2503 done
2504 AT_CLEANUP
2505
2506 AT_SETUP([missing space after C in mrsets])
2507 AT_KEYWORDS([sack synthetic system file negative multiple response])
2508 AT_DATA([sys-file.sack], [dnl
2509 dnl File header.
2510 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2511 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2512
2513 dnl Numeric variable, no label or missing values.
2514 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2515
2516 dnl Multiple response sets.
2517 7; 7; 1; COUNT("$a=Cx");
2518
2519 999; 0;
2520 ])
2521 for variant in \
2522         "be c5e5656ba3d74c3a967850f29ad89970" \
2523         "le 29f110509c3d6893a7d21ae2d66aad9d"
2524 do
2525   set $variant
2526   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2527 ])
2528   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2529 ])
2530   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2531 warning: `sys-file.sav' near offset 0xd8: Missing space following `C' at offset 4 in MRSETS record.
2532 ])
2533 done
2534 AT_CLEANUP
2535
2536 AT_SETUP([missing space after E in mrsets])
2537 AT_KEYWORDS([sack synthetic system file negative multiple response])
2538 AT_DATA([sys-file.sack], [dnl
2539 dnl File header.
2540 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2541 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2542
2543 dnl Numeric variable, no label or missing values.
2544 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2545
2546 dnl Multiple response sets.
2547 7; 7; 1; COUNT("$a=Ex");
2548
2549 999; 0;
2550 ])
2551 for variant in \
2552         "be a9e1dc63e2524882a5e3d2949a2da9d4" \
2553         "le ac709ca1928f65f47a8c8efdd9454b50"
2554 do
2555   set $variant
2556   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2557 ])
2558   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2559 ])
2560   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2561 warning: `sys-file.sav' near offset 0xd8: Missing space following `E' at offset 4 in MRSETS record.
2562 ])
2563 done
2564 AT_CLEANUP
2565
2566 AT_SETUP([unexpected label source in mrsets])
2567 AT_KEYWORDS([sack synthetic system file negative multiple response])
2568 AT_DATA([sys-file.sack], [dnl
2569 dnl File header.
2570 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2571 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2572
2573 dnl Numeric variable, no label or missing values.
2574 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2575
2576 dnl Multiple response sets.
2577 7; 7; 1; COUNT("$a=E 2");
2578
2579 999; 0;
2580 ])
2581 for variant in \
2582         "be 8c710e85a0a1609d0d03dec80aaf5f94" \
2583         "le 4682440b82f22d4bd2ac56afb7fa3152"
2584 do
2585   set $variant
2586   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2587 ])
2588   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2589 ])
2590   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2591 warning: `sys-file.sav' near offset 0xd8: Unexpected label source value `2' following `E' at offset 7 in MRSETS record.
2592
2593 warning: `sys-file.sav' near offset 0xd8: Expecting digit at offset 7 in MRSETS record.
2594 ])
2595 done
2596 AT_CLEANUP
2597
2598 AT_SETUP([bad type character in mrsets])
2599 AT_KEYWORDS([sack synthetic system file negative multiple response])
2600 AT_DATA([sys-file.sack], [dnl
2601 dnl File header.
2602 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2603 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2604
2605 dnl Numeric variable, no label or missing values.
2606 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2607
2608 dnl Multiple response sets.
2609 7; 7; 1; COUNT("$a=");
2610
2611 999; 0;
2612 ])
2613 for variant in \
2614         "be fc5e5200d8f56b9a5a713e4a95313a3b" \
2615         "le 578a61e8a06b20216612f566c2050879"
2616 do
2617   set $variant
2618   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2619 ])
2620   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2621 ])
2622   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2623 "warning: `sys-file.sav' near offset 0xd8: Missing `C', `D', or `E' at offset 3 in MRSETS record."
2624 ])
2625 done
2626 AT_CLEANUP
2627
2628 AT_SETUP([bad counted string length in mrsets])
2629 AT_KEYWORDS([sack synthetic system file negative multiple response])
2630 AT_DATA([sys-file.sack], [dnl
2631 dnl File header.
2632 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2633 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2634
2635 dnl Numeric variable, no label or missing values.
2636 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2637
2638 dnl Multiple response sets.
2639 7; 7; 1; COUNT("$a=Dx");
2640
2641 999; 0;
2642 ])
2643 for variant in \
2644         "be 23d0e2f65c7c5f93bbedcc0f2b260c69" \
2645         "le c3860c1d80e08842264948056e72c0db"
2646 do
2647   set $variant
2648   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2649 ])
2650   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2651 ])
2652   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2653 warning: `sys-file.sav' near offset 0xd8: Expecting digit at offset 4 in MRSETS record.
2654 ])
2655 done
2656 AT_CLEANUP
2657
2658 AT_SETUP([missing space in counted string in mrsets])
2659 AT_KEYWORDS([sack synthetic system file negative multiple response])
2660 AT_DATA([sys-file.sack], [dnl
2661 dnl File header.
2662 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2663 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2664
2665 dnl Numeric variable, no label or missing values.
2666 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2667
2668 dnl Multiple response sets.
2669 7; 7; 1; COUNT("$a=D1x");
2670
2671 999; 0;
2672 ])
2673 for variant in \
2674         "be c9ce001723763e0698878b7e43a887e8" \
2675         "le e258a1e4491d5a1d1e7d2272ef631a22"
2676 do
2677   set $variant
2678   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2679 ])
2680   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2681 ])
2682   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2683 warning: `sys-file.sav' near offset 0xd8: Expecting space at offset 5 in MRSETS record.
2684 ])
2685 done
2686 AT_CLEANUP
2687
2688 AT_SETUP([counted string too long in mrsets])
2689 AT_KEYWORDS([sack synthetic system file negative multiple response])
2690 AT_DATA([sys-file.sack], [dnl
2691 dnl File header.
2692 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2693 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2694
2695 dnl Numeric variable, no label or missing values.
2696 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2697
2698 dnl Multiple response sets.
2699 7; 7; 1; COUNT("$a=D4 abc");
2700
2701 999; 0;
2702 ])
2703 for variant in \
2704         "be 196d1266fa0e8e315769dcbe3130e3df" \
2705         "le 23df1ba7b77a26da8ce1c2cfbcaadce0"
2706 do
2707   set $variant
2708   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2709 ])
2710   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2711 ])
2712   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2713 warning: `sys-file.sav' near offset 0xd8: 4-byte string starting at offset 6 exceeds record length 9.
2714 ])
2715 done
2716 AT_CLEANUP
2717
2718 AT_SETUP([missing space after counted string in mrsets])
2719 AT_KEYWORDS([sack synthetic system file negative multiple response])
2720 AT_DATA([sys-file.sack], [dnl
2721 dnl File header.
2722 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2723 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2724
2725 dnl Numeric variable, no label or missing values.
2726 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2727
2728 dnl Multiple response sets.
2729 7; 7; 1; COUNT("$a=D3 abcx");
2730
2731 999; 0;
2732 ])
2733 for variant in \
2734         "be 86314bb0bbdfad48c10af8b8d8106d6e" \
2735         "le 2b8d05ff501ca78e51f7110ce88a2364"
2736 do
2737   set $variant
2738   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2739 ])
2740   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2741 ])
2742   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2743 warning: `sys-file.sav' near offset 0xd8: Expecting space at offset 9 following 3-byte string.
2744 ])
2745 done
2746 AT_CLEANUP
2747
2748 AT_SETUP([missing newline after variable name in mrsets])
2749 AT_KEYWORDS([sack synthetic system file negative multiple response])
2750 AT_DATA([sys-file.sack], [dnl
2751 dnl File header.
2752 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2753 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2754
2755 dnl Numeric variable, no label or missing values.
2756 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2757
2758 dnl Multiple response sets.
2759 7; 7; 1; COUNT("$a=C 0  NUM1");
2760
2761 999; 0;
2762 ])
2763 for variant in \
2764         "be cea939cf3e6a5f88cb45e8fa871c5e13" \
2765         "le 52135afec082f50f37eafacadbb2cd65"
2766 do
2767   set $variant
2768   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2769 ])
2770   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2771 ])
2772   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2773 warning: `sys-file.sav' near offset 0xd8: Missing new-line parsing variable names at offset 13 in MRSETS record.
2774
2775 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2776 ])
2777 done
2778 AT_CLEANUP
2779
2780 AT_SETUP([duplicate variable name in mrsets])
2781 AT_KEYWORDS([sack synthetic system file negative multiple response])
2782 AT_DATA([sys-file.sack], [dnl
2783 dnl File header.
2784 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2785 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2786
2787 dnl Numeric variable, no label or missing values.
2788 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2789
2790 dnl Multiple response sets.
2791 7; 7; 1; COUNT("$a=C 0  NUM1 NUM1"; i8 10);
2792
2793 999; 0;
2794 ])
2795 for variant in \
2796         "be 4b1b5fa2dc22cf0afdd35422290b0a29" \
2797         "le e4304b57976440a036f25f8dd8ac1404"
2798 do
2799   set $variant
2800   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2801 ])
2802   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2803 ])
2804   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2805 warning: `sys-file.sav' near offset 0xd8: Duplicate variable name NUM1 at offset 18 in MRSETS record.
2806
2807 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2808 ])
2809 done
2810 AT_CLEANUP
2811
2812 AT_SETUP([mixed variable types in mrsets])
2813 AT_KEYWORDS([sack synthetic system file negative multiple response])
2814 AT_DATA([sys-file.sack], [dnl
2815 dnl File header.
2816 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2817 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2818
2819 dnl Variables.
2820 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2821 2; 8; 0; 0; 0x010800 *2; s8 "STR1";
2822
2823 dnl Multiple response sets.
2824 7; 7; 1; COUNT("$a=C 0  NUM1 STR1"; i8 10);
2825
2826 999; 0;
2827 ])
2828 for variant in \
2829         "be 0f130e967e4097823f85b8711eb20727" \
2830         "le 4dc987b4303fd115f1cae9be3963acc9"
2831 do
2832   set $variant
2833   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2834 ])
2835   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2836 ])
2837   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2838 warning: `sys-file.sav' near offset 0xf8: MRSET $a contains both string and numeric variables.
2839
2840 warning: `sys-file.sav' near offset 0xf8: MRSET $a has only 1 variables.
2841 ])
2842 done
2843 AT_CLEANUP
2844
2845 AT_SETUP([missing newline after variable name in mrsets])
2846 AT_KEYWORDS([sack synthetic system file negative multiple response])
2847 AT_DATA([sys-file.sack], [dnl
2848 dnl File header.
2849 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2850 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2851
2852 dnl Numeric variable, no label or missing values.
2853 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2854
2855 dnl Multiple response sets.
2856 7; 7; 1; COUNT("$a=C 0  NUM1"; i8 10);
2857
2858 999; 0;
2859 ])
2860 for variant in \
2861         "be 3a891e0a467afb3d622629c70f329ada" \
2862         "le 432998ec08370510411af4f5207c015e"
2863 do
2864   set $variant
2865   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2866 ])
2867   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2868 ])
2869   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2870 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2871 ])
2872 done
2873 AT_CLEANUP
2874
2875 AT_SETUP([zero or one variable in mrset])
2876 AT_KEYWORDS([sack synthetic system file negative multiple response])
2877 AT_DATA([sys-file.sack], [dnl
2878 dnl File header.
2879 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2880 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2881
2882 dnl Numeric variable, no label or missing values.
2883 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2884
2885 dnl Multiple response sets.
2886 7; 7; 1; COUNT("$a=C 0  NUM1"; i8 10; "$b=C 0  "; i8 10);
2887
2888 999; 0;
2889 ])
2890 for variant in \
2891         "be d94549fece75560fe5b47f32713b63a1" \
2892         "le 63028521d460df9e998b40a75a93c330"
2893 do
2894   set $variant
2895   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2896 ])
2897   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2898 ])
2899   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2900 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2901
2902 warning: `sys-file.sav' near offset 0xd8: MRSET $b has only 0 variables.
2903 ])
2904 done
2905 AT_CLEANUP
2906
2907 AT_SETUP([wrong display parameter size])
2908 AT_KEYWORDS([sack synthetic system file negative])
2909 AT_DATA([sys-file.sack], [dnl
2910 dnl File header.
2911 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2912 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2913
2914 dnl Numeric variable, no label or missing values.
2915 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2916
2917 dnl Display parameters record.
2918 7; 11; >>8<<; 2; 1.0; 1.0;
2919
2920 dnl End of dictionary.
2921 999; 0;
2922 ])
2923 for variant in \
2924         "be 7c0f1ae47ae11e37d435c4abaceca226" \
2925         "le c29d05a1f8f15ed2201f31f8b787aaa0"
2926 do
2927   set $variant
2928   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2929 ])
2930   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2931 ])
2932   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2933 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 11 has bad size 8 (expected 4)."
2934 ])
2935 done
2936 AT_CLEANUP
2937
2938 AT_SETUP([wrong display parameter count])
2939 AT_KEYWORDS([sack synthetic system file negative])
2940 AT_DATA([sys-file.sack], [dnl
2941 dnl File header.
2942 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2943 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2944
2945 dnl Numeric variable, no label or missing values.
2946 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2947
2948 dnl Display parameters record.
2949 7; 11; 4; >>4<<; 1; 1; 2; 2;
2950
2951 dnl End of dictionary.
2952 999; 0;
2953 ])
2954 for variant in \
2955         "be 372b57e73c69b05047b60bf6c596e2a1" \
2956         "le 2a550d8c5ceae4de7ced77df66e49d0f"
2957 do
2958   set $variant
2959   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2960 ])
2961   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2962 ])
2963   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2964 warning: `sys-file.sav' near offset 0xd8: Extension 11 has bad count 4 (for 1 variables).
2965 ])
2966 done
2967 AT_CLEANUP
2968
2969 AT_SETUP([wrong display measurement level])
2970 AT_KEYWORDS([sack synthetic system file negative])
2971 AT_DATA([sys-file.sack], [dnl
2972 dnl File header.
2973 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2974 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2975
2976 dnl Numeric variable, no label or missing values.
2977 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2978
2979 dnl Display parameters record.
2980 7; 11; 4; 2; >>4<<; 0;
2981
2982 dnl End of dictionary.
2983 999; 0;
2984 ])
2985 for variant in \
2986         "be d43e7616b03743339f37292dec6c2204" \
2987         "le 821533c29a070cefdd8f07f4e1741d2a"
2988 do
2989   set $variant
2990   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2991 ])
2992   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2993 ])
2994   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2995 warning: `sys-file.sav' near offset 0xd8: Invalid variable display parameters for variable 0 (NUM1).  Default parameters substituted.
2996 ])
2997 done
2998 AT_CLEANUP
2999
3000 AT_SETUP([wrong display alignment])
3001 AT_KEYWORDS([sack synthetic system file negative])
3002 AT_DATA([sys-file.sack], [dnl
3003 dnl File header.
3004 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3005 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3006
3007 dnl Numeric variable, no label or missing values.
3008 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3009
3010 dnl Display parameters record.
3011 7; 11; 4; 2; 1; >>-1<<;
3012
3013 dnl End of dictionary.
3014 999; 0;
3015 ])
3016 for variant in \
3017         "be c54bc48b5767e2ec3a9ef31df790cb7c" \
3018         "le a4d8b14af64221abe83adb417d110e10"
3019 do
3020   set $variant
3021   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3022 ])
3023   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3024 ])
3025   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3026 warning: `sys-file.sav' near offset 0xd8: Invalid variable display parameters for variable 0 (NUM1).  Default parameters substituted.
3027 ])
3028 done
3029 AT_CLEANUP
3030
3031 AT_SETUP([bad variable name in variable/value pair])
3032 AT_KEYWORDS([sack synthetic system file negative])
3033 AT_DATA([sys-file.sack], [dnl
3034 dnl File header.
3035 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3036 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3037
3038 dnl Numeric variables.
3039 2; 0; 0; 0; 0x050800 *2; s8 "LONGVARI";
3040
3041 dnl Long variable names.
3042 7; 13; 1; COUNT (>>"xyzzy"<<);
3043
3044 dnl Dictionary termination record.
3045 999; 0;
3046 ])
3047 for variant in \
3048         "be b67b6e3c1900e5a9cc691055008f0447" \
3049         "le 26cc52e601f830f9087a0ea2bd9527df"
3050 do
3051   set $variant
3052   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3053 ])
3054   AT_DATA([sys-file.sps], [dnl
3055 GET FILE='sys-file.sav'.
3056 ])
3057   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3058 warning: `sys-file.sav' near offset 0xde: Dictionary record refers to unknown variable xyzzy.
3059 ])
3060 done
3061 AT_CLEANUP
3062
3063 AT_SETUP([duplicate long variable name])
3064 AT_KEYWORDS([sack synthetic system file negative])
3065 AT_DATA([sys-file.sack], [dnl
3066 dnl File header.
3067 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3068 2; 4; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3069
3070 dnl Numeric variables.
3071 2; 0; 0; 0; 0x050800 *2; s8 "LONGVARI";
3072 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_A";
3073 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_B";
3074 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_C";
3075
3076 dnl Long variable names.
3077 7; 13; 1; COUNT (
3078 "LONGVARI=_Invalid"; i8 9;
3079 "LONGVA_A=LongVariableName"; i8 9;
3080 "LONGVA_B=LONGVARIABLENAME"; i8 9;
3081 );
3082
3083 dnl Dictionary termination record.
3084 999; 0;
3085 ])
3086 for variant in \
3087         "be 9b4b4daa00084d984efb8f889bcb727c" \
3088         "le c1b1470d5cd615106e9ae507c9948d8e"
3089 do
3090   set $variant
3091   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3092 ])
3093   AT_DATA([sys-file.sps], [dnl
3094 GET FILE='sys-file.sav'.
3095 ])
3096   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3097 warning: `sys-file.sav' near offset 0x138: Long variable mapping from LONGVARI to invalid variable name `_Invalid'.
3098
3099 warning: `sys-file.sav' near offset 0x138: Duplicate long variable name `LONGVARIABLENAME'.
3100 ])
3101 done
3102 AT_CLEANUP
3103
3104 AT_SETUP([bad very long string length])
3105 AT_KEYWORDS([sack synthetic system file negative])
3106 AT_DATA([sys-file.sack], [dnl
3107 dnl File header.
3108 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3109 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3110
3111 dnl Numeric variable.
3112 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3113
3114 dnl Very long string map.
3115 7; 14; 1; COUNT (
3116 "NUM1=00000"; i8 0; i8 9;
3117 "NUM1=00255"; i8 0; i8 9;
3118 "NUM1=00256"; i8 0; i8 9;
3119 );
3120
3121 dnl Dictionary termination record.
3122 999; 0;
3123 ])
3124 for variant in \
3125         "be 1309d8d9fb24bcf08952dce9b0f39a94" \
3126         "le 94a39de88f8034001b3e467c4cc04d0f"
3127 do
3128   set $variant
3129   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3130 ])
3131   AT_DATA([sys-file.sps], [dnl
3132 GET FILE='sys-file.sav'.
3133 ])
3134   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3135 warning: `sys-file.sav' near offset 0xd8: NUM1 listed as string of invalid length 00000 in very long string record.
3136
3137 "warning: `sys-file.sav' near offset 0xd8: NUM1 listed in very long string record with width 00255, which requires only one segment."
3138
3139 error: `sys-file.sav' near offset 0xd8: Very long string NUM1 overflows dictionary.
3140 ])
3141 done
3142 AT_CLEANUP
3143
3144 AT_SETUP([bad very long string segment width])
3145 AT_KEYWORDS([sack synthetic system file negative])
3146 AT_DATA([sys-file.sack], [dnl
3147 dnl File header.
3148 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3149 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3150
3151 dnl Variables.
3152 2; 255; 0; 0; 0x01ff00 *2; s8 "STR1";
3153 (2; -1; 0; 0; 0; 0; s8 "") * 31;
3154 2; >>9<<; 0; 0; 0x010900 *2; s8 "STR1_A";
3155 >>2; -1; 0; 0; 0; 0; s8 "";<<
3156
3157 dnl Very long string map.
3158 7; 14; 1; COUNT (
3159 "STR1=00256"; i8 0; i8 9;
3160 );
3161
3162 dnl Dictionary termination record.
3163 999; 0;
3164 ])
3165 for variant in \
3166         "be 1d09a44a46859e6eda28e053dd4b7a8b" \
3167         "le 63b9ac0b3953f3e0d5ee248ebe257794"
3168 do
3169   set $variant
3170   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3171 ])
3172   AT_DATA([sys-file.sps], [dnl
3173 GET FILE='sys-file.sav'.
3174 ])
3175   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3176 error: `sys-file.sav' near offset 0x4f8: Very long string with width 256 has segment 1 of width 9 (expected 4).
3177 ])
3178 done
3179 AT_CLEANUP
3180
3181 AT_SETUP([too many value labels])
3182 dnl Skip the test if multiplying a small number by INT32_MAX would not
3183 dnl cause an overflow in size_t.
3184 AT_SKIP_IF([test $SIZEOF_SIZE_T -gt 4])
3185 AT_KEYWORDS([sack synthetic system file negative])
3186 AT_DATA([sys-file.sack], [dnl
3187 dnl File header.
3188 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3189 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3190
3191 dnl Numeric variable.
3192 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3193 3; >>0x7fffffff<<;
3194 ])
3195 for variant in \
3196         "be 975b2668dde395ddf619977958b37412" \
3197         "le 0c14aa278cfc2a4b801f91c14321f03b"
3198 do
3199   set $variant
3200   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3201 ])
3202   AT_DATA([sys-file.sps], [dnl
3203 GET FILE='sys-file.sav'.
3204 ])
3205   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3206 error: `sys-file.sav' near offset 0xd4: Invalid number of labels 2147483647.
3207 ])
3208 done
3209 AT_CLEANUP
3210
3211 AT_SETUP([missing type 4 record])
3212 AT_KEYWORDS([sack synthetic system file negative])
3213 AT_DATA([sys-file.sack], [dnl
3214 dnl File header.
3215 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3216 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3217
3218 dnl Numeric variable.
3219 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3220
3221 dnl Value label with missing type 4 record.
3222 3; 1; 1.0; i8 3; s7 "one";
3223
3224 dnl End of dictionary.
3225 >>999; 0<<;
3226 ])
3227 for variant in \
3228         "be 5e1286ac92e3f25ff98492bc5019d608" \
3229         "le b33c12f776bbcaa43aa3bfdd4799e0c0"
3230 do
3231   set $variant
3232   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3233 ])
3234   AT_DATA([sys-file.sps], [dnl
3235 GET FILE='sys-file.sav'.
3236 ])
3237   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3238 error: `sys-file.sav' near offset 0xe8: Variable index record (type 4) does not immediately follow value label record (type 3) as it should.
3239 ])
3240 done
3241 AT_CLEANUP
3242
3243 AT_SETUP([value label with no associated variables])
3244 AT_KEYWORDS([sack synthetic system file negative])
3245 AT_DATA([sys-file.sack], [dnl
3246 dnl File header.
3247 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3248 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3249
3250 dnl Numeric variable.
3251 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3252
3253 dnl Value label with no variables.
3254 3; 1; 1.0; i8 3; s7 "one"; 4; >>0<<;
3255 ])
3256 for variant in \
3257         "be b0dcec30a936cbcad21c4f3d6fe10fcf" \
3258         "le 3b9fdfce5c8c248048232fd6eac018e3"
3259 do
3260   set $variant
3261   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3262 ])
3263   AT_DATA([sys-file.sps], [dnl
3264 GET FILE='sys-file.sav'.
3265 ])
3266   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3267 error: `sys-file.sav' near offset 0xec: Number of variables associated with a value label (0) is not between 1 and the number of variables (1).
3268 ])
3269 done
3270 AT_CLEANUP
3271
3272 AT_SETUP([type 4 record names long string variable])
3273 AT_KEYWORDS([sack synthetic system file negative])
3274 AT_DATA([sys-file.sack], [dnl
3275 dnl File header.
3276 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3277 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3278
3279 dnl Long string variable.
3280 2; 9; 0; 0; 0x010900 *2; s8 "STR1";
3281 2; -1; 0; 0; 0; 0; s8 "";
3282
3283 dnl Value label that names long string variable.
3284 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 1; >>1<<;
3285
3286 dnl End of dictionary.
3287 999; 0;
3288 ])
3289 for variant in \
3290         "be 14053a4f09de4c7c4c55281534dd66f4" \
3291         "le 8a61cc994c659fd66307d2f0fd64ce20"
3292 do
3293   set $variant
3294   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
3295   AT_DATA([sys-file.sps], [dnl
3296 GET FILE='sys-file.sav'.
3297 ])
3298   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3299 error: `sys-file.sav' near offset 0xf4: Value labels may not be added to long string variables (e.g. STR1) using records types 3 and 4.
3300 ])
3301 done
3302 AT_CLEANUP
3303
3304 AT_SETUP([variables for value label must all be same type])
3305 AT_KEYWORDS([sack synthetic system file negative])
3306 AT_DATA([sys-file.sack], [dnl
3307 dnl File header.
3308 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3309 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3310
3311 dnl Variables.
3312 2; 6; 0; 0; 0x010600 *2; s8 "STR1";
3313 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3314
3315 dnl Value label that names numeric and string variables.
3316 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 2; >>1; 2<<;
3317
3318 dnl End of dictionary.
3319 999; 0;
3320 ])
3321 for variant in \
3322         "be 7577c456726a88f52bbef63a8b47bf1a" \
3323         "le 3ba5c6af9ad0ae5cc88f9f63e726e414"
3324 do
3325   set $variant
3326   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
3327   AT_DATA([sys-file.sps], [dnl
3328 GET FILE='sys-file.sav'.
3329 ])
3330   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3331 "error: `sys-file.sav' near offset 0xf4: Variables associated with value label are not all of identical type.  Variable STR1 is string, but variable NUM1 is numeric."
3332 ])
3333 done
3334 AT_CLEANUP
3335
3336 AT_SETUP([duplicate value labels type])
3337 AT_KEYWORDS([sack synthetic system file negative])
3338 AT_DATA([sys-file.sack], [dnl
3339 dnl File header.
3340 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3341 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3342
3343 dnl Variables.
3344 2; 6; 0; 0; 0x010600 *2; s8 "STR1";
3345 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3346
3347 dnl Duplicate value labels.
3348 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 2; >>1; 1<<;
3349 3; 1; 1.0; i8 3; s7 "one"; 4; 2; >>2; 2<<;
3350
3351 dnl End of dictionary.
3352 999; 0;
3353 ])
3354 for variant in \
3355         "be ef0f5b2ebddb5a3bfcda16c93a2508f4" \
3356         "le c00e27abd9a6c06bf29a108d7220435a"
3357 do
3358   set $variant
3359   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3360 ])
3361   AT_DATA([sys-file.sps], [dnl
3362 GET FILE='sys-file.sav'.
3363 ])
3364   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3365 warning: `sys-file.sav' near offset 0xf4: Duplicate value label for `xyzzy ' on STR1.
3366
3367 warning: `sys-file.sav' near offset 0x11c: Duplicate value label for 1 on NUM1.
3368 ])
3369 done
3370 AT_CLEANUP
3371
3372 AT_SETUP([missing attribute value])
3373 AT_KEYWORDS([sack synthetic system file negative])
3374 AT_DATA([sys-file.sack], [dnl
3375 dnl File header.
3376 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3377 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3378
3379 dnl Variables.
3380 2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
3381
3382 dnl Data file attributes record.
3383 7; 17; 1; COUNT (
3384 "Attr1("
3385 );
3386
3387 dnl Variable attributes record.
3388 7; 18; 1; COUNT (
3389 "FIRSTVAR:";
3390   "fred('23'"; i8 10
3391 );
3392
3393 dnl Dictionary termination record.
3394 999; 0;
3395 ])
3396 for variant in \
3397         "be 0fc71f5e3cdb6b7f2dd73d011d4885c2" \
3398         "le e519b44715400156a2bfe648eb5cff34"
3399 do
3400   set $variant
3401   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3402 ])
3403   AT_DATA([sys-file.sps], [dnl
3404 GET FILE='sys-file.sav'.
3405 ])
3406   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3407 warning: `sys-file.sav' near offset 0xde: Error parsing attribute value Attr1[[1]].
3408
3409 warning: `sys-file.sav' near offset 0x101: Error parsing attribute value fred[[2]].
3410 ])
3411 done
3412 AT_CLEANUP
3413
3414 AT_SETUP([unquoted attribute value])
3415 AT_KEYWORDS([sack synthetic system file negative])
3416 AT_DATA([sys-file.sack], [dnl
3417 dnl File header.
3418 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3419 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3420
3421 dnl Variables.
3422 2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
3423
3424 dnl Data file attributes record.
3425 7; 17; 1; COUNT (
3426 "Attr1(value"; i8 10;
3427 ")"
3428 );
3429
3430 dnl Variable attributes record.
3431 7; 18; 1; COUNT (
3432 "FIRSTVAR:";
3433   "fred(23"; i8 10; ")"
3434 );
3435
3436 dnl Dictionary termination record.
3437 999; 0;
3438 ])
3439 for variant in \
3440         "be 33dba37c2247e63c04bb74a7b472293d" \
3441         "le 041025a9d9d9e21a7fabd90ba7341934"
3442 do
3443   set $variant
3444   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3445 ])
3446   AT_DATA([sys-file.sps], [dnl
3447 GET FILE='sys-file.sav'.
3448 ])
3449   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3450 warning: `sys-file.sav' near offset 0xe4: Attribute value Attr1[[1]] is not quoted: value.
3451
3452 warning: `sys-file.sav' near offset 0x106: Attribute value fred[[1]] is not quoted: 23.
3453 ])
3454 done
3455 AT_CLEANUP
3456
3457 AT_SETUP([bad variable name in long string value label])
3458 AT_KEYWORDS([sack synthetic system file negative])
3459 AT_DATA([sys-file.sack], [dnl
3460 dnl File header.
3461 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3462 2; 3; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3463
3464 dnl Variables.
3465 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3466 2; 14; 0; 0; 0x010e00 *2; s8 "STR14";
3467 2; -1; 0; 0; 0; 0; s8 "";
3468
3469 7; 21; 1; COUNT (
3470 dnl No variable named STR9.
3471 COUNT(>>"STR9"<<); 9;
3472 1; COUNT("RSTUVWXYZ"); COUNT("value label for `RSTUVWXYZ'");
3473
3474 dnl NUM1 is numeric.
3475 COUNT(>>"NUM1"<<); 0;
3476 1; COUNT("xyz"); COUNT("value label for 1.0");
3477
3478 dnl Wrong width for STR14.
3479 COUNT("STR14"); >>9<<;
3480 1; COUNT("RSTUVWXYZ"); COUNT("value label for `RSTUVWXYZ'");
3481
3482 dnl Wrong width for value.
3483 COUNT("STR14"); 14;
3484 1; COUNT(>>"RSTUVWXYZ"<<); COUNT("value label for `RSTUVWXYZ'");
3485
3486 dnl Duplicate value label.
3487 COUNT("STR14"); 14; 2;
3488 COUNT("abcdefghijklmn"); COUNT("value label for `abcdefghijklmn'");
3489 >>COUNT("abcdefghijklmn"); COUNT("another value label for `abcdefghijklmn'")<<;
3490 );
3491
3492 dnl Dictionary termination record.
3493 999; 0;
3494 ])
3495 for variant in \
3496         "be cf2e883dadb00e2c6404c09ea0a4e388" \
3497         "le 89c340faf0a7e4a8c834f9687684c091"
3498 do
3499   set $variant
3500   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3501 ])
3502   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3503 ])
3504   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3505 warning: `sys-file.sav' near offset 0x128: Ignoring long string value label record for unknown variable STR9.
3506
3507 warning: `sys-file.sav' near offset 0x164: Ignoring long string value label record for numeric variable NUM1.
3508
3509 warning: `sys-file.sav' near offset 0x193: Ignoring long string value label record for variable STR14 because the record's width (9) does not match the variable's width (14).
3510
3511 "warning: `sys-file.sav' near offset 0x1d4: Ignoring long string value label 0 for variable str14, with width 14, that has bad value width 9."
3512
3513 warning: `sys-file.sav' near offset 0x259: Duplicate value label for `abcdefghijklmn' on str14.
3514 ])
3515 done
3516 AT_CLEANUP
3517
3518 AT_SETUP([fewer data records than indicated by file header])
3519 AT_KEYWORDS([sack synthetic system file negative])
3520 AT_DATA([sys-file.sack], [dnl
3521 dnl File header.
3522 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3523 2; 2; 0; 0; >>5<<; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3524
3525 dnl Numeric variables.
3526 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3527 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3528
3529 dnl Data.
3530 999; 0;
3531 1.0; 2.0;
3532 3.0; 4.0;
3533 5.0; 6.0;
3534 7.0; 8.0;
3535 dnl Missing record here.
3536 ])
3537 for variant in \
3538         "be 6ee097c3934055d0c4564641636f4b5a" \
3539         "le ae03fe1b888091d6938b5a436d44ac60"
3540 do
3541   set $variant
3542   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3543 ])
3544   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3545 LIST.
3546 ])
3547   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3548    [error: Error reading case from file `sys-file.sav'.
3549
3550 Table: Data List
3551 num1,num2
3552 1,2
3553 3,4
3554 5,6
3555 7,8
3556 ])
3557 done
3558 AT_CLEANUP
3559
3560 AT_SETUP([partial data record between variables])
3561 AT_KEYWORDS([sack synthetic system file negative])
3562 AT_DATA([sys-file.sack], [dnl
3563 dnl File header.
3564 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3565 2; 2; 0; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3566
3567 dnl Numeric variables.
3568 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3569 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3570
3571 dnl Data.
3572 999; 0;
3573 1.0; 2.0;
3574 3.0;
3575 ])
3576 for variant in \
3577         "be 4bcc085d7d8f0f09c6a4ba8064ffe61c" \
3578         "le 7387fc5edd2740aff92c30ca688d6d9b"
3579 do
3580   set $variant
3581   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3582 ])
3583   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3584 LIST.
3585 ])
3586   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3587    [error: `sys-file.sav' near offset 0x110: File ends in partial case.
3588
3589 Table: Data List
3590 num1,num2
3591 1,2
3592 ])
3593 done
3594 AT_CLEANUP
3595
3596 AT_SETUP([partial data record within long string])
3597 AT_KEYWORDS([sack synthetic system file negative])
3598 AT_DATA([sys-file.sack], [dnl
3599 dnl File header.
3600 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3601 2; 2; 0; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3602
3603 dnl Numeric variables.
3604 2; 14; 0; 0; 0x010e00 *2; s8 "STR14";
3605 2; -1; 0; 0; 0; 0; s8 "";
3606
3607 dnl Data.
3608 999; 0;
3609 s14 "one data item";
3610 s8 "partial";
3611 ])
3612 for variant in \
3613         "be 4a9e84f9e679afb7bb71acd0bb7eab89" \
3614         "le 30752606f14ee2deec2854e8e6de4b3b"
3615 do
3616   set $variant
3617   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3618 ])
3619   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3620 LIST.
3621 ])
3622   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3623    [error: `sys-file.sav' near offset 0x10e: Unexpected end of file.
3624
3625 Table: Data List
3626 str14
3627 one data item @&t@
3628 ])
3629 done
3630 AT_CLEANUP
3631
3632 AT_SETUP([partial compressed data record])
3633 AT_KEYWORDS([sack synthetic system file positive])
3634 AT_DATA([sys-file.sack], [dnl
3635 dnl File header.
3636 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3637 2; dnl Layout code
3638 6; dnl Nominal case size
3639 1; dnl Compressed
3640 0; dnl Not weighted 
3641 -1; dnl Unspecified number of cases.
3642 100.0; dnl Bias.
3643 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
3644 i8 0 *3;
3645
3646 dnl Numeric variables.
3647 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3648 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3649
3650 dnl String variable.
3651 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
3652 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
3653 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
3654 2; -1; 0; 0; 0; 0; s8 "";
3655
3656 dnl Dictionary termination record.
3657 999; 0;
3658
3659 dnl Compressed data.
3660 i8 1 100 254 253 254 253; i8 255 251; "abcdefgh"; s8 "0123";
3661 ])
3662 for variant in \
3663         "be ef01b16e2e397d979a3a7d20725ebe6d" \
3664         "le 51f7a61e9bc68992469d16c55d6ecd88"
3665 do
3666   set $variant
3667   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3668 ])
3669   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3670 LIST.
3671 ])
3672   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3673    [error: `sys-file.sav' near offset 0x190: File ends in partial case.
3674
3675 Table: Data List
3676 num1,num2,str4,str8,str15
3677 -99,0,,abcdefgh,0123   @&t@
3678 ])
3679 done
3680 AT_CLEANUP
3681
3682 AT_SETUP([zcompressed data - bad zheader_ofs])
3683 AT_KEYWORDS([sack synthetic system file negative zlib])
3684 zcompressed_sack | sed 's/.*zheader_ofs.*/>>i64 0<<;/' > sys-file.sack
3685 for variant in \
3686         "be 6d5c32f34fa1bed6f9b8f7045d104fdc" \
3687         "le 1f67fbda4f0021143e141fe8403c5a97"
3688 do
3689   set $variant
3690   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3691 ])
3692   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3693 ])
3694   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x178: Wrong ZLIB data header offset 0 (expected 0x178).
3695 ])
3696 done
3697 AT_CLEANUP
3698
3699 AT_SETUP([zcompressed data - bad ztrailer_ofs])
3700 AT_KEYWORDS([sack synthetic system file negative zlib])
3701 zcompressed_sack | sed 's/.*ztrailer_ofs.*/>>i64 0<<;/' > sys-file.sack
3702 for variant in \
3703         "be e2c8dec0c62d3d798825ad5906370634" \
3704         "le c1cff4cdddeee80bf1580cbc26fa9fd5"
3705 do
3706   set $variant
3707   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3708 ])
3709   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3710 ])
3711   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x178: Impossible ZLIB trailer offset 0x0.
3712 ])
3713 done
3714 AT_CLEANUP
3715
3716 # ztrailer_len must be a multiple of 24 and at least 48,
3717 # so a value of 12 is impossible.
3718 AT_SETUP([zcompressed data - invalid ztrailer_len])
3719 AT_KEYWORDS([sack synthetic system file negative zlib])
3720 zcompressed_sack | sed 's/.*ztrailer_len.*/>>i64 12<<;/' > sys-file.sack
3721 for variant in \
3722         "be 27f5203463bc4c7644382f24ae87f84c" \
3723         "le 0035fa6ee7690720429715150ede85f4"
3724 do
3725   set $variant
3726   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3727 ])
3728   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3729 ])
3730   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x178: Invalid ZLIB trailer length 12.
3731 ])
3732 done
3733 AT_CLEANUP
3734
3735 # ztrailer_ofs + ztrailer_len must be the file size.
3736 AT_SETUP([zcompressed data - wrong ztrailer_len])
3737 AT_KEYWORDS([sack synthetic system file negative zlib])
3738 zcompressed_sack | sed 's/.*ztrailer_len.*/>>i64 72<<;/' > sys-file.sack
3739 for variant in \
3740         "be 2ba9ae97bc0a7f5dcfe36e2463b9d7cb" \
3741         "le d737ea0a53ca5c6f20be359027171d73"
3742 do
3743   set $variant
3744   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3745 ])
3746   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3747 ])
3748   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [warning: `sys-file.sav' near offset 0x190: End of ZLIB trailer (0x231) is not file size (0x219).
3749 error: `sys-file.sav' near offset 0x201: 72-byte ZLIB trailer specifies 1 data blocks (expected 2).
3750 ])
3751 done
3752 AT_CLEANUP
3753
3754 AT_SETUP([zcompressed data - wrong ztrailer_bias])
3755 AT_KEYWORDS([sack synthetic system file negative zlib])
3756 zcompressed_sack | sed 's/.*ztrailer_bias.*/>>i64 0<<;/' > sys-file.sack
3757 for variant in \
3758         "be a5b56ab5e799a3626de2cdd7bd8d7a03" \
3759         "le d7cd584c6d5a95df10ba640eb3f1f24f"
3760 do
3761   set $variant
3762   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3763 ])
3764   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3765 ])
3766   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x1f1: ZLIB trailer bias (0) differs from file header bias (100.00).
3767 ])
3768 done
3769 AT_CLEANUP
3770
3771 AT_SETUP([zcompressed data - wrong ztrailer_zero])
3772 AT_KEYWORDS([sack synthetic system file negative zlib])
3773 zcompressed_sack | sed 's/.*ztrailer_zero.*/>>i64 100<<;/' > sys-file.sack
3774 for variant in \
3775         "be 8d746abedb3e74cfdc22207f3455db92" \
3776         "le 79cea017365cab35d59c7a300cfa66c1"
3777 do
3778   set $variant
3779   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3780 ])
3781   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3782 ])
3783   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], [warning: `sys-file.sav' near offset 0x1f9: ZLIB trailer "zero" field has nonzero value 100.
3784 ])
3785 done
3786 AT_CLEANUP
3787
3788 AT_SETUP([zcompressed data - wrong block_size])
3789 AT_KEYWORDS([sack synthetic system file negative zlib])
3790 zcompressed_sack | sed 's/.*block_size.*/>>0x1000<<;/' > sys-file.sack
3791 for variant in \
3792         "be 8d5a1caa56be8892d453faf1047005ca" \
3793         "le 7daa1bd57b192893b313a351202e179b"
3794 do
3795   set $variant
3796   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3797 ])
3798   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3799 ])
3800   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], [warning: `sys-file.sav' near offset 0x1fd: ZLIB trailer specifies unexpected 4096-byte block size.
3801 ])
3802 done
3803 AT_CLEANUP
3804
3805 AT_SETUP([zcompressed data - wrong n_blocks])
3806 AT_KEYWORDS([sack synthetic system file negative zlib])
3807 zcompressed_sack | sed 's/.*n_blocks.*/>>2<<;/' > sys-file.sack
3808 for variant in \
3809         "be cd29596fd6bf4a2f651febe820a7955f" \
3810         "le 8fc1f718dfd2abac7c3442c1055d4cab"
3811 do
3812   set $variant
3813   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3814 ])
3815   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3816 ])
3817   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x201: 48-byte ZLIB trailer specifies 2 data blocks (expected 1).
3818 ])
3819 done
3820 AT_CLEANUP
3821
3822 AT_SETUP([zcompressed data - wrong uncompressed_ofs])
3823 AT_KEYWORDS([sack synthetic system file negative zlib])
3824 zcompressed_sack | sed 's/.*uncompressed_ofs.*/i64 >>0x177<<;/' > sys-file.sack
3825 for variant in \
3826         "be 5546120fe6161dc6ed20aec48d8e74a4" \
3827         "le 86fafd625ed5ceaa1bff4fc7f500b6ab"
3828 do
3829   set $variant
3830   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3831 ])
3832   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3833 ])
3834   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x201: ZLIB block descriptor 0 reported uncompressed data offset 0x177, when 0x178 was expected.
3835 ])
3836 done
3837 AT_CLEANUP
3838
3839 AT_SETUP([zcompressed data - wrong compressed_ofs])
3840 AT_KEYWORDS([sack synthetic system file negative zlib])
3841 zcompressed_sack | sed 's/.*@%:@ compressed_ofs.*/i64 >>0x191<<;/' > sys-file.sack
3842 for variant in \
3843         "be 652e28f8d3f8e4ce47ad18d0f30e7bb9" \
3844         "le ebf2c647f2d7c47858d4f5ed683526e6"
3845 do
3846   set $variant
3847   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3848 ])
3849   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3850 ])
3851   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x201: ZLIB block descriptor 0 reported compressed data offset 0x191, when 0x190 was expected.
3852 ])
3853 done
3854 AT_CLEANUP
3855
3856 AT_SETUP([zcompressed data - compressed sizes don't add up])
3857 AT_KEYWORDS([sack synthetic system file negative zlib])
3858 AT_DATA([sys-file.sack], [dnl
3859 dnl File header.
3860 "$FL3"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3861 2; dnl Layout code
3862 6; dnl Nominal case size
3863 2; dnl zlib compressed
3864 0; dnl Not weighted
3865 -1; dnl Unspecified number of cases.
3866 100.0; dnl Bias.
3867 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
3868 i8 0 *3;
3869
3870 dnl Numeric variables.
3871 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3872 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3873
3874 dnl String variable.
3875 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
3876 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
3877 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
3878 2; -1; 0; 0; 0; 0; s8 "";
3879
3880 dnl Dictionary termination record.
3881 999; 0;
3882
3883 dnl ZLIB data header.
3884 i64 0x178;    # zheader_ofs
3885 i64 0x190;    # ztrailer_ofs
3886 i64 72;       # ztrailer_len
3887
3888 dnl This is where the ZLIB data blocks would go, but we don't need any to
3889 dnl provoke this message so we omit them.
3890
3891 dnl ZLIB data trailer fixed header:
3892 i64 -100;     # ztrailer_bias
3893 i64 0;        # ztrailer_zero
3894 0x3ff000;     # block_size
3895 2;            # n_blocks
3896
3897 dnl ZLIB block descriptor 1:
3898 i64 0x178;    # uncompressed_ofs
3899 i64 0x190;    # compressed_ofs
3900 0x100000;     # uncompressed_size
3901 0x12345;      # compressed_size
3902
3903 dnl ZLIB block descriptor 2:
3904 i64 0x100178; # uncompressed_ofs
3905 i64 0x12405;  # compressed_ofs
3906 0x100000;     # uncompressed_size
3907 0x12345;      # compressed_size
3908 ])
3909 for variant in \
3910         "be 72ebf57bffa340afe16ed79959faac09" \
3911         "le 80b34e98f6b181dcc2e8ca4ba13f768d"
3912 do
3913   set $variant
3914   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3915 ])
3916   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3917 ])
3918   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [warning: `sys-file.sav' near offset 0x1a8: ZLIB block descriptor 0 reported block size 0x100000, when 0x3ff000 was expected.
3919 error: `sys-file.sav' near offset 0x1c0: ZLIB block descriptor 1 reported compressed data offset 0x12405, when 0x124d5 was expected.
3920 ])
3921 done
3922 AT_CLEANUP
3923
3924 AT_SETUP([zcompressed data - uncompressed_size > block_size])
3925 AT_KEYWORDS([sack synthetic system file negative zlib])
3926 zcompressed_sack | sed 's/.*uncompressed_size.*/>>0x400000<<;/' > sys-file.sack
3927 for variant in \
3928         "be 9bb74ef407fe0b79e43c388eedc28212" \
3929         "le 6f145fb5f820c513f50b6f81310cdad5"
3930 do
3931   set $variant
3932   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3933 ])
3934   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3935 ])
3936   AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], [warning: `sys-file.sav' near offset 0x201: ZLIB block descriptor 0 reported block size 0x400000, when at most 0x3ff000 was expected.
3937 ])
3938 done
3939 AT_CLEANUP
3940
3941 AT_SETUP([zcompressed data - compression expands data too much])
3942 AT_KEYWORDS([sack synthetic system file negative zlib])
3943 zcompressed_sack | sed 's/.*uncompressed_size.*/>>50<<;/
3944 s/.*@%:@ compressed_size.*/>>100<<;/' > sys-file.sack
3945 for variant in \
3946         "be e11cadde5f0855c965a1cb388dedc36e" \
3947         "le 37953e71462b6554c5644fec8b539164"
3948 do
3949   set $variant
3950   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3951 ])
3952   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3953 ])
3954   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x201: ZLIB block descriptor 0 reports compressed size 100 and uncompressed size 50.
3955 ])
3956 done
3957 AT_CLEANUP
3958
3959 AT_SETUP([zcompressed data - compressed sizes don't add up])
3960 AT_KEYWORDS([sack synthetic system file negative zlib])
3961 zcompressed_sack | sed 's/.*@%:@ compressed_size.*/>>88<<;/' > sys-file.sack
3962 for variant in \
3963         "be 366eaf85be1f26fb6549e2f8ee393628" \
3964         "le a756e5125e6a908cb4990f66cc419bef"
3965 do
3966   set $variant
3967   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3968 ])
3969   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3970 ])
3971   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x219: ZLIB trailer is at offset 0x1e9 but 0x1e8 would be expected from block descriptors.
3972 ])
3973 done
3974 AT_CLEANUP