sys-file-reader: Successfully read files with duplicate names.
[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 ])
2095   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
2096    [error: `sys-file.sav': Weighting variable must be numeric (not string variable `STR1').
2097 ])
2098 done
2099 AT_CLEANUP
2100
2101 AT_SETUP([bad weighting variable index])
2102 AT_KEYWORDS([sack synthetic system file negative])
2103 AT_DATA([sys-file.sack], [dnl
2104 dnl File header.
2105 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2106 2; 2; 1; >>3<<; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2107
2108 dnl Numeric variable.
2109 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2110
2111 dnl String variable.
2112 2; 4; 0; 0; 0x010400 *2; s8 "STR1";
2113
2114 dnl End of dictionary.
2115 999; 0;
2116 ])
2117 for variant in \
2118         "be cd9af924ff20bc75834aa2c696254c97" \
2119         "le cbe0f2f514f5e95f27644d0b4314bc78"
2120 do
2121   set $variant
2122   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2123 ])
2124   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2125 ])
2126   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
2127    [error: `sys-file.sav' near offset 0x4c: Variable index 3 not in valid range 1...2.
2128 ])
2129 done
2130 AT_CLEANUP
2131
2132 AT_SETUP([variable index is long string contination])
2133 AT_KEYWORDS([sack synthetic system file negative])
2134 AT_DATA([sys-file.sack], [dnl
2135 dnl File header.
2136 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2137 2; 2; 1; >>3<<; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2138
2139 dnl Numeric variable.
2140 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2141
2142 dnl Long string variable.
2143 2; 9; 0; 0; 0x010900 *2; s8 "STR1";
2144 (2; -1; 0; 0; 0; 0; s8 "");
2145
2146 dnl End of dictionary.
2147 999; 0;
2148 ])
2149 for variant in \
2150         "be 0c395354df56ea5ff374aafcc535d633" \
2151         "le d977f684ea9d4648ed40f8c6dddde9f7"
2152 do
2153   set $variant
2154   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2155 ])
2156   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2157 ])
2158   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
2159    [error: `sys-file.sav' near offset 0x4c: Variable index 3 refers to long string continuation.
2160 ])
2161 done
2162 AT_CLEANUP
2163
2164 AT_SETUP([multiple documents records])
2165 AT_KEYWORDS([sack synthetic system file negative])
2166 AT_DATA([sys-file.sack], [dnl
2167 dnl File header.
2168 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2169 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2170
2171 dnl Numeric variable, no label or missing values.
2172 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2173
2174 dnl Two document records.
2175 (6; 1; s80 "One line of documents") >>* 2<<;
2176
2177 dnl Dictionary termination record.
2178 999; 0;
2179
2180 dnl Data.
2181 1.0;
2182 ])
2183 for variant in \
2184         "be 18aa3348a216ed494efe28285b348fa8" \
2185         "le 19b21522bcef1dcc60af328f923f307e"
2186 do
2187   set $variant
2188   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2189 ])
2190   AT_DATA([sys-file.sps], [dnl
2191 GET FILE='sys-file.sav'.
2192 ])
2193   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2194 error: `sys-file.sav' near offset 0x12c: Duplicate type 6 (document) record.
2195 ])
2196 done
2197 AT_CLEANUP
2198
2199
2200 AT_SETUP([empty document record])
2201 AT_KEYWORDS([sack synthetic system file negative])
2202 AT_DATA([sys-file.sack], [dnl
2203 dnl File header.
2204 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2205 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2206
2207 dnl Numeric variable, no label or missing values.
2208 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2209
2210 dnl Empty document record.
2211 6; >>0<<;
2212
2213 dnl Dictionary termination record.
2214 999; 0;
2215
2216 dnl Data.
2217 1.0;
2218 ])
2219 for variant in \
2220         "be d8ef29c1b97f9ed226cbd938c9c49b6e" \
2221         "le f6a560c5b62e2c472429d85294f36e61"
2222 do
2223   set $variant
2224   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2225 ])
2226   AT_DATA([sys-file.sps], [dnl
2227 GET FILE='sys-file.sav'.
2228 ])
2229   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2230 error: `sys-file.sav' near offset 0xd4: Number of document lines (0) must be greater than 0 and less than 26843545.
2231 ])
2232 done
2233 AT_CLEANUP
2234
2235 AT_SETUP([extension record too large])
2236 AT_KEYWORDS([sack synthetic system file negative])
2237 AT_DATA([sys-file.sack], [dnl
2238 dnl File header.
2239 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2240 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2241
2242 dnl Numeric variable, no label or missing values.
2243 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2244
2245 dnl Too-large extension record.
2246 7; 3; >>0xfffff000 * 2<<;
2247 ])
2248 for variant in \
2249         "be 5a6679dc41ac349b0b73fc430937c05c" \
2250         "le d4769c7f650cfbf160e0386d0d33be04"
2251 do
2252   set $variant
2253   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2254 ])
2255   AT_DATA([sys-file.sps], [dnl
2256 GET FILE='sys-file.sav'.
2257 ])
2258   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2259 error: `sys-file.sav' near offset 0xd8: Record type 7 subtype 3 too large.
2260 ])
2261 done
2262 AT_CLEANUP
2263
2264 AT_SETUP([unknown extension record])
2265 AT_KEYWORDS([sack synthetic system file negative])
2266 AT_DATA([sys-file.sack], [dnl
2267 dnl File header.
2268 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2269 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2270
2271 dnl Numeric variable, no label or missing values.
2272 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2273
2274 dnl Unknown extension record type.
2275 7; 30; 1; 1; i8 0;
2276
2277 dnl End of dictionary.
2278 999; 0;
2279 ])
2280 for variant in \
2281         "be ac8395e27677408189bcb8655e56cc0e" \
2282         "le e308bfcd51f1e3c28d7379c29271f9d6"
2283 do
2284   set $variant
2285   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2286 ])
2287   AT_DATA([sys-file.sps], [dnl
2288 GET FILE='sys-file.sav'.
2289 ])
2290   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2291 "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."
2292 ])
2293 done
2294 AT_CLEANUP
2295
2296 AT_SETUP([bad machine integer info size])
2297 AT_KEYWORDS([sack synthetic system file negative])
2298 AT_DATA([sys-file.sack], [dnl
2299 dnl File header.
2300 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2301 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2302
2303 dnl Numeric variable, no label or missing values.
2304 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2305
2306 dnl Machine integer info record.
2307 7; 3; 4; >>9<<; 1; 2; 3; -1; 1; 1; ENDIAN; 1252; >>1234<<;
2308
2309 dnl End of dictionary.
2310 999; 0;
2311 ])
2312 for variant in \
2313         "be 21ec84826886b0a266d1360f8279d769" \
2314         "le 15dcba7b2b89b7d8a21ebcc872f515af"
2315 do
2316   set $variant
2317   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2318   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2319 ])
2320   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2321 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 3 has bad count 9 (expected 8)."
2322 ])
2323 done
2324 AT_CLEANUP
2325
2326 AT_SETUP([bad machine integer info float format])
2327 AT_KEYWORDS([sack synthetic system file negative])
2328 AT_DATA([sys-file.sack], [dnl
2329 dnl File header.
2330 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2331 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2332
2333 dnl Numeric variable, no label or missing values.
2334 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2335
2336 dnl Machine integer info record.
2337 7; 3; 4; 8; 1; 2; 3; -1; >>2<<; 1; ENDIAN; 1252;
2338
2339 dnl End of dictionary.
2340 999; 0;
2341 ])
2342 for variant in \
2343         "be d510ed28278649eee997fb6881a4c04f" \
2344         "le fbf1eca561a4e243b7ae844ed1677035"
2345 do
2346   set $variant
2347   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2348   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2349 ])
2350   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
2351 error: `sys-file.sav' near offset 0xd8: Floating-point representation indicated by system file (2) differs from expected (1).
2352 ])
2353 done
2354 AT_CLEANUP
2355
2356 AT_SETUP([bad machine integer info endianness])
2357 AT_KEYWORDS([sack synthetic system file negative])
2358 AT_DATA([sys-file.sack], [dnl
2359 dnl File header.
2360 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2361 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2362
2363 dnl Numeric variable, no label or missing values.
2364 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2365
2366 dnl Machine integer info record.
2367 7; 3; 4; 8; 1; 2; 3; -1; 1; 1; >>3<<; 1252;
2368
2369 dnl End of dictionary.
2370 999; 0;
2371 ])
2372 for variant in \
2373         "be 855123d16d5e1560b91d60753dad79ad 1" \
2374         "le d6626b4fa2e46a91f26c2fc609b2f1e0 2"
2375 do
2376   set $variant
2377   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2378 ])
2379   AT_DATA([sys-file.sps], [dnl
2380 GET FILE='sys-file.sav'.
2381 DISPLAY DICTIONARY.
2382 ])
2383   AT_CHECK_UNQUOTED([pspp -O format=csv sys-file.sps], [0], [dnl
2384 warning: \`sys-file.sav' near offset 0xd8: Integer format indicated by system file (3) differs from expected ($[3]).
2385
2386 Variable,Description,,Position
2387 num1,Format: F8.0,,1
2388 ,Measure: Scale,,
2389 ,Display Alignment: Right,,
2390 ,Display Width: 8,,
2391 ])
2392 done
2393 AT_CLEANUP
2394
2395
2396 AT_SETUP([bad machine floating-point info size])
2397 AT_KEYWORDS([sack synthetic system file negative])
2398 AT_DATA([sys-file.sack], [dnl
2399 dnl File header.
2400 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2401 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2402
2403 dnl Numeric variable, no label or missing values.
2404 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2405
2406 dnl Machine floating-point info record.
2407 7; 4; 8; >>4<<; SYSMIS; HIGHEST; LOWEST; 0.0;
2408
2409 dnl End of dictionary.
2410 999; 0;
2411 ])
2412 for variant in \
2413         "be 29c9a173638fbb8bb1efe1176c4d670f" \
2414         "le 5cb49eb1084e5b9cd573a54705ff86a7"
2415 do
2416   set $variant
2417   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
2418   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2419 ])
2420   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2421 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 4 has bad count 4 (expected 3)."
2422 ])
2423 done
2424 AT_CLEANUP
2425
2426 AT_SETUP([wrong special floating point values])
2427 AT_KEYWORDS([sack synthetic system file negative])
2428 AT_DATA([sys-file.sack], [dnl
2429 dnl File header.
2430 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2431 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2432
2433 dnl Numeric variable, no label or missing values.
2434 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2435
2436 dnl Machine floating-point info record.
2437 7; 4; 8; 3; >>0.0<<; >>1.0<<; >>2.0<<;
2438
2439 dnl End of dictionary.
2440 999; 0;
2441 ])
2442 for variant in \
2443         "be 1e7452d9bb0a2397bf6084a25437514e" \
2444         "le f59f9a83f723cde1611869ff6d91d325"
2445 do
2446   set $variant
2447   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2448 ])
2449   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2450 ])
2451   AT_CHECK([pspp -O format=csv sys-file.sps | sed 's/ [(].*/.../'], [0], [dnl
2452 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 0...
2453
2454 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 1...
2455
2456 "warning: `sys-file.sav' near offset 0xd8: File specifies unexpected value 2...
2457 ])
2458 done
2459 AT_CLEANUP
2460
2461 AT_SETUP([bad mrsets name])
2462 AT_KEYWORDS([sack synthetic system file negative multiple response])
2463 AT_DATA([sys-file.sack], [dnl
2464 dnl File header.
2465 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2466 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2467
2468 dnl Numeric variable, no label or missing values.
2469 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2470
2471 dnl Multiple response sets.
2472 7; 7; 1; COUNT("a=C");
2473 7; 19; 1; COUNT("xyz=D");
2474
2475 999; 0;
2476 ])
2477 for variant in \
2478         "be 15a9bf44d0cd6186a60629b77079c5a5" \
2479         "le 161c99aca5e7a3684df096137e72ce5b"
2480 do
2481   set $variant
2482   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2483 ])
2484   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2485 ])
2486   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2487 warning: `sys-file.sav' near offset 0xd8: `a' does not begin with `$' at offset 2 in MRSETS record.
2488
2489 warning: `sys-file.sav' near offset 0xeb: `xyz' does not begin with `$' at offset 4 in MRSETS record.
2490 ])
2491 done
2492 AT_CLEANUP
2493
2494 AT_SETUP([missing space after C in mrsets])
2495 AT_KEYWORDS([sack synthetic system file negative multiple response])
2496 AT_DATA([sys-file.sack], [dnl
2497 dnl File header.
2498 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2499 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2500
2501 dnl Numeric variable, no label or missing values.
2502 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2503
2504 dnl Multiple response sets.
2505 7; 7; 1; COUNT("$a=Cx");
2506
2507 999; 0;
2508 ])
2509 for variant in \
2510         "be c5e5656ba3d74c3a967850f29ad89970" \
2511         "le 29f110509c3d6893a7d21ae2d66aad9d"
2512 do
2513   set $variant
2514   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2515 ])
2516   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2517 ])
2518   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2519 warning: `sys-file.sav' near offset 0xd8: Missing space following `C' at offset 4 in MRSETS record.
2520 ])
2521 done
2522 AT_CLEANUP
2523
2524 AT_SETUP([missing space after E in mrsets])
2525 AT_KEYWORDS([sack synthetic system file negative multiple response])
2526 AT_DATA([sys-file.sack], [dnl
2527 dnl File header.
2528 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2529 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2530
2531 dnl Numeric variable, no label or missing values.
2532 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2533
2534 dnl Multiple response sets.
2535 7; 7; 1; COUNT("$a=Ex");
2536
2537 999; 0;
2538 ])
2539 for variant in \
2540         "be a9e1dc63e2524882a5e3d2949a2da9d4" \
2541         "le ac709ca1928f65f47a8c8efdd9454b50"
2542 do
2543   set $variant
2544   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2545 ])
2546   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2547 ])
2548   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2549 warning: `sys-file.sav' near offset 0xd8: Missing space following `E' at offset 4 in MRSETS record.
2550 ])
2551 done
2552 AT_CLEANUP
2553
2554 AT_SETUP([unexpected label source in mrsets])
2555 AT_KEYWORDS([sack synthetic system file negative multiple response])
2556 AT_DATA([sys-file.sack], [dnl
2557 dnl File header.
2558 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2559 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2560
2561 dnl Numeric variable, no label or missing values.
2562 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2563
2564 dnl Multiple response sets.
2565 7; 7; 1; COUNT("$a=E 2");
2566
2567 999; 0;
2568 ])
2569 for variant in \
2570         "be 8c710e85a0a1609d0d03dec80aaf5f94" \
2571         "le 4682440b82f22d4bd2ac56afb7fa3152"
2572 do
2573   set $variant
2574   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2575 ])
2576   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2577 ])
2578   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2579 warning: `sys-file.sav' near offset 0xd8: Unexpected label source value `2' following `E' at offset 7 in MRSETS record.
2580
2581 warning: `sys-file.sav' near offset 0xd8: Expecting digit at offset 7 in MRSETS record.
2582 ])
2583 done
2584 AT_CLEANUP
2585
2586 AT_SETUP([bad type character in mrsets])
2587 AT_KEYWORDS([sack synthetic system file negative multiple response])
2588 AT_DATA([sys-file.sack], [dnl
2589 dnl File header.
2590 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2591 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2592
2593 dnl Numeric variable, no label or missing values.
2594 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2595
2596 dnl Multiple response sets.
2597 7; 7; 1; COUNT("$a=");
2598
2599 999; 0;
2600 ])
2601 for variant in \
2602         "be fc5e5200d8f56b9a5a713e4a95313a3b" \
2603         "le 578a61e8a06b20216612f566c2050879"
2604 do
2605   set $variant
2606   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2607 ])
2608   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2609 ])
2610   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2611 "warning: `sys-file.sav' near offset 0xd8: Missing `C', `D', or `E' at offset 3 in MRSETS record."
2612 ])
2613 done
2614 AT_CLEANUP
2615
2616 AT_SETUP([bad counted string length in mrsets])
2617 AT_KEYWORDS([sack synthetic system file negative multiple response])
2618 AT_DATA([sys-file.sack], [dnl
2619 dnl File header.
2620 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2621 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2622
2623 dnl Numeric variable, no label or missing values.
2624 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2625
2626 dnl Multiple response sets.
2627 7; 7; 1; COUNT("$a=Dx");
2628
2629 999; 0;
2630 ])
2631 for variant in \
2632         "be 23d0e2f65c7c5f93bbedcc0f2b260c69" \
2633         "le c3860c1d80e08842264948056e72c0db"
2634 do
2635   set $variant
2636   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2637 ])
2638   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2639 ])
2640   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2641 warning: `sys-file.sav' near offset 0xd8: Expecting digit at offset 4 in MRSETS record.
2642 ])
2643 done
2644 AT_CLEANUP
2645
2646 AT_SETUP([missing space in counted string in mrsets])
2647 AT_KEYWORDS([sack synthetic system file negative multiple response])
2648 AT_DATA([sys-file.sack], [dnl
2649 dnl File header.
2650 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2651 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2652
2653 dnl Numeric variable, no label or missing values.
2654 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2655
2656 dnl Multiple response sets.
2657 7; 7; 1; COUNT("$a=D1x");
2658
2659 999; 0;
2660 ])
2661 for variant in \
2662         "be c9ce001723763e0698878b7e43a887e8" \
2663         "le e258a1e4491d5a1d1e7d2272ef631a22"
2664 do
2665   set $variant
2666   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2667 ])
2668   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2669 ])
2670   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2671 warning: `sys-file.sav' near offset 0xd8: Expecting space at offset 5 in MRSETS record.
2672 ])
2673 done
2674 AT_CLEANUP
2675
2676 AT_SETUP([counted string too long in mrsets])
2677 AT_KEYWORDS([sack synthetic system file negative multiple response])
2678 AT_DATA([sys-file.sack], [dnl
2679 dnl File header.
2680 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2681 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2682
2683 dnl Numeric variable, no label or missing values.
2684 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2685
2686 dnl Multiple response sets.
2687 7; 7; 1; COUNT("$a=D4 abc");
2688
2689 999; 0;
2690 ])
2691 for variant in \
2692         "be 196d1266fa0e8e315769dcbe3130e3df" \
2693         "le 23df1ba7b77a26da8ce1c2cfbcaadce0"
2694 do
2695   set $variant
2696   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2697 ])
2698   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2699 ])
2700   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2701 warning: `sys-file.sav' near offset 0xd8: 4-byte string starting at offset 6 exceeds record length 9.
2702 ])
2703 done
2704 AT_CLEANUP
2705
2706 AT_SETUP([missing space after counted string in mrsets])
2707 AT_KEYWORDS([sack synthetic system file negative multiple response])
2708 AT_DATA([sys-file.sack], [dnl
2709 dnl File header.
2710 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2711 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2712
2713 dnl Numeric variable, no label or missing values.
2714 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2715
2716 dnl Multiple response sets.
2717 7; 7; 1; COUNT("$a=D3 abcx");
2718
2719 999; 0;
2720 ])
2721 for variant in \
2722         "be 86314bb0bbdfad48c10af8b8d8106d6e" \
2723         "le 2b8d05ff501ca78e51f7110ce88a2364"
2724 do
2725   set $variant
2726   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2727 ])
2728   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2729 ])
2730   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2731 warning: `sys-file.sav' near offset 0xd8: Expecting space at offset 9 following 3-byte string.
2732 ])
2733 done
2734 AT_CLEANUP
2735
2736 AT_SETUP([missing newline after variable name in mrsets])
2737 AT_KEYWORDS([sack synthetic system file negative multiple response])
2738 AT_DATA([sys-file.sack], [dnl
2739 dnl File header.
2740 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2741 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2742
2743 dnl Numeric variable, no label or missing values.
2744 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2745
2746 dnl Multiple response sets.
2747 7; 7; 1; COUNT("$a=C 0  NUM1");
2748
2749 999; 0;
2750 ])
2751 for variant in \
2752         "be cea939cf3e6a5f88cb45e8fa871c5e13" \
2753         "le 52135afec082f50f37eafacadbb2cd65"
2754 do
2755   set $variant
2756   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2757 ])
2758   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2759 ])
2760   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2761 warning: `sys-file.sav' near offset 0xd8: Missing new-line parsing variable names at offset 13 in MRSETS record.
2762
2763 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2764 ])
2765 done
2766 AT_CLEANUP
2767
2768 AT_SETUP([duplicate variable name in mrsets])
2769 AT_KEYWORDS([sack synthetic system file negative multiple response])
2770 AT_DATA([sys-file.sack], [dnl
2771 dnl File header.
2772 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2773 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2774
2775 dnl Numeric variable, no label or missing values.
2776 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2777
2778 dnl Multiple response sets.
2779 7; 7; 1; COUNT("$a=C 0  NUM1 NUM1"; i8 10);
2780
2781 999; 0;
2782 ])
2783 for variant in \
2784         "be 4b1b5fa2dc22cf0afdd35422290b0a29" \
2785         "le e4304b57976440a036f25f8dd8ac1404"
2786 do
2787   set $variant
2788   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2789 ])
2790   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2791 ])
2792   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2793 warning: `sys-file.sav' near offset 0xd8: Duplicate variable name NUM1 at offset 18 in MRSETS record.
2794
2795 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2796 ])
2797 done
2798 AT_CLEANUP
2799
2800 AT_SETUP([mixed variable types in mrsets])
2801 AT_KEYWORDS([sack synthetic system file negative multiple response])
2802 AT_DATA([sys-file.sack], [dnl
2803 dnl File header.
2804 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2805 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2806
2807 dnl Variables.
2808 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2809 2; 8; 0; 0; 0x010800 *2; s8 "STR1";
2810
2811 dnl Multiple response sets.
2812 7; 7; 1; COUNT("$a=C 0  NUM1 STR1"; i8 10);
2813
2814 999; 0;
2815 ])
2816 for variant in \
2817         "be 0f130e967e4097823f85b8711eb20727" \
2818         "le 4dc987b4303fd115f1cae9be3963acc9"
2819 do
2820   set $variant
2821   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2822 ])
2823   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2824 ])
2825   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2826 warning: `sys-file.sav' near offset 0xf8: MRSET $a contains both string and numeric variables.
2827
2828 warning: `sys-file.sav' near offset 0xf8: MRSET $a has only 1 variables.
2829 ])
2830 done
2831 AT_CLEANUP
2832
2833 AT_SETUP([missing newline after variable name in mrsets])
2834 AT_KEYWORDS([sack synthetic system file negative multiple response])
2835 AT_DATA([sys-file.sack], [dnl
2836 dnl File header.
2837 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2838 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2839
2840 dnl Numeric variable, no label or missing values.
2841 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2842
2843 dnl Multiple response sets.
2844 7; 7; 1; COUNT("$a=C 0  NUM1"; i8 10);
2845
2846 999; 0;
2847 ])
2848 for variant in \
2849         "be 3a891e0a467afb3d622629c70f329ada" \
2850         "le 432998ec08370510411af4f5207c015e"
2851 do
2852   set $variant
2853   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2854 ])
2855   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2856 ])
2857   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2858 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2859 ])
2860 done
2861 AT_CLEANUP
2862
2863 AT_SETUP([only one variable in mrset])
2864 AT_KEYWORDS([sack synthetic system file negative multiple response])
2865 AT_DATA([sys-file.sack], [dnl
2866 dnl File header.
2867 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2868 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2869
2870 dnl Numeric variable, no label or missing values.
2871 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2872
2873 dnl Multiple response sets.
2874 7; 7; 1; COUNT("$a=C 0  NUM1"; i8 10);
2875
2876 999; 0;
2877 ])
2878 for variant in \
2879         "be 3a891e0a467afb3d622629c70f329ada" \
2880         "le 432998ec08370510411af4f5207c015e"
2881 do
2882   set $variant
2883   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2884 ])
2885   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2886 ])
2887   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2888 warning: `sys-file.sav' near offset 0xd8: MRSET $a has only 1 variables.
2889 ])
2890 done
2891 AT_CLEANUP
2892
2893 AT_SETUP([wrong display parameter size])
2894 AT_KEYWORDS([sack synthetic system file negative])
2895 AT_DATA([sys-file.sack], [dnl
2896 dnl File header.
2897 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2898 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2899
2900 dnl Numeric variable, no label or missing values.
2901 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2902
2903 dnl Display parameters record.
2904 7; 11; >>8<<; 2; 1.0; 1.0;
2905
2906 dnl End of dictionary.
2907 999; 0;
2908 ])
2909 for variant in \
2910         "be 7c0f1ae47ae11e37d435c4abaceca226" \
2911         "le c29d05a1f8f15ed2201f31f8b787aaa0"
2912 do
2913   set $variant
2914   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2915 ])
2916   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2917 ])
2918   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2919 "warning: `sys-file.sav' near offset 0xd8: Record type 7, subtype 11 has bad size 8 (expected 4)."
2920 ])
2921 done
2922 AT_CLEANUP
2923
2924 AT_SETUP([wrong display parameter count])
2925 AT_KEYWORDS([sack synthetic system file negative])
2926 AT_DATA([sys-file.sack], [dnl
2927 dnl File header.
2928 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2929 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2930
2931 dnl Numeric variable, no label or missing values.
2932 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2933
2934 dnl Display parameters record.
2935 7; 11; 4; >>4<<; 1; 1; 2; 2;
2936
2937 dnl End of dictionary.
2938 999; 0;
2939 ])
2940 for variant in \
2941         "be 372b57e73c69b05047b60bf6c596e2a1" \
2942         "le 2a550d8c5ceae4de7ced77df66e49d0f"
2943 do
2944   set $variant
2945   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2946 ])
2947   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2948 ])
2949   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2950 warning: `sys-file.sav' near offset 0xd8: Extension 11 has bad count 4 (for 1 variables).
2951 ])
2952 done
2953 AT_CLEANUP
2954
2955 AT_SETUP([wrong display measurement level])
2956 AT_KEYWORDS([sack synthetic system file negative])
2957 AT_DATA([sys-file.sack], [dnl
2958 dnl File header.
2959 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2960 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2961
2962 dnl Numeric variable, no label or missing values.
2963 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2964
2965 dnl Display parameters record.
2966 7; 11; 4; 2; >>4<<; 0;
2967
2968 dnl End of dictionary.
2969 999; 0;
2970 ])
2971 for variant in \
2972         "be d43e7616b03743339f37292dec6c2204" \
2973         "le 821533c29a070cefdd8f07f4e1741d2a"
2974 do
2975   set $variant
2976   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
2977 ])
2978   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
2979 ])
2980   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
2981 warning: `sys-file.sav' near offset 0xd8: Invalid variable display parameters for variable 0 (NUM1).  Default parameters substituted.
2982 ])
2983 done
2984 AT_CLEANUP
2985
2986 AT_SETUP([wrong display alignment])
2987 AT_KEYWORDS([sack synthetic system file negative])
2988 AT_DATA([sys-file.sack], [dnl
2989 dnl File header.
2990 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2991 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
2992
2993 dnl Numeric variable, no label or missing values.
2994 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
2995
2996 dnl Display parameters record.
2997 7; 11; 4; 2; 1; >>-1<<;
2998
2999 dnl End of dictionary.
3000 999; 0;
3001 ])
3002 for variant in \
3003         "be c54bc48b5767e2ec3a9ef31df790cb7c" \
3004         "le a4d8b14af64221abe83adb417d110e10"
3005 do
3006   set $variant
3007   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3008 ])
3009   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3010 ])
3011   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3012 warning: `sys-file.sav' near offset 0xd8: Invalid variable display parameters for variable 0 (NUM1).  Default parameters substituted.
3013 ])
3014 done
3015 AT_CLEANUP
3016
3017 AT_SETUP([bad variable name in variable/value pair])
3018 AT_KEYWORDS([sack synthetic system file negative])
3019 AT_DATA([sys-file.sack], [dnl
3020 dnl File header.
3021 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3022 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3023
3024 dnl Numeric variables.
3025 2; 0; 0; 0; 0x050800 *2; s8 "LONGVARI";
3026
3027 dnl Long variable names.
3028 7; 13; 1; COUNT (>>"xyzzy"<<);
3029
3030 dnl Dictionary termination record.
3031 999; 0;
3032 ])
3033 for variant in \
3034         "be b67b6e3c1900e5a9cc691055008f0447" \
3035         "le 26cc52e601f830f9087a0ea2bd9527df"
3036 do
3037   set $variant
3038   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3039 ])
3040   AT_DATA([sys-file.sps], [dnl
3041 GET FILE='sys-file.sav'.
3042 ])
3043   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3044 warning: `sys-file.sav' near offset 0xde: Dictionary record refers to unknown variable xyzzy.
3045 ])
3046 done
3047 AT_CLEANUP
3048
3049 AT_SETUP([duplicate long variable name])
3050 AT_KEYWORDS([sack synthetic system file negative])
3051 AT_DATA([sys-file.sack], [dnl
3052 dnl File header.
3053 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3054 2; 4; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3055
3056 dnl Numeric variables.
3057 2; 0; 0; 0; 0x050800 *2; s8 "LONGVARI";
3058 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_A";
3059 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_B";
3060 2; 0; 0; 0; 0x050800 *2; s8 "LONGVA_C";
3061
3062 dnl Long variable names.
3063 7; 13; 1; COUNT (
3064 "LONGVARI=_Invalid"; i8 9;
3065 "LONGVA_A=LongVariableName"; i8 9;
3066 "LONGVA_B=LONGVARIABLENAME"; i8 9;
3067 );
3068
3069 dnl Dictionary termination record.
3070 999; 0;
3071 ])
3072 for variant in \
3073         "be 9b4b4daa00084d984efb8f889bcb727c" \
3074         "le c1b1470d5cd615106e9ae507c9948d8e"
3075 do
3076   set $variant
3077   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3078 ])
3079   AT_DATA([sys-file.sps], [dnl
3080 GET FILE='sys-file.sav'.
3081 ])
3082   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3083 warning: `sys-file.sav' near offset 0x138: Long variable mapping from LONGVARI to invalid variable name `_Invalid'.
3084
3085 warning: `sys-file.sav' near offset 0x138: Duplicate long variable name `LONGVARIABLENAME'.
3086 ])
3087 done
3088 AT_CLEANUP
3089
3090 AT_SETUP([bad very long string length])
3091 AT_KEYWORDS([sack synthetic system file negative])
3092 AT_DATA([sys-file.sack], [dnl
3093 dnl File header.
3094 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3095 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3096
3097 dnl Numeric variable.
3098 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3099
3100 dnl Very long string map.
3101 7; 14; 1; COUNT (
3102 "NUM1=00000"; i8 0; i8 9;
3103 "NUM1=00255"; i8 0; i8 9;
3104 "NUM1=00256"; i8 0; i8 9;
3105 );
3106
3107 dnl Dictionary termination record.
3108 999; 0;
3109 ])
3110 for variant in \
3111         "be 1309d8d9fb24bcf08952dce9b0f39a94" \
3112         "le 94a39de88f8034001b3e467c4cc04d0f"
3113 do
3114   set $variant
3115   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3116 ])
3117   AT_DATA([sys-file.sps], [dnl
3118 GET FILE='sys-file.sav'.
3119 ])
3120   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3121 warning: `sys-file.sav' near offset 0xd8: NUM1 listed as string of invalid length 00000 in very long string record.
3122
3123 "warning: `sys-file.sav' near offset 0xd8: NUM1 listed in very long string record with width 00255, which requires only one segment."
3124
3125 error: `sys-file.sav' near offset 0xd8: Very long string NUM1 overflows dictionary.
3126 ])
3127 done
3128 AT_CLEANUP
3129
3130 AT_SETUP([bad very long string segment width])
3131 AT_KEYWORDS([sack synthetic system file negative])
3132 AT_DATA([sys-file.sack], [dnl
3133 dnl File header.
3134 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3135 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3136
3137 dnl Variables.
3138 2; 255; 0; 0; 0x01ff00 *2; s8 "STR1";
3139 (2; -1; 0; 0; 0; 0; s8 "") * 31;
3140 2; >>9<<; 0; 0; 0x010900 *2; s8 "STR1_A";
3141 >>2; -1; 0; 0; 0; 0; s8 "";<<
3142
3143 dnl Very long string map.
3144 7; 14; 1; COUNT (
3145 "STR1=00256"; i8 0; i8 9;
3146 );
3147
3148 dnl Dictionary termination record.
3149 999; 0;
3150 ])
3151 for variant in \
3152         "be 1d09a44a46859e6eda28e053dd4b7a8b" \
3153         "le 63b9ac0b3953f3e0d5ee248ebe257794"
3154 do
3155   set $variant
3156   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3157 ])
3158   AT_DATA([sys-file.sps], [dnl
3159 GET FILE='sys-file.sav'.
3160 ])
3161   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3162 error: `sys-file.sav' near offset 0x4f8: Very long string with width 256 has segment 1 of width 9 (expected 4).
3163 ])
3164 done
3165 AT_CLEANUP
3166
3167 AT_SETUP([too many value labels])
3168 dnl Skip the test if multiplying a small number by INT32_MAX would not
3169 dnl cause an overflow in size_t.
3170 AT_SKIP_IF([test $SIZEOF_SIZE_T -gt 4])
3171 AT_KEYWORDS([sack synthetic system file negative])
3172 AT_DATA([sys-file.sack], [dnl
3173 dnl File header.
3174 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3175 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3176
3177 dnl Numeric variable.
3178 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3179 3; >>0x7fffffff<<;
3180 ])
3181 for variant in \
3182         "be 975b2668dde395ddf619977958b37412" \
3183         "le 0c14aa278cfc2a4b801f91c14321f03b"
3184 do
3185   set $variant
3186   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3187 ])
3188   AT_DATA([sys-file.sps], [dnl
3189 GET FILE='sys-file.sav'.
3190 ])
3191   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3192 error: `sys-file.sav' near offset 0xd4: Invalid number of labels 2147483647.
3193 ])
3194 done
3195 AT_CLEANUP
3196
3197 AT_SETUP([missing type 4 record])
3198 AT_KEYWORDS([sack synthetic system file negative])
3199 AT_DATA([sys-file.sack], [dnl
3200 dnl File header.
3201 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3202 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3203
3204 dnl Numeric variable.
3205 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3206
3207 dnl Value label with missing type 4 record.
3208 3; 1; 1.0; i8 3; s7 "one";
3209
3210 dnl End of dictionary.
3211 >>999; 0<<;
3212 ])
3213 for variant in \
3214         "be 5e1286ac92e3f25ff98492bc5019d608" \
3215         "le b33c12f776bbcaa43aa3bfdd4799e0c0"
3216 do
3217   set $variant
3218   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3219 ])
3220   AT_DATA([sys-file.sps], [dnl
3221 GET FILE='sys-file.sav'.
3222 ])
3223   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3224 error: `sys-file.sav' near offset 0xe8: Variable index record (type 4) does not immediately follow value label record (type 3) as it should.
3225 ])
3226 done
3227 AT_CLEANUP
3228
3229 AT_SETUP([value label with no associated variables])
3230 AT_KEYWORDS([sack synthetic system file negative])
3231 AT_DATA([sys-file.sack], [dnl
3232 dnl File header.
3233 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3234 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3235
3236 dnl Numeric variable.
3237 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3238
3239 dnl Value label with no variables.
3240 3; 1; 1.0; i8 3; s7 "one"; 4; >>0<<;
3241 ])
3242 for variant in \
3243         "be b0dcec30a936cbcad21c4f3d6fe10fcf" \
3244         "le 3b9fdfce5c8c248048232fd6eac018e3"
3245 do
3246   set $variant
3247   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3248 ])
3249   AT_DATA([sys-file.sps], [dnl
3250 GET FILE='sys-file.sav'.
3251 ])
3252   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3253 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).
3254 ])
3255 done
3256 AT_CLEANUP
3257
3258 AT_SETUP([type 4 record names long string variable])
3259 AT_KEYWORDS([sack synthetic system file negative])
3260 AT_DATA([sys-file.sack], [dnl
3261 dnl File header.
3262 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3263 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3264
3265 dnl Long string variable.
3266 2; 9; 0; 0; 0x010900 *2; s8 "STR1";
3267 2; -1; 0; 0; 0; 0; s8 "";
3268
3269 dnl Value label that names long string variable.
3270 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 1; >>1<<;
3271
3272 dnl End of dictionary.
3273 999; 0;
3274 ])
3275 for variant in \
3276         "be 14053a4f09de4c7c4c55281534dd66f4" \
3277         "le 8a61cc994c659fd66307d2f0fd64ce20"
3278 do
3279   set $variant
3280   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
3281   AT_DATA([sys-file.sps], [dnl
3282 GET FILE='sys-file.sav'.
3283 ])
3284   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3285 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.
3286 ])
3287 done
3288 AT_CLEANUP
3289
3290 AT_SETUP([variables for value label must all be same type])
3291 AT_KEYWORDS([sack synthetic system file negative])
3292 AT_DATA([sys-file.sack], [dnl
3293 dnl File header.
3294 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3295 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3296
3297 dnl Variables.
3298 2; 6; 0; 0; 0x010600 *2; s8 "STR1";
3299 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3300
3301 dnl Value label that names numeric and string variables.
3302 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 2; >>1; 2<<;
3303
3304 dnl End of dictionary.
3305 999; 0;
3306 ])
3307 for variant in \
3308         "be 7577c456726a88f52bbef63a8b47bf1a" \
3309         "le 3ba5c6af9ad0ae5cc88f9f63e726e414"
3310 do
3311   set $variant
3312   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [ignore])
3313   AT_DATA([sys-file.sps], [dnl
3314 GET FILE='sys-file.sav'.
3315 ])
3316   AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
3317 "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."
3318 ])
3319 done
3320 AT_CLEANUP
3321
3322 AT_SETUP([duplicate value labels type])
3323 AT_KEYWORDS([sack synthetic system file negative])
3324 AT_DATA([sys-file.sack], [dnl
3325 dnl File header.
3326 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3327 2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3328
3329 dnl Variables.
3330 2; 6; 0; 0; 0x010600 *2; s8 "STR1";
3331 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3332
3333 dnl Duplicate value labels.
3334 3; 1; s8 "xyzzy"; i8 3; s7 "one"; 4; 2; >>1; 1<<;
3335 3; 1; 1.0; i8 3; s7 "one"; 4; 2; >>2; 2<<;
3336
3337 dnl End of dictionary.
3338 999; 0;
3339 ])
3340 for variant in \
3341         "be ef0f5b2ebddb5a3bfcda16c93a2508f4" \
3342         "le c00e27abd9a6c06bf29a108d7220435a"
3343 do
3344   set $variant
3345   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3346 ])
3347   AT_DATA([sys-file.sps], [dnl
3348 GET FILE='sys-file.sav'.
3349 ])
3350   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3351 warning: `sys-file.sav' near offset 0xf4: Duplicate value label for `xyzzy ' on STR1.
3352
3353 warning: `sys-file.sav' near offset 0x11c: Duplicate value label for 1 on NUM1.
3354 ])
3355 done
3356 AT_CLEANUP
3357
3358 AT_SETUP([missing attribute value])
3359 AT_KEYWORDS([sack synthetic system file negative])
3360 AT_DATA([sys-file.sack], [dnl
3361 dnl File header.
3362 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3363 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3364
3365 dnl Variables.
3366 2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
3367
3368 dnl Data file attributes record.
3369 7; 17; 1; COUNT (
3370 "Attr1("
3371 );
3372
3373 dnl Variable attributes record.
3374 7; 18; 1; COUNT (
3375 "FIRSTVAR:";
3376   "fred('23'"; i8 10
3377 );
3378
3379 dnl Dictionary termination record.
3380 999; 0;
3381 ])
3382 for variant in \
3383         "be 0fc71f5e3cdb6b7f2dd73d011d4885c2" \
3384         "le e519b44715400156a2bfe648eb5cff34"
3385 do
3386   set $variant
3387   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3388 ])
3389   AT_DATA([sys-file.sps], [dnl
3390 GET FILE='sys-file.sav'.
3391 ])
3392   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3393 warning: `sys-file.sav' near offset 0xde: Error parsing attribute value Attr1[[1]].
3394
3395 warning: `sys-file.sav' near offset 0x101: Error parsing attribute value fred[[2]].
3396 ])
3397 done
3398 AT_CLEANUP
3399
3400 AT_SETUP([unquoted attribute value])
3401 AT_KEYWORDS([sack synthetic system file negative])
3402 AT_DATA([sys-file.sack], [dnl
3403 dnl File header.
3404 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3405 2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3406
3407 dnl Variables.
3408 2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
3409
3410 dnl Data file attributes record.
3411 7; 17; 1; COUNT (
3412 "Attr1(value"; i8 10;
3413 ")"
3414 );
3415
3416 dnl Variable attributes record.
3417 7; 18; 1; COUNT (
3418 "FIRSTVAR:";
3419   "fred(23"; i8 10; ")"
3420 );
3421
3422 dnl Dictionary termination record.
3423 999; 0;
3424 ])
3425 for variant in \
3426         "be 33dba37c2247e63c04bb74a7b472293d" \
3427         "le 041025a9d9d9e21a7fabd90ba7341934"
3428 do
3429   set $variant
3430   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3431 ])
3432   AT_DATA([sys-file.sps], [dnl
3433 GET FILE='sys-file.sav'.
3434 ])
3435   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3436 warning: `sys-file.sav' near offset 0xe4: Attribute value Attr1[[1]] is not quoted: value.
3437
3438 warning: `sys-file.sav' near offset 0x106: Attribute value fred[[1]] is not quoted: 23.
3439 ])
3440 done
3441 AT_CLEANUP
3442
3443 AT_SETUP([bad variable name in long string value label])
3444 AT_KEYWORDS([sack synthetic system file negative])
3445 AT_DATA([sys-file.sack], [dnl
3446 dnl File header.
3447 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3448 2; 3; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3449
3450 dnl Variables.
3451 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3452 2; 14; 0; 0; 0x010e00 *2; s8 "STR14";
3453 2; -1; 0; 0; 0; 0; s8 "";
3454
3455 7; 21; 1; COUNT (
3456 dnl No variable named STR9.
3457 COUNT(>>"STR9"<<); 9;
3458 1; COUNT("RSTUVWXYZ"); COUNT("value label for `RSTUVWXYZ'");
3459
3460 dnl NUM1 is numeric.
3461 COUNT(>>"NUM1"<<); 0;
3462 1; COUNT("xyz"); COUNT("value label for 1.0");
3463
3464 dnl Wrong width for STR14.
3465 COUNT("STR14"); >>9<<;
3466 1; COUNT("RSTUVWXYZ"); COUNT("value label for `RSTUVWXYZ'");
3467
3468 dnl Wrong width for value.
3469 COUNT("STR14"); 14;
3470 1; COUNT(>>"RSTUVWXYZ"<<); COUNT("value label for `RSTUVWXYZ'");
3471
3472 dnl Duplicate value label.
3473 COUNT("STR14"); 14; 2;
3474 COUNT("abcdefghijklmn"); COUNT("value label for `abcdefghijklmn'");
3475 >>COUNT("abcdefghijklmn"); COUNT("another value label for `abcdefghijklmn'")<<;
3476 );
3477
3478 dnl Dictionary termination record.
3479 999; 0;
3480 ])
3481 for variant in \
3482         "be cf2e883dadb00e2c6404c09ea0a4e388" \
3483         "le 89c340faf0a7e4a8c834f9687684c091"
3484 do
3485   set $variant
3486   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3487 ])
3488   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3489 ])
3490   AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
3491 warning: `sys-file.sav' near offset 0x128: Ignoring long string value label record for unknown variable STR9.
3492
3493 warning: `sys-file.sav' near offset 0x164: Ignoring long string value label record for numeric variable NUM1.
3494
3495 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).
3496
3497 "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."
3498
3499 warning: `sys-file.sav' near offset 0x259: Duplicate value label for `abcdefghijklmn' on str14.
3500 ])
3501 done
3502 AT_CLEANUP
3503
3504 AT_SETUP([fewer data records than indicated by file header])
3505 AT_KEYWORDS([sack synthetic system file negative])
3506 AT_DATA([sys-file.sack], [dnl
3507 dnl File header.
3508 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3509 2; 2; 0; 0; >>5<<; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3510
3511 dnl Numeric variables.
3512 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3513 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3514
3515 dnl Data.
3516 999; 0;
3517 1.0; 2.0;
3518 3.0; 4.0;
3519 5.0; 6.0;
3520 7.0; 8.0;
3521 dnl Missing record here.
3522 ])
3523 for variant in \
3524         "be 6ee097c3934055d0c4564641636f4b5a" \
3525         "le ae03fe1b888091d6938b5a436d44ac60"
3526 do
3527   set $variant
3528   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3529 ])
3530   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3531 LIST.
3532 ])
3533   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3534    [error: Error reading case from file `sys-file.sav'.
3535
3536 Table: Data List
3537 num1,num2
3538 1,2
3539 3,4
3540 5,6
3541 7,8
3542 ])
3543 done
3544 AT_CLEANUP
3545
3546 AT_SETUP([partial data record between variables])
3547 AT_KEYWORDS([sack synthetic system file negative])
3548 AT_DATA([sys-file.sack], [dnl
3549 dnl File header.
3550 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3551 2; 2; 0; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3552
3553 dnl Numeric variables.
3554 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3555 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3556
3557 dnl Data.
3558 999; 0;
3559 1.0; 2.0;
3560 3.0;
3561 ])
3562 for variant in \
3563         "be 4bcc085d7d8f0f09c6a4ba8064ffe61c" \
3564         "le 7387fc5edd2740aff92c30ca688d6d9b"
3565 do
3566   set $variant
3567   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3568 ])
3569   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3570 LIST.
3571 ])
3572   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3573    [error: `sys-file.sav' near offset 0x110: File ends in partial case.
3574
3575 Table: Data List
3576 num1,num2
3577 1,2
3578 ])
3579 done
3580 AT_CLEANUP
3581
3582 AT_SETUP([partial data record within long string])
3583 AT_KEYWORDS([sack synthetic system file negative])
3584 AT_DATA([sys-file.sack], [dnl
3585 dnl File header.
3586 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3587 2; 2; 0; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
3588
3589 dnl Numeric variables.
3590 2; 14; 0; 0; 0x010e00 *2; s8 "STR14";
3591 2; -1; 0; 0; 0; 0; s8 "";
3592
3593 dnl Data.
3594 999; 0;
3595 s14 "one data item";
3596 s8 "partial";
3597 ])
3598 for variant in \
3599         "be 4a9e84f9e679afb7bb71acd0bb7eab89" \
3600         "le 30752606f14ee2deec2854e8e6de4b3b"
3601 do
3602   set $variant
3603   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3604 ])
3605   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3606 LIST.
3607 ])
3608   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3609    [error: `sys-file.sav' near offset 0x10e: Unexpected end of file.
3610
3611 Table: Data List
3612 str14
3613 one data item @&t@
3614 ])
3615 done
3616 AT_CLEANUP
3617
3618 AT_SETUP([partial compressed data record])
3619 AT_KEYWORDS([sack synthetic system file positive])
3620 AT_DATA([sys-file.sack], [dnl
3621 dnl File header.
3622 "$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3623 2; dnl Layout code
3624 6; dnl Nominal case size
3625 1; dnl Compressed
3626 0; dnl Not weighted 
3627 -1; dnl Unspecified number of cases.
3628 100.0; dnl Bias.
3629 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
3630 i8 0 *3;
3631
3632 dnl Numeric variables.
3633 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3634 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3635
3636 dnl String variable.
3637 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
3638 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
3639 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
3640 2; -1; 0; 0; 0; 0; s8 "";
3641
3642 dnl Dictionary termination record.
3643 999; 0;
3644
3645 dnl Compressed data.
3646 i8 1 100 254 253 254 253; i8 255 251; "abcdefgh"; s8 "0123";
3647 ])
3648 for variant in \
3649         "be ef01b16e2e397d979a3a7d20725ebe6d" \
3650         "le 51f7a61e9bc68992469d16c55d6ecd88"
3651 do
3652   set $variant
3653   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3654 ])
3655   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3656 LIST.
3657 ])
3658   AT_CHECK([pspp -O format=csv sys-file.sps], [1], 
3659    [error: `sys-file.sav' near offset 0x190: File ends in partial case.
3660
3661 Table: Data List
3662 num1,num2,str4,str8,str15
3663 -99,0,,abcdefgh,0123   @&t@
3664 ])
3665 done
3666 AT_CLEANUP
3667
3668 AT_SETUP([zcompressed data - bad zheader_ofs])
3669 AT_KEYWORDS([sack synthetic system file negative zlib])
3670 zcompressed_sack | sed 's/.*zheader_ofs.*/>>i64 0<<;/' > sys-file.sack
3671 for variant in \
3672         "be 6d5c32f34fa1bed6f9b8f7045d104fdc" \
3673         "le 1f67fbda4f0021143e141fe8403c5a97"
3674 do
3675   set $variant
3676   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3677 ])
3678   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3679 ])
3680   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).
3681 ])
3682 done
3683 AT_CLEANUP
3684
3685 AT_SETUP([zcompressed data - bad ztrailer_ofs])
3686 AT_KEYWORDS([sack synthetic system file negative zlib])
3687 zcompressed_sack | sed 's/.*ztrailer_ofs.*/>>i64 0<<;/' > sys-file.sack
3688 for variant in \
3689         "be e2c8dec0c62d3d798825ad5906370634" \
3690         "le c1cff4cdddeee80bf1580cbc26fa9fd5"
3691 do
3692   set $variant
3693   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3694 ])
3695   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3696 ])
3697   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x178: Impossible ZLIB trailer offset 0x0.
3698 ])
3699 done
3700 AT_CLEANUP
3701
3702 # ztrailer_len must be a multiple of 24 and at least 48,
3703 # so a value of 12 is impossible.
3704 AT_SETUP([zcompressed data - invalid ztrailer_len])
3705 AT_KEYWORDS([sack synthetic system file negative zlib])
3706 zcompressed_sack | sed 's/.*ztrailer_len.*/>>i64 12<<;/' > sys-file.sack
3707 for variant in \
3708         "be 27f5203463bc4c7644382f24ae87f84c" \
3709         "le 0035fa6ee7690720429715150ede85f4"
3710 do
3711   set $variant
3712   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3713 ])
3714   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3715 ])
3716   AT_CHECK([pspp -o pspp.csv sys-file.sps], [1], [error: `sys-file.sav' near offset 0x178: Invalid ZLIB trailer length 12.
3717 ])
3718 done
3719 AT_CLEANUP
3720
3721 # ztrailer_ofs + ztrailer_len must be the file size.
3722 AT_SETUP([zcompressed data - wrong ztrailer_len])
3723 AT_KEYWORDS([sack synthetic system file negative zlib])
3724 zcompressed_sack | sed 's/.*ztrailer_len.*/>>i64 72<<;/' > sys-file.sack
3725 for variant in \
3726         "be 2ba9ae97bc0a7f5dcfe36e2463b9d7cb" \
3727         "le d737ea0a53ca5c6f20be359027171d73"
3728 do
3729   set $variant
3730   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3731 ])
3732   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3733 ])
3734   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).
3735 error: `sys-file.sav' near offset 0x201: 72-byte ZLIB trailer specifies 1 data blocks (expected 2).
3736 ])
3737 done
3738 AT_CLEANUP
3739
3740 AT_SETUP([zcompressed data - wrong ztrailer_bias])
3741 AT_KEYWORDS([sack synthetic system file negative zlib])
3742 zcompressed_sack | sed 's/.*ztrailer_bias.*/>>i64 0<<;/' > sys-file.sack
3743 for variant in \
3744         "be a5b56ab5e799a3626de2cdd7bd8d7a03" \
3745         "le d7cd584c6d5a95df10ba640eb3f1f24f"
3746 do
3747   set $variant
3748   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3749 ])
3750   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3751 ])
3752   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).
3753 ])
3754 done
3755 AT_CLEANUP
3756
3757 AT_SETUP([zcompressed data - wrong ztrailer_zero])
3758 AT_KEYWORDS([sack synthetic system file negative zlib])
3759 zcompressed_sack | sed 's/.*ztrailer_zero.*/>>i64 100<<;/' > sys-file.sack
3760 for variant in \
3761         "be 8d746abedb3e74cfdc22207f3455db92" \
3762         "le 79cea017365cab35d59c7a300cfa66c1"
3763 do
3764   set $variant
3765   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3766 ])
3767   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3768 ])
3769   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.
3770 ])
3771 done
3772 AT_CLEANUP
3773
3774 AT_SETUP([zcompressed data - wrong block_size])
3775 AT_KEYWORDS([sack synthetic system file negative zlib])
3776 zcompressed_sack | sed 's/.*block_size.*/>>0x1000<<;/' > sys-file.sack
3777 for variant in \
3778         "be 8d5a1caa56be8892d453faf1047005ca" \
3779         "le 7daa1bd57b192893b313a351202e179b"
3780 do
3781   set $variant
3782   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3783 ])
3784   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3785 ])
3786   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.
3787 ])
3788 done
3789 AT_CLEANUP
3790
3791 AT_SETUP([zcompressed data - wrong n_blocks])
3792 AT_KEYWORDS([sack synthetic system file negative zlib])
3793 zcompressed_sack | sed 's/.*n_blocks.*/>>2<<;/' > sys-file.sack
3794 for variant in \
3795         "be cd29596fd6bf4a2f651febe820a7955f" \
3796         "le 8fc1f718dfd2abac7c3442c1055d4cab"
3797 do
3798   set $variant
3799   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3800 ])
3801   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3802 ])
3803   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).
3804 ])
3805 done
3806 AT_CLEANUP
3807
3808 AT_SETUP([zcompressed data - wrong uncompressed_ofs])
3809 AT_KEYWORDS([sack synthetic system file negative zlib])
3810 zcompressed_sack | sed 's/.*uncompressed_ofs.*/i64 >>0x177<<;/' > sys-file.sack
3811 for variant in \
3812         "be 5546120fe6161dc6ed20aec48d8e74a4" \
3813         "le 86fafd625ed5ceaa1bff4fc7f500b6ab"
3814 do
3815   set $variant
3816   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3817 ])
3818   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3819 ])
3820   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.
3821 ])
3822 done
3823 AT_CLEANUP
3824
3825 AT_SETUP([zcompressed data - wrong compressed_ofs])
3826 AT_KEYWORDS([sack synthetic system file negative zlib])
3827 zcompressed_sack | sed 's/.*@%:@ compressed_ofs.*/i64 >>0x191<<;/' > sys-file.sack
3828 for variant in \
3829         "be 652e28f8d3f8e4ce47ad18d0f30e7bb9" \
3830         "le ebf2c647f2d7c47858d4f5ed683526e6"
3831 do
3832   set $variant
3833   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3834 ])
3835   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3836 ])
3837   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.
3838 ])
3839 done
3840 AT_CLEANUP
3841
3842 AT_SETUP([zcompressed data - compressed sizes don't add up])
3843 AT_KEYWORDS([sack synthetic system file negative zlib])
3844 AT_DATA([sys-file.sack], [dnl
3845 dnl File header.
3846 "$FL3"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
3847 2; dnl Layout code
3848 6; dnl Nominal case size
3849 2; dnl zlib compressed
3850 0; dnl Not weighted
3851 -1; dnl Unspecified number of cases.
3852 100.0; dnl Bias.
3853 "01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
3854 i8 0 *3;
3855
3856 dnl Numeric variables.
3857 2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
3858 2; 0; 0; 0; 0x050800 *2; s8 "NUM2";
3859
3860 dnl String variable.
3861 2; 4; 0; 0; 0x010400 *2; s8 "STR4";
3862 2; 8; 0; 0; 0x010800 *2; s8 "STR8";
3863 2; 15; 0; 0; 0x010f00 *2; s8 "STR15";
3864 2; -1; 0; 0; 0; 0; s8 "";
3865
3866 dnl Dictionary termination record.
3867 999; 0;
3868
3869 dnl ZLIB data header.
3870 i64 0x178;    # zheader_ofs
3871 i64 0x190;    # ztrailer_ofs
3872 i64 72;       # ztrailer_len
3873
3874 dnl This is where the ZLIB data blocks would go, but we don't need any to
3875 dnl provoke this message so we omit them.
3876
3877 dnl ZLIB data trailer fixed header:
3878 i64 -100;     # ztrailer_bias
3879 i64 0;        # ztrailer_zero
3880 0x3ff000;     # block_size
3881 2;            # n_blocks
3882
3883 dnl ZLIB block descriptor 1:
3884 i64 0x178;    # uncompressed_ofs
3885 i64 0x190;    # compressed_ofs
3886 0x100000;     # uncompressed_size
3887 0x12345;      # compressed_size
3888
3889 dnl ZLIB block descriptor 2:
3890 i64 0x100178; # uncompressed_ofs
3891 i64 0x12405;  # compressed_ofs
3892 0x100000;     # uncompressed_size
3893 0x12345;      # compressed_size
3894 ])
3895 for variant in \
3896         "be 72ebf57bffa340afe16ed79959faac09" \
3897         "le 80b34e98f6b181dcc2e8ca4ba13f768d"
3898 do
3899   set $variant
3900   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3901 ])
3902   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3903 ])
3904   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.
3905 error: `sys-file.sav' near offset 0x1c0: ZLIB block descriptor 1 reported compressed data offset 0x12405, when 0x124d5 was expected.
3906 ])
3907 done
3908 AT_CLEANUP
3909
3910 AT_SETUP([zcompressed data - uncompressed_size > block_size])
3911 AT_KEYWORDS([sack synthetic system file negative zlib])
3912 zcompressed_sack | sed 's/.*uncompressed_size.*/>>0x400000<<;/' > sys-file.sack
3913 for variant in \
3914         "be 9bb74ef407fe0b79e43c388eedc28212" \
3915         "le 6f145fb5f820c513f50b6f81310cdad5"
3916 do
3917   set $variant
3918   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3919 ])
3920   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3921 ])
3922   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.
3923 ])
3924 done
3925 AT_CLEANUP
3926
3927 AT_SETUP([zcompressed data - compression expands data too much])
3928 AT_KEYWORDS([sack synthetic system file negative zlib])
3929 zcompressed_sack | sed 's/.*uncompressed_size.*/>>50<<;/
3930 s/.*@%:@ compressed_size.*/>>100<<;/' > sys-file.sack
3931 for variant in \
3932         "be e11cadde5f0855c965a1cb388dedc36e" \
3933         "le 37953e71462b6554c5644fec8b539164"
3934 do
3935   set $variant
3936   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3937 ])
3938   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3939 ])
3940   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.
3941 ])
3942 done
3943 AT_CLEANUP
3944
3945 AT_SETUP([zcompressed data - compressed sizes don't add up])
3946 AT_KEYWORDS([sack synthetic system file negative zlib])
3947 zcompressed_sack | sed 's/.*@%:@ compressed_size.*/>>88<<;/' > sys-file.sack
3948 for variant in \
3949         "be 366eaf85be1f26fb6549e2f8ee393628" \
3950         "le a756e5125e6a908cb4990f66cc419bef"
3951 do
3952   set $variant
3953   AT_CHECK_UNQUOTED([sack --$[1] sys-file.sack > sys-file.sav], [0], [], [$[2]
3954 ])
3955   AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
3956 ])
3957   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.
3958 ])
3959 done
3960 AT_CLEANUP