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