MISSING VALUES: Report an error when too many missing values are specified.
[pspp] / tests / language / dictionary / missing-values.at
1 AT_BANNER([MISSING VALUES])
2
3 AT_SETUP([MISSING VALUES valid cases])
4 AT_DATA([missing-values.sps], [dnl
5 DATA LIST NOTABLE/str1 1-5 (A) str2 6-8 (A) date1 9-19 (DATE) num1 20-25
6                   longstr 26-36 (A).
7
8 * Numeric missing values.
9 MISSING VALUES date1 num1 (1).
10 DISPLAY DICTIONARY date1 num1.
11 MISSING VALUES date1 num1 (1, 2).
12 DISPLAY DICTIONARY date1 num1.
13 MISSING VALUES date1 num1 (1, 2, 3).
14 DISPLAY DICTIONARY date1 num1.
15 MISSING VALUES date1 num1 (9999998, 9999984, 3).
16 DISPLAY DICTIONARY date1 num1.
17
18 * Numeric missing values using the first variable's format.
19 MISSING VALUES num1 date1 ('1').
20 DISPLAY DICTIONARY date1 num1.
21 MISSING VALUES num1 date1 ('1', '2').
22 DISPLAY DICTIONARY date1 num1.
23 MISSING VALUES num1 date1 ('1', '2', '3').
24 DISPLAY DICTIONARY date1 num1.
25 MISSING VALUES date1 num1 ('06-AUG-05').
26 DISPLAY DICTIONARY date1 num1.
27 MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78').
28 DISPLAY DICTIONARY date1 num1.
29 MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78', '14-FEB-81').
30 DISPLAY DICTIONARY date1 num1.
31
32 * Ranges of numeric missing values.
33 MISSING VALUES num1 (1 THRU 2).
34 DISPLAY DICTIONARY num1.
35 MISSING VALUES num1 (LO THRU 2).
36 DISPLAY DICTIONARY num1.
37 MISSING VALUES num1 (LOWEST THRU 2).
38 DISPLAY DICTIONARY num1.
39 MISSING VALUES num1 (1 THRU HI).
40 DISPLAY DICTIONARY num1.
41 MISSING VALUES num1 (1 THRU HIGHEST).
42 DISPLAY DICTIONARY num1.
43
44 * A range of numeric missing values, plus an individual value.
45 MISSING VALUES num1 (1 THRU 2, 3).
46 DISPLAY DICTIONARY num1.
47 MISSING VALUES num1 (LO THRU 2, 3).
48 DISPLAY DICTIONARY num1.
49 MISSING VALUES num1 (LOWEST THRU 2, 3).
50 DISPLAY DICTIONARY num1.
51 MISSING VALUES num1 (1 THRU HI, -1).
52 DISPLAY DICTIONARY num1.
53 MISSING VALUES num1 (1 THRU HIGHEST, -1).
54 DISPLAY DICTIONARY num1.
55
56 * String missing values.
57 MISSING VALUES str1 str2 longstr ('abc  ','def').
58 DISPLAY DICTIONARY str1 str2 longstr.
59
60 * May mix variable types when clearing missing values.
61 MISSING VALUES ALL ().
62 DISPLAY DICTIONARY
63 ])
64 AT_CHECK([pspp -o pspp.csv missing-values.sps])
65 AT_CHECK([sed -n '/^$/p; /^@<:@^"@:>@*"@<:@^"@:>@*$/N; s/^\(@<:@a-z0-9@:>@*\),".*Missing Values: \(.*\)",@<:@0-9@:>@*$/\1: \2/p; s/^\(@<:@a-z0-9@:>@*\),Format: @<:@A-Z0-9.@:>@*,@<:@0-9@:>@*$/\1: none/p' pspp.csv
66 ], [0], [dnl
67 date1: 1
68 num1: 1
69
70 date1: 1; 2
71 num1: 1; 2
72
73 date1: 1; 2; 3
74 num1: 1; 2; 3
75
76 date1: 9999998; 9999984; 3
77 num1: 9999998; 9999984; 3
78
79 date1: 1
80 num1: 1
81
82 date1: 1; 2
83 num1: 1; 2
84
85 date1: 1; 2; 3
86 num1: 1; 2; 3
87
88 date1: 13342665600
89 num1: 13342665600
90
91 date1: 13342665600; 12495427200
92 num1: 13342665600; 12495427200
93
94 date1: 13342665600; 12495427200; 12570336000
95 num1: 13342665600; 12495427200; 12570336000
96
97 num1: 1 THRU 2
98
99 num1: LOWEST THRU 2
100
101 num1: LOWEST THRU 2
102
103 num1: 1 THRU HIGHEST
104
105 num1: 1 THRU HIGHEST
106
107 num1: 1 THRU 2; 3
108
109 num1: LOWEST THRU 2; 3
110
111 num1: LOWEST THRU 2; 3
112
113 num1: 1 THRU HIGHEST; -1
114
115 num1: 1 THRU HIGHEST; -1
116
117 str1: ""abc  ""; ""def  ""
118 str2: ""abc""; ""def""
119 longstr: ""abc     ""; ""def     ""
120
121 str1: none
122 str2: none
123 date1: none
124 num1: none
125 longstr: none
126 ])
127 AT_CLEANUP
128
129 AT_SETUP([MISSING VALUES invalid cases])
130 AT_DATA([missing-values.sps], [dnl
131 DATA LIST NOTABLE/str1 1-5 (A) str2 6-8 (A) date1 9-19 (DATE) num1 20-25
132                   longstr 26-36 (A).
133
134 * Too long for str2.
135 MISSING VALUES str1 str2 longstr ('abcde').
136
137 * Long string missing value longer than 8 bytes.
138 MISSING VALUES longstr ('abcdefghijk').
139
140 * No string ranges.
141 MISSING VALUES str1 ('a' THRU 'z').
142
143 * Mixing string and numeric variables.
144 MISSING VALUES str1 num1 ('123').
145
146 * Too many values.
147 MISSING VALUES num1 (1, 2, 3, 4).
148 MISSING VALUES num1 (1 THRU 2, 3 THRU 4).
149 MISSING VALUES num1 (1, 2 THRU 3, 4).
150 MISSING VALUES str1 ('abc', 'def', 'ghi', 'jkl').
151
152 * Bad range.
153 MISSING VALUES num1 (2 THRU 1).
154 ])
155 AT_CHECK([pspp -O format=csv missing-values.sps], [1], [dnl
156 missing-values.sps:5: error: MISSING VALUES: Missing values provided are too long to assign to variable of width 3.
157
158 missing-values.sps:8: error: MISSING VALUES: Truncating missing value to maximum acceptable length (8 bytes).
159
160 missing-values.sps:11.26-11.29: error: MISSING VALUES: Syntax error at `THRU': expecting string.
161
162 missing-values.sps:11: error: MISSING VALUES: THRU is not a variable name.
163
164 missing-values.sps:14: error: MISSING VALUES: Cannot mix numeric variables (e.g. num1) and string variables (e.g. str1) within a single list.
165
166 missing-values.sps:17: error: MISSING VALUES: Too many numeric missing values.  At most three individual values or one value and one range are allowed.
167
168 missing-values.sps:18: error: MISSING VALUES: Too many numeric missing values.  At most three individual values or one value and one range are allowed.
169
170 missing-values.sps:19: error: MISSING VALUES: Too many numeric missing values.  At most three individual values or one value and one range are allowed.
171
172 missing-values.sps:20: error: MISSING VALUES: Too many string missing values.  At most three individual values are allowed.
173
174 missing-values.sps:23: warning: MISSING VALUES: The high end of the range (1) is below the low end (2).  The range will be treated as if reversed.
175 ])
176 AT_CLEANUP