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