+dnl PSPP - a program for statistical analysis.
+dnl Copyright (C) 2017 Free Software Foundation, Inc.
+dnl
+dnl This program is free software: you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation, either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
+dnl
AT_BANNER([system file reader - positive])
AT_SETUP([variable labels and missing values])
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-File label: PSPP synthetic test file: ôõöø
-
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Label: Numeric variable 2's label (ùúû),,2
-,Format: F8.0,,
-num3,Format: F8.0,,3
-,Missing Values: 1,,
-num4,Label: Another numeric variable label,,4
-,Format: F8.0,,
-,Missing Values: 1,,
-num5,Format: F8.0,,5
-,Missing Values: 1; 2,,
-num6,Format: F8.0,,6
-,Missing Values: 1; 2; 3,,
-num7,Format: F8.0,,7
-,Missing Values: 1 THRU 3,,
-num8,Format: F8.0,,8
-,Missing Values: 1 THRU 3; 5,,
-num9,Format: F8.0,,9
-,Missing Values: 1 THRU HIGHEST; -5,,
-numàèìñò,Format: F8.0,,10
-,Missing Values: LOWEST THRU 1; 5,,
-str1,Format: A4,,11
-str2,Label: String variable 2's label,,12
-,Format: A4,,
-str3,Format: A4,,13
-,"Missing Values: ""MISS""",,
-str4,Label: Another string variable label,,14
-,Format: A4,,
-,"Missing Values: ""OTHR""",,
-str5,Format: A4,,15
-,"Missing Values: ""MISS""; ""OTHR""",,
-str6,Format: A4,,16
-,"Missing Values: ""MISS""; ""OTHR""; ""MORE""",,
-str7,Format: A11,,17
-,"Missing Values: ""first8by""",,
-str8,Format: A9,,18
-,"Missing Values: ""abcdefgh""",,
-str9,Format: A10,,19
-,"Missing Values: ""abcdefgh""; ""01234567""",,
-str10,Format: A11,,20
-,"Missing Values: ""abcdefgh""; ""01234567""; ""0 """,,
-str11,Label: 25-byte string,,21
-,Format: A25,,
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: File Label
+Label,PSPP synthetic test file: ôõöø
+
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,Numeric variable 2's label (ùúû),Scale,Input,8,Right,F8.0,F8.0,
+num3,3,,Scale,Input,8,Right,F8.0,F8.0,1
+num4,4,Another numeric variable label,Scale,Input,8,Right,F8.0,F8.0,1
+num5,5,,Scale,Input,8,Right,F8.0,F8.0,1; 2
+num6,6,,Scale,Input,8,Right,F8.0,F8.0,1; 2; 3
+num7,7,,Scale,Input,8,Right,F8.0,F8.0,1 THRU 3
+num8,8,,Scale,Input,8,Right,F8.0,F8.0,1 THRU 3; 5
+num9,9,,Scale,Input,8,Right,F8.0,F8.0,1 THRU HIGHEST; -5
+numàèìñò,10,,Scale,Input,8,Right,F8.0,F8.0,LOWEST THRU 1; 5
+str1,11,,Nominal,Input,4,Left,A4,A4,
+str2,12,String variable 2's label,Nominal,Input,4,Left,A4,A4,
+str3,13,,Nominal,Input,4,Left,A4,A4,"""MISS"""
+str4,14,Another string variable label,Nominal,Input,4,Left,A4,A4,"""OTHR"""
+str5,15,,Nominal,Input,4,Left,A4,A4,"""MISS""; ""OTHR"""
+str6,16,,Nominal,Input,4,Left,A4,A4,"""MISS""; ""OTHR""; ""MORE"""
+str7,17,,Nominal,Input,11,Left,A11,A11,"""first8by"""
+str8,18,,Nominal,Input,9,Left,A9,A9,"""abcdefgh"""
+str9,19,,Nominal,Input,10,Left,A10,A10,"""abcdefgh""; ""01234567"""
+str10,20,,Nominal,Input,11,Left,A11,A11,"""abcdefgh""; ""01234567""; ""0 """
+str11,21,25-byte string,Nominal,Input,25,Left,A25,A25,
Table: Data List
num1,num2,num3,num4,num5,num6,num7,num8,num9,numàèìñò,str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11
2; dnl Layout code
-1; dnl Nominal case size (unspecified)
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
1; dnl 1 case.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
999; 0;
dnl Data.
-1.0; 2.0;
+1.0; 2.0;
])
for variant in be le; do
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Label: Numeric variable 2's label,,2
-,Format: F8.0,,
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,Numeric variable 2's label,Scale,Input,8,Right,F8.0,F8.0,
Table: Data List
num1,num2
2; dnl Layout code
-1; dnl Nominal case size (unspecified)
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
1; dnl 1 case.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
999; 0;
dnl Data.
-1.0; 2.0;
+1.0; 2.0;
])
for variant in be le; do
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Label: Numeric variable 2's label,,2
-,Format: F8.0,,
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,Numeric variable 2's label,Scale,Input,8,Right,F8.0,F8.0,
Table: Data List
num1,num2
2; dnl Layout code
22; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
1; dnl 1 case.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
DISPLAY DICTIONARY.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-,1,один (in Russian),
-num2,Format: F8.0,,2
-,1,one,
-,2,two,
-num3,Format: F8.0,,3
-,3,three,
-,4,four,
-num4,Format: F8.0,,4
-,5,five,
-,7,seven,
-,8,eight,
-,9,nine,
-num5,Format: F8.0,,5
-,6,six,
-,7,seven,
-,8,eight,
-,10,ten,
-str1,Format: A1,,6
-,a,value label for `a',
-str2,Format: A2,,7
-,bc,value label for `bc',
-,de,value label for `de',
-str3,Format: A3,,8
-,fgh,value label for `fgh',
-,ijk,value label for `ijk',
-str4,Format: A4,,9
-,BCDE,value label for `BCDE',
-,lmno,value label for `lmno',
-,tuvw,value label for `tuvw',
-,xyzA,value label for `xyzA',
-str5,Format: A4,,10
-,FGHI,value label for `FGHI',
-,pqrs,value label for `pqrs',
-,tuvw,value label for `tuvw',
-,xyzA,value label for `xyzA',
-str6,Format: A6,,11
-,JKLMNO,value label for `JKLMNO',
-str7,Format: A7,,12
-,JKLMNOP,value label for `JKLMNOP',
-str8,Format: A8,,13
-,JKLMNOPQ,value label for `JKLMNOPQ',
-str9ж,Format: A9,,14
-,RSTUVWXYZ,value label for `RSTUVWXYZ',
-str12,Format: A12,,15
-,0123456789ab,value label for `0123456789ab',
-,cdefghijklmn,value label for `cdefghijklmn',
-str16,Format: A16,,16
-,EFGHIJKLMNOPQRST,value label for `EFGHIJKLMNOPQRST',
-,UVWXYZ0123456789,value label for `UVWXYZ0123456789' with Cyrillic letters: `фхц',
-,opqrstuvwxyzABCD,value label for `opqrstuvwxyzABCD',
-str17,Format: A17,,17
-,abcdefghijklmnopq,value label for `abcdefghijklmnopq',
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,,Scale,Input,8,Right,F8.0,F8.0,
+num3,3,,Scale,Input,8,Right,F8.0,F8.0,
+num4,4,,Scale,Input,8,Right,F8.0,F8.0,
+num5,5,,Scale,Input,8,Right,F8.0,F8.0,
+str1,6,,Nominal,Input,1,Left,A1,A1,
+str2,7,,Nominal,Input,2,Left,A2,A2,
+str3,8,,Nominal,Input,3,Left,A3,A3,
+str4,9,,Nominal,Input,4,Left,A4,A4,
+str5,10,,Nominal,Input,4,Left,A4,A4,
+str6,11,,Nominal,Input,6,Left,A6,A6,
+str7,12,,Nominal,Input,7,Left,A7,A7,
+str8,13,,Nominal,Input,8,Left,A8,A8,
+str9ж,14,,Nominal,Input,9,Left,A9,A9,
+str12,15,,Nominal,Input,12,Left,A12,A12,
+str16,16,,Nominal,Input,16,Left,A16,A16,
+str17,17,,Nominal,Input,17,Left,A17,A17,
+
+Table: Value Labels
+Variable Value,,Label
+num1,1,один (in Russian)
+num2,1,one
+,2,two
+num3,3,three
+,4,four
+num4,5,five
+,7,seven
+,8,eight
+,9,nine
+num5,6,six
+,7,seven
+,8,eight
+,10,ten
+str1,a,value label for `a'
+str2,bc,value label for `bc'
+,de,value label for `de'
+str3,fgh,value label for `fgh'
+,ijk,value label for `ijk'
+str4,BCDE,value label for `BCDE'
+,lmno,value label for `lmno'
+,tuvw,value label for `tuvw'
+,xyzA,value label for `xyzA'
+str5,FGHI,value label for `FGHI'
+,pqrs,value label for `pqrs'
+,tuvw,value label for `tuvw'
+,xyzA,value label for `xyzA'
+str6,JKLMNO,value label for `JKLMNO'
+str7,JKLMNOP,value label for `JKLMNOP'
+str8,JKLMNOPQ,value label for `JKLMNOPQ'
+str9ж,RSTUVWXYZ,value label for `RSTUVWXYZ'
+str12,0123456789ab,value label for `0123456789ab'
+,cdefghijklmn,value label for `cdefghijklmn'
+str16,EFGHIJKLMNOPQRST,value label for `EFGHIJKLMNOPQRST'
+,UVWXYZ0123456789,value label for `UVWXYZ0123456789' with Cyrillic letters: `фхц'
+,opqrstuvwxyzABCD,value label for `opqrstuvwxyzABCD'
+str17,abcdefghijklmnopq,value label for `abcdefghijklmnopq'
])
done
AT_CLEANUP
2; dnl Layout code
1; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
1; dnl 1 case.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
-Documents in the active dataset:
+Table: Documents
+"First line of documents
+Second line of documents
+abbé appliqué attaché blasé café canapé cliché consommé
-First line of documents
+Last line of documents"
-Second line of documents
+Table: Data List
+num1
+1
+])
+done
+AT_CLEANUP
-abbé appliqué attaché blasé café canapé cliché consommé
+AT_SETUP([empty document record])
+AT_KEYWORDS([sack synthetic system file positive])
+AT_DATA([sys-file.sack], [dnl
+dnl File header.
+"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
+2; dnl Layout code
+1; dnl Nominal case size
+0; dnl Not compressed
+0; dnl Not weighted
+1; dnl 1 case.
+100.0; dnl Bias.
+"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
+i8 0 *3;
+
+dnl Numeric variable, no label or missing values.
+2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
+dnl Machine integer info record.
+7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
+dnl Document record.
+6; 0;
-Last line of documents
+dnl Character encoding record.
+7; 20; 1; 12; "windows-1252";
+dnl Dictionary termination record.
+999; 0;
+
+dnl Data.
+1.0;
+])
+for variant in be le; do
+ AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
+ AT_DATA([sys-file.sps], [dnl
+GET FILE='sys-file.sav'.
+LIST.
+])
+ AT_CHECK([pspp -o pspp.csv sys-file.sps])
+ AT_CHECK([cat pspp.csv], [0], [dnl
Table: Data List
num1
1
2; dnl Layout code
16; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
0; dnl No cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
AT_CHECK([pspp -o pspp.csv sys-file.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
Table: Multiple Response Sets
-Name,Variables,Details
-$a,"あ
+Name,Label,Encoding,Counted Value,Member Variables
+$a,my mcgroup,Categories,,"あ
b
-c
-","Multiple category set
-Label: my mcgroup
-"
-$b,"g
+c"
+$b,,Dichotomies,55,"g
e
f
-d
-","Multiple dichotomy set
-Counted value: 55
-Category label source: Variable labels
-"
-$c,"h
+d"
+$c,mdgroup #2,Dichotomies,はい,"h
i
-j
-","Multiple dichotomy set
-Label: mdgroup #2
-Label source: Provided by user
-Counted value: `はい'
-Category label source: Variable labels
-"
-$d,"k
+j"
+$d,third mdgroup,Dichotomies,34,"k
l
-m
-","Multiple dichotomy set
-Label: third mdgroup
-Label source: Provided by user
-Counted value: 34
-Category label source: Value labels of counted value
-"
-$e,"n
+m"
+$e,,Dichotomies,choice,"n
o
-p
-","Multiple dichotomy set
-Label source: First variable label among variables
-Counted value: `choice'
-Category label source: Value labels of counted value
-"
+p"
])
done
AT_CLEANUP
SYSFILE INFO FILE='sys-file.sav'.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([sed 7q pspp.csv], [0], [dnl
-File:,sys-file.sav
-Label:,"PSPP synthetic
+ AT_CHECK([sed 8q pspp.csv], [0], [dnl
+Table: File Information
+File,sys-file.sav
+Label,"PSPP synthetic
test file"
-Created:,01 Jan 11 20:53:52 by $(@%:@) SPSS DATA FILE PSPP synthetic test file
-Product:,"Extra product info
+Created,01 Jan 11 20:53:52 by $(@%:@) SPSS DATA FILE PSPP synthetic test file
+Product,"Extra product info
another line
blah"
])
2; dnl Layout code
19; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
0; dnl No cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
-Variable,Description,,Position
-a,Format: F8.0,,1
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-b,Format: F8.0,,2
-,Measure: Ordinal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-c,Format: F8.0,,3
-,Measure: Scale,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-d,Format: F8.0,,4
-,Measure: Nominal,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-h,Format: A3,,5
-,Measure: Ordinal,,
-,Display Alignment: Right,,
-,Display Width: 3,,
-i,Format: A3,,6
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 3,,
-j,Format: A3,,7
-,Measure: Nominal,,
-,Display Alignment: Center,,
-,Display Width: 3,,
-k,Format: A3,,8
-,Measure: Ordinal,,
-,Display Alignment: Center,,
-,Display Width: 3,,
-l,Format: A9,,9
-,Measure: Scale,,
-,Display Alignment: Center,,
-,Display Width: 9,,
-m,Format: A10,,10
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-n,Format: A17,,11
-,Measure: Nominal,,
-,Display Alignment: Right,,
-,Display Width: 17,,
-o,Format: A25,,12
-,Measure: Nominal,,
-,Display Alignment: Center,,
-,Display Width: 25,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+a,1,,Nominal,Input,8,Left,F8.0,F8.0,
+b,2,,Ordinal,Input,8,Left,F8.0,F8.0,
+c,3,,Scale,Input,8,Left,F8.0,F8.0,
+d,4,,Nominal,Input,8,Right,F8.0,F8.0,
+h,5,,Ordinal,Input,3,Right,A3,A3,
+i,6,,Scale,Input,3,Right,A3,A3,
+j,7,,Nominal,Input,3,Center,A3,A3,
+k,8,,Ordinal,Input,3,Center,A3,A3,
+l,9,,Scale,Input,9,Center,A9,A9,
+m,10,,Nominal,Input,10,Left,A10,A10,
+n,11,,Nominal,Input,17,Right,A17,A17,
+o,12,,Nominal,Input,25,Center,A25,A25,
])
done
AT_CLEANUP
2; dnl Layout code
19; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
0; dnl No cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
AT_CHECK([cat pspp.csv], [0], [dnl
-Variable,Description,,Position
-a,Format: F8.0,,1
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 1,,
-b,Format: F8.0,,2
-,Measure: Ordinal,,
-,Display Alignment: Left,,
-,Display Width: 2,,
-c,Format: F8.0,,3
-,Measure: Scale,,
-,Display Alignment: Left,,
-,Display Width: 3,,
-d,Format: F8.0,,4
-,Measure: Nominal,,
-,Display Alignment: Right,,
-,Display Width: 4,,
-h,Format: A3,,5
-,Measure: Ordinal,,
-,Display Alignment: Right,,
-,Display Width: 5,,
-i,Format: A3,,6
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 6,,
-j,Format: A3,,7
-,Measure: Nominal,,
-,Display Alignment: Center,,
-,Display Width: 7,,
-k,Format: A3,,8
-,Measure: Ordinal,,
-,Display Alignment: Center,,
-,Display Width: 8,,
-l,Format: A9,,9
-,Measure: Scale,,
-,Display Alignment: Center,,
-,Display Width: 9,,
-m,Format: A10,,10
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-n,Format: A17,,11
-,Measure: Nominal,,
-,Display Alignment: Right,,
-,Display Width: 11,,
-o,Format: A25,,12
-,Measure: Nominal,,
-,Display Alignment: Center,,
-,Display Width: 12,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+a,1,,Nominal,Input,1,Left,F8.0,F8.0,
+b,2,,Ordinal,Input,2,Left,F8.0,F8.0,
+c,3,,Scale,Input,3,Left,F8.0,F8.0,
+d,4,,Nominal,Input,4,Right,F8.0,F8.0,
+h,5,,Ordinal,Input,5,Right,A3,A3,
+i,6,,Scale,Input,6,Right,A3,A3,
+j,7,,Nominal,Input,7,Center,A3,A3,
+k,8,,Ordinal,Input,8,Center,A3,A3,
+l,9,,Scale,Input,9,Center,A9,A9,
+m,10,,Nominal,Input,10,Left,A10,A10,
+n,11,,Nominal,Input,11,Right,A17,A17,
+o,12,,Nominal,Input,12,Center,A25,A25,
])
done
AT_CLEANUP
2; dnl Layout code
7; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
0; dnl No cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
DISPLAY DICTIONARY.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-LongVariableName1,Format: F8.0,,1
-LongVariableName2,Format: F8.0,,2
-LongVariableName3,Format: F8.0,,3
-LongVariableName4,Format: F8.0,,4
-Coördinate_X,Format: F8.0,,5
-Coördinate_Y,Format: F8.0,,6
-Coördinate_Z,Format: F8.0,,7
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+LongVariableName1,1,,Scale,Input,8,Right,F8.0,F8.0,
+LongVariableName2,2,,Scale,Input,8,Right,F8.0,F8.0,
+LongVariableName3,3,,Scale,Input,8,Right,F8.0,F8.0,
+LongVariableName4,4,,Scale,Input,8,Right,F8.0,F8.0,
+Coördinate_X,5,,Scale,Input,8,Right,F8.0,F8.0,
+Coördinate_Y,6,,Scale,Input,8,Right,F8.0,F8.0,
+Coördinate_Z,7,,Scale,Input,8,Right,F8.0,F8.0,
])
done
AT_CLEANUP
2; dnl Layout code
109; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
1; dnl No cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-séq256,Format: A256,,1
-str600,Format: A600,,2
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+séq256,1,,Nominal,Input,32,Left,A256,A256,
+str600,2,,Nominal,Input,32,Left,A600,A600,
Table: Data List
séq256,str600
dnl File header.
"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
2; dnl Layout code
-2; dnl Nominal case size
+3; dnl Nominal case size
0; dnl Not compressed
-0; dnl Not weighted
+0; dnl Not weighted
0; dnl 1 case.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
dnl Variables.
2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
2; 0; 0; 0; 0x050800 *2; s8 "SECONDVA";
+2; 0; 0; 0; 0x050800 *2; s8 "THIRDVAR";
dnl Machine integer info record.
7; 3; 4; 8; 1; 2; 3; -1; 1; 1; ENDIAN; 1252;
7; 13; 1; COUNT (
"FIRSTVAR=FirstVariable"; i8 9;
"SECONDVA=S"; i8 233; "condVariable"; i8 9;
+"THIRDVAR=ThirdVariable"; i8 9
);
dnl Data file attributes record.
"xyzzy('quux'"; i8 10; ")";
);
+dnl Another variable attributes record.
+dnl Only system files written by "Stata 14.1/-savespss- 1.77 by S.Radyakin"
+dnl include multiple variable attributes records.
+7; 18; 1; COUNT ("ThirdVariable:fizz('buzz'"; i8 10; ")";);
dnl Character encoding record.
7; 20; 1; 12; "windows-1252";
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
AT_CHECK([cat pspp.csv], [0],
-[[Variable,Description,
-FirstVariable,Custom attributes:,
-,$@Role,1
+[[Table: Variable and Dataset Attributes
+Variable and Name,,Value
+(dataset),Attr1[1],Value1
+,Attr1[2],'déclaration'
+,SécondAttr[1],123
+,SécondAttr[2],456
+FirstVariable,$@Role,1
,adèle[1],23
,adèle[2],34
,bert,123
-SécondVariable,Custom attributes:,
-,xyzzy,quux
-
-Table: Custom data file attributes.
-Attribute,Value
-Attr1[1],Value1
-Attr1[2],'déclaration'
-SécondAttr[1],123
-SécondAttr[2],456
+SécondVariable,xyzzy,quux
+ThirdVariable,fizz,buzz
]])
AT_DATA([sys-file.sps], [dnl
GET FILE='sys-file.sav'.
DISPLAY DICTIONARY.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0],
-[[Variable,Description,,Position
-FirstVariable,Format: F8.0,,1
-,Role: Output,,
-,Custom attributes:,,
-,adèle[1],23,
-,adèle[2],34,
-,bert,123,
-SécondVariable,Format: F8.0,,2
-,Custom attributes:,,
-,xyzzy,quux,
-
-Table: Custom data file attributes.
-Attribute,Value
-Attr1[1],Value1
-Attr1[2],'déclaration'
-SécondAttr[1],123
-SécondAttr[2],456
+ AT_CHECK([cat pspp.csv], [0],
+[[Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+FirstVariable,1,,Scale,Output,8,Right,F8.0,F8.0,
+SécondVariable,2,,Scale,Input,8,Right,F8.0,F8.0,
+ThirdVariable,3,,Scale,Input,8,Right,F8.0,F8.0,
]])
done
AT_CLEANUP
AT_CHECK([pspp -o pspp.csv sys-file.sps], [0], [dnl
warning: `sys-file.sav': Invalid role for variable x.
])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
+ AT_CHECK([cat pspp.csv], [0], [dnl
warning: `sys-file.sav': Invalid role for variable x.
-Variable,Description,,Position
-i,Format: F8.0,,1
-o,Format: F8.0,,2
-,Role: Output,,
-b,Format: F8.0,,3
-,Role: Both,,
-n,Format: F8.0,,4
-,Role: None,,
-p,Format: F8.0,,5
-,Role: Partition,,
-s,Format: F8.0,,6
-,Role: Split,,
-x,Format: F8.0,,7
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+i,1,,Scale,Input,8,Right,F8.0,F8.0,
+o,2,,Scale,Output,8,Right,F8.0,F8.0,
+b,3,,Scale,Both,8,Right,F8.0,F8.0,
+n,4,,Scale,None,8,Right,F8.0,F8.0,
+p,5,,Scale,Partition,8,Right,F8.0,F8.0,
+s,6,,Scale,Split,8,Right,F8.0,F8.0,
+x,7,,Scale,Input,8,Right,F8.0,F8.0,
])
done
AT_CLEANUP
2; dnl Layout code
6; dnl Nominal case size
1; dnl Simple compression
-0; dnl Not weighted
+0; dnl Not weighted
-1; dnl Unspecified number of cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Format: F8.0,,2
-str4,Format: A4,,3
-str8,Format: A8,,4
-str15,Format: A15,,5
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,,Scale,Input,8,Right,F8.0,F8.0,
+str4,3,,Nominal,Input,4,Left,A4,A4,
+str8,4,,Nominal,Input,8,Left,A8,A8,
+str15,5,,Nominal,Input,15,Left,A15,A15,
Table: Data List
num1,num2,str4,str8,str15
--99,0,,abcdefgh,0123 @&t@
-.,151,jklm,nopqrstu,vwxyzABC @&t@
+-99,0,,abcdefgh,0123
+.,151,jklm,nopqrstu,vwxyzABC
1,2,DEFG,HIJKLMNO,PQRSTUV
])
done
2; dnl Layout code
6; dnl Nominal case size
1; dnl Simple compression.
-0; dnl Not weighted
+0; dnl Not weighted
-1; dnl Unspecified number of cases.
0.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps], [0])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Format: F8.0,,2
-str4,Format: A4,,3
-str8,Format: A8,,4
-str15,Format: A15,,5
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,,Scale,Input,8,Right,F8.0,F8.0,
+str4,3,,Nominal,Input,4,Left,A4,A4,
+str8,4,,Nominal,Input,8,Left,A8,A8,
+str15,5,,Nominal,Input,15,Left,A15,A15,
Table: Data List
num1,num2,str4,str8,str15
-1,100,,abcdefgh,0123 @&t@
-.,251,jklm,nopqrstu,vwxyzABC @&t@
+1,100,,abcdefgh,0123
+.,251,jklm,nopqrstu,vwxyzABC
101,102,DEFG,HIJKLMNO,PQRSTUV
])
done
2; dnl Layout code
6; dnl Nominal case size
1; dnl Simple compression.
-0; dnl Not weighted
+0; dnl Not weighted
-1; dnl Unspecified number of cases.
50.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
DISPLAY DICTIONARY.
LIST.
])
- AT_CHECK([pspp -o pspp.csv sys-file.sps], [0],
+ AT_CHECK([pspp -o pspp.csv sys-file.sps], [0],
[warning: `sys-file.sav' near offset 0x54: Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format.
])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
+ AT_CHECK([cat pspp.csv], [0], [dnl
"warning: `sys-file.sav' near offset 0x54: Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format."
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Format: F8.0,,2
-str4,Format: A4,,3
-str8,Format: A8,,4
-str15,Format: A15,,5
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,,Scale,Input,8,Right,F8.0,F8.0,
+str4,3,,Nominal,Input,4,Left,A4,A4,
+str8,4,,Nominal,Input,8,Left,A8,A8,
+str15,5,,Nominal,Input,15,Left,A15,A15,
Table: Data List
num1,num2,str4,str8,str15
--49,50,,abcdefgh,0123 @&t@
-.,201,jklm,nopqrstu,vwxyzABC @&t@
+-49,50,,abcdefgh,0123
+.,201,jklm,nopqrstu,vwxyzABC
51,52,DEFG,HIJKLMNO,PQRSTUV
])
done
LIST.
])
AT_CHECK([pspp -o pspp.csv sys-file.sps])
- AT_CHECK([grep -v Measure pspp.csv | grep -v Display], [0], [dnl
-Variable,Description,,Position
-num1,Format: F8.0,,1
-num2,Format: F8.0,,2
-str4,Format: A4,,3
-str8,Format: A8,,4
-str15,Format: A15,,5
+ AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+num2,2,,Scale,Input,8,Right,F8.0,F8.0,
+str4,3,,Nominal,Input,4,Left,A4,A4,
+str8,4,,Nominal,Input,8,Left,A8,A8,
+str15,5,,Nominal,Input,15,Left,A15,A15,
Table: Data List
num1,num2,str4,str8,str15
--99,0,,abcdefgh,0123 @&t@
-.,151,jklm,nopqrstu,vwxyzABC @&t@
+-99,0,,abcdefgh,0123
+.,151,jklm,nopqrstu,vwxyzABC
1,2,DEFG,HIJKLMNO,PQRSTUV
])
done
\f
AT_BANNER([system file reader - negative])
+AT_SETUP([no variables])
+AT_KEYWORDS([sack synthetic system file negative])
+AT_DATA([sys-file.sack], [dnl
+dnl File header.
+"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
+2; dnl Layout code
+0; dnl Nominal case size (empty)
+0; dnl Not compressed
+0; dnl Not weighted
+0; dnl 0 cases.
+100.0; dnl Bias.
+"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
+i8 0 *3;
+
+dnl Character encoding record.
+7; 20; 1; 12; "windows-1252";
+
+dnl Dictionary termination record.
+999; 0;
+])
+for variant in be le; do
+ AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
+ AT_DATA([sys-file.sps], [dnl
+GET FILE='sys-file.sav'.
+])
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
+sys-file.sps:1: error: GET: `sys-file.sav': Data file dictionary has no variables.
+])
+
+ dnl At one point pspp-convert would hang forever if there were no variables,
+ dnl so check against regression.
+ AT_CHECK([pspp-convert sys-file.sav sys-file.txt])
+ AT_CHECK([cat sys-file.txt], [0], [
+])
+done
+AT_CLEANUP
+
AT_SETUP([unspecified character encoding])
AT_KEYWORDS([sack synthetic system file positive])
AT_DATA([sys-file.sack], [dnl
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xd4: Misplaced type 4 record.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xd4: Unrecognized record type 8.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [0],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [0],
[warning: `sys-file.sav': File header claims 2 variable positions but 1 were read from file.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xb4: Invalid variable name `$UM1'.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xb4: Invalid variable name `TO'.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xb4: Bad width 256 for variable VAR1.
])
done
AT_CHECK([pspp -O format=csv sys-file.sps], [0],
[warning: `sys-file.sav' near offset 0xd4: Renaming variable with duplicate name `VAR1' to `VAR001'.
-Variable,Description,,Position
-var1,Format: F8.0,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-var001,Format: F8.0,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+var1,1,,Scale,Input,8,Right,F8.0,F8.0,
+var001,2,,Scale,Input,8,Right,F8.0,F8.0,
])
done
AT_CLEANUP
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xb4: Variable label indicator field is not 0 or 1.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
["error: `sys-file.sav' near offset 0xb4: Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
["error: `sys-file.sav' near offset 0xb4: String missing value indicator field is not 0, 1, 2, or 3."
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0xb4: Missing string continuation record.
])
done
"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."
-Variable,Description,,Position
-num1,Format: F8.0,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-str1,Format: A9,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 9,,
-str2,Format: A10,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-,"Missing Values: ""abcdefgh""; ""ijklmnop""; ""qrstuvwx""",,
-str3,Format: A11,,4
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 11,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+str1,2,,Nominal,Input,9,Left,A9,A9,
+str2,3,,Nominal,Input,10,Left,A10,A10,"""abcdefgh""; ""ijklmnop""; ""qrstuvwx"""
+str3,4,,Nominal,Input,11,Left,A11,A11,
])
done
AT_CLEANUP
AT_CHECK([pspp -O format=csv sys-file.sps], [0],
[warning: `sys-file.sav': Ignoring string variable `STR1' set as weighting variable.
-Variable,Description,,Position
-num1,Format: F8.0,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-str1,Format: A4,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 4,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
+str1,2,,Nominal,Input,4,Left,A4,A4,
])
done
AT_CLEANUP
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0x4c: Variable index 3 not in valid range 1...2.
])
done
AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0x4c: Variable index 3 refers to long string continuation.
])
done
AT_CLEANUP
-AT_SETUP([empty document record])
-AT_KEYWORDS([sack synthetic system file negative])
-AT_DATA([sys-file.sack], [dnl
-dnl File header.
-"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
-2; 2; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
-
-dnl Numeric variable, no label or missing values.
-2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
-
-dnl Empty document record.
-6; >>0<<;
-
-dnl Dictionary termination record.
-999; 0;
-
-dnl Data.
-1.0;
-])
-for variant in be le; do
- AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
- AT_DATA([sys-file.sps], [dnl
-GET FILE='sys-file.sav'.
-])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1], [dnl
-error: `sys-file.sav' near offset 0xd4: Number of document lines (0) must be greater than 0 and less than 26843545.
-])
-done
-AT_CLEANUP
-
AT_SETUP([extension record too large])
AT_KEYWORDS([sack synthetic system file negative])
AT_DATA([sys-file.sack], [dnl
AT_DATA([sys-file.sps], [dnl
GET FILE='sys-file.sav'.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
-"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."
+ AT_CHECK_UNQUOTED([pspp -O format=csv sys-file.sps], [0], [dnl
+"warning: \`sys-file.sav' near offset 0xd8: Unrecognized record type 7, subtype 30. For help, please send this file to ${PACKAGE_BUGREPORT} and mention that you were using ${PACKAGE_STRING}."
])
done
AT_CLEANUP
AT_CHECK_UNQUOTED([pspp -O format=csv sys-file.sps], [0], [dnl
warning: \`sys-file.sav' near offset 0xd8: Integer format indicated by system file (3) differs from expected ($[2]).
-Variable,Description,,Position
-num1,Format: F8.0,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
+Table: Variables
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
+num1,1,,Scale,Input,8,Right,F8.0,F8.0,
])
done
AT_CLEANUP
MRSETS /DISPLAY NAME=ALL.
])
AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
-warning: `sys-file.sav': Multiple response set name `b' does not begin with `$'.
+warning: `sys-file.sav': Invalid multiple response set name `b'.
-warning: `sys-file.sav': Multiple response set name `e' does not begin with `$'.
+warning: `sys-file.sav': Invalid multiple response set name `e'.
Table: Multiple Response Sets
-Name,Variables,Details
-$a,"あ
+Name,Label,Encoding,Counted Value,Member Variables
+$a,my mcgroup,Categories,,"あ
b
-c
-","Multiple category set
-Label: my mcgroup
-"
-$c,"h
+c"
+$c,mdgroup #2,Dichotomies,はい,"h
i
-j
-","Multiple dichotomy set
-Label: mdgroup #2
-Label source: Provided by user
-Counted value: `はい'
-Category label source: Variable labels
-"
-$d,"k
+j"
+$d,third mdgroup,Dichotomies,34,"k
l
-m
-","Multiple dichotomy set
-Label: third mdgroup
-Label source: Provided by user
-Counted value: 34
-Category label source: Value labels of counted value
-"
+m"
])
done
AT_CLEANUP
done
AT_CLEANUP
+AT_SETUP([missing label source in mrsets])
+AT_KEYWORDS([sack synthetic system file negative multiple response])
+AT_DATA([sys-file.sack], [dnl
+dnl File header.
+"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
+2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
+
+dnl Numeric variable, no label or missing values.
+2; 0; 0; 0; 0x050800 *2; s8 "NUM1";
+
+dnl Multiple response sets.
+7; 7; 1; COUNT("$a=E ");
+
+dnl Character encoding record.
+7; 20; 1; 12; "windows-1252";
+
+999; 0;
+])
+for variant in be le; do
+ AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
+ AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
+])
+ AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
+warning: `sys-file.sav' near offset 0xd8: Missing label source value following `E' at offset 5 in MRSETS record.
+
+warning: `sys-file.sav' near offset 0xd8: Expecting digit at offset 5 in MRSETS record.
+])
+done
+AT_CLEANUP
+
AT_SETUP([unexpected label source in mrsets])
AT_KEYWORDS([sack synthetic system file negative multiple response])
AT_DATA([sys-file.sack], [dnl
dnl Long variable names.
7; 13; 1; COUNT (
"LONGVARI=_Invalid"; i8 9;
+"LONGVARI=$Invalid"; i8 9;
+"LONGVARI=#Invalid"; i8 9;
"LONGVA_A=LongVariableName"; i8 9;
"LONGVA_B=LONGVARIABLENAME"; i8 9;
);
AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
warning: `sys-file.sav' near offset 0x138: Long variable mapping from LONGVARI to invalid variable name `_Invalid'.
+warning: `sys-file.sav' near offset 0x138: Long variable mapping from LONGVARI to invalid variable name `$Invalid'.
+
+warning: `sys-file.sav' near offset 0x138: Long variable mapping from LONGVARI to invalid variable name `#Invalid'.
+
warning: `sys-file.sav' near offset 0x138: Duplicate long variable name `LONGVARIABLENAME'.
])
done
done
AT_CLEANUP
+AT_SETUP([duplicate attribute name])
+AT_KEYWORDS([sack synthetic system file negative])
+AT_DATA([sys-file.sack], [dnl
+dnl File header.
+"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
+2; 1; 1; 0; -1; 100.0; "01 Jan 11"; "20:53:52"; s64 ""; i8 0 *3;
+
+dnl Variables.
+2; 0; 0; 0; 0x050800 *2; s8 "FIRSTVAR";
+
+dnl Data file attributes record.
+7; 17; 1; COUNT (
+"Attr1('value'"; i8 10; ")";
+"Attr1('value'"; i8 10; ")";
+);
+
+dnl Variable attributes record.
+7; 18; 1; COUNT (
+"FIRSTVAR:";
+ "fred('23'"; i8 10; ")";
+ "fred('23'"; i8 10; ")";
+);
+
+dnl Character encoding record.
+7; 20; 1; 12; "windows-1252";
+
+dnl Dictionary termination record.
+999; 0;
+])
+for variant in be le; do
+ AT_CHECK([sack --$variant sys-file.sack > sys-file.sav])
+ AT_DATA([sys-file.sps], [dnl
+GET FILE='sys-file.sav'.
+])
+ AT_CHECK([pspp -O format=csv sys-file.sps], [0], [dnl
+warning: `sys-file.sav' near offset 0xf6: Duplicate attribute Attr1.
+
+warning: `sys-file.sav' near offset 0x125: Duplicate attribute fred.
+])
+done
+AT_CLEANUP
+
AT_SETUP([bad variable name in long string value label])
AT_KEYWORDS([sack synthetic system file negative])
AT_DATA([sys-file.sack], [dnl
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
LIST.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: Error reading case from file `sys-file.sav'.
Table: Data List
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
LIST.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0x12c: File ends in partial case.
Table: Data List
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
LIST.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0x12a: Unexpected end of file.
Table: Data List
str14
-one data item @&t@
+one data item
])
done
AT_CLEANUP
2; dnl Layout code
6; dnl Nominal case size
1; dnl Compressed
-0; dnl Not weighted
+0; dnl Not weighted
-1; dnl Unspecified number of cases.
100.0; dnl Bias.
"01 Jan 11"; "20:53:52"; s64 "PSPP synthetic test file";
AT_DATA([sys-file.sps], [GET FILE='sys-file.sav'.
LIST.
])
- AT_CHECK([pspp -O format=csv sys-file.sps], [1],
+ AT_CHECK([pspp -O format=csv sys-file.sps], [1],
[error: `sys-file.sav' near offset 0x1ac: File ends in partial case.
Table: Data List
num1,num2,str4,str8,str15
--99,0,,abcdefgh,0123 @&t@
+-99,0,,abcdefgh,0123
])
done
AT_CLEANUP
])
done
AT_CLEANUP
+
+# CVE-2017-10791.
+# See also https://bugzilla.redhat.com/show_bug.cgi?id=1467004.
+# See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866890.
+# See also https://security-tracker.debian.org/tracker/CVE-2017-10791.
+# Found by team OWL337, using the collAFL fuzzer.
+AT_SETUP([integer overflows in long string missing values])
+AT_KEYWORDS([system file negative])
+cp $top_srcdir/tests/data/CVE-2017-10791.sav .
+AT_CHECK([pspp-convert -O csv -e ASCII CVE-2017-10791.sav -], [0], [], [dnl
+`CVE-2017-10791.sav' near offset 0x217: Extension record subtype 21 ends unexpectedly.
+])
+AT_CLEANUP
+
+# CVE-2017-10792.
+# See also https://bugzilla.redhat.com/show_bug.cgi?id=1467005.
+# See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=866890.
+# See also https://security-tracker.debian.org/tracker/CVE-2017-10792.
+# Reported by team OWL337, with fuzzer collAFL.
+AT_SETUP([null dereference skipping bad extension record 18])
+AT_KEYWORDS([system file negative])
+cp $top_srcdir/tests/data/CVE-2017-10792.sav .
+AT_CHECK([pspp-convert -O csv -e ASCII CVE-2017-10792.sav -], [0], [], [dnl
+`CVE-2017-10792.sav' near offset 0x1c0: Record type 7, subtype 18 has bad size 4 (expected 1).
+])
+AT_CLEANUP