variable-display: Improve coding style and error messages.
[pspp] / tests / language / dictionary / variable-display.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([variable display attributes])
18
19 AT_SETUP([variable display attribute commands])
20 AT_KEYWORDS([VARIABLE ALIGNMENT])
21 AT_KEYWORDS([VARIABLE WIDTH])
22 AT_KEYWORDS([VARIABLE LEVEL])
23 AT_KEYWORDS([VARIABLE ROLE])
24 AT_DATA([var-display.sps], [dnl
25 DATA LIST FREE /x y z.
26 VARIABLE ALIGNMENT x (LEFT)/y (RIGHT)/z (CENTER).
27 VARIABLE WIDTH x (10)/y (12)/z (14).
28 VARIABLE LEVEL x (SCALE)/y (ORDINAL)/z (NOMINAL).
29 VARIABLE ROLE /TARGET x /BOTH y /NONE z.
30 DISPLAY DICTIONARY.
31 ])
32 AT_CHECK([pspp -o pspp.csv var-display.sps])
33 AT_CHECK([cat pspp.csv], [0], [dnl
34 Table: Variables
35 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
36 x,1,Scale,Output,10,Left,F8.2,F8.2
37 y,2,Ordinal,Both,12,Right,F8.2,F8.2
38 z,3,Nominal,None,14,Center,F8.2,F8.2
39 ])
40 AT_CLEANUP
41
42 AT_SETUP([variable display attribute syntax errors])
43 AT_KEYWORDS([VARIABLE ALIGNMENT])
44 AT_KEYWORDS([VARIABLE WIDTH])
45 AT_KEYWORDS([VARIABLE LEVEL])
46 AT_KEYWORDS([VARIABLE ROLE])
47 AT_DATA([var-display.sps], [dnl
48 DATA LIST LIST NOTABLE /x y z.
49 VARIABLE ALIGNMENT **.
50 VARIABLE ALIGNMENT x **.
51 VARIABLE ALIGNMENT x (**).
52 VARIABLE ALIGNMENT x (LEFT **).
53 VARIABLE WIDTH **.
54 VARIABLE WIDTH x **.
55 VARIABLE WIDTH x (**).
56 VARIABLE WIDTH x (10 **).
57 VARIABLE LEVEL **.
58 VARIABLE LEVEL x **.
59 VARIABLE LEVEL x (**).
60 VARIABLE LEVEL x (SCALE **).
61 VARIABLE ROLE **.
62 VARIABLE ROLE / **.
63 VARIABLE ROLE /INPUT **.
64 VARIABLE ROLE /INPUT x **.
65 ])
66 AT_CHECK([pspp -O format=csv var-display.sps], [1], [dnl
67 "var-display.sps:2.20-2.21: error: VARIABLE ALIGNMENT: Syntax error expecting variable name.
68     2 | VARIABLE ALIGNMENT **.
69       |                    ^~"
70
71 "var-display.sps:3.22-3.23: error: VARIABLE ALIGNMENT: Syntax error expecting `('.
72     3 | VARIABLE ALIGNMENT x **.
73       |                      ^~"
74
75 "var-display.sps:4.23-4.24: error: VARIABLE ALIGNMENT: Syntax error expecting LEFT, RIGHT, or CENTER.
76     4 | VARIABLE ALIGNMENT x (**).
77       |                       ^~"
78
79 "var-display.sps:5.28-5.29: error: VARIABLE ALIGNMENT: Syntax error expecting `)'.
80     5 | VARIABLE ALIGNMENT x (LEFT **).
81       |                            ^~"
82
83 "var-display.sps:6.16-6.17: error: VARIABLE WIDTH: Syntax error expecting variable name.
84     6 | VARIABLE WIDTH **.
85       |                ^~"
86
87 "var-display.sps:7.18-7.19: error: VARIABLE WIDTH: Syntax error expecting `('.
88     7 | VARIABLE WIDTH x **.
89       |                  ^~"
90
91 "var-display.sps:8.19-8.20: error: VARIABLE WIDTH: Syntax error expecting positive integer.
92     8 | VARIABLE WIDTH x (**).
93       |                   ^~"
94
95 "var-display.sps:9.22-9.23: error: VARIABLE WIDTH: Syntax error expecting `)'.
96     9 | VARIABLE WIDTH x (10 **).
97       |                      ^~"
98
99 "var-display.sps:10.16-10.17: error: VARIABLE LEVEL: Syntax error expecting variable name.
100    10 | VARIABLE LEVEL **.
101       |                ^~"
102
103 "var-display.sps:11.18-11.19: error: VARIABLE LEVEL: Syntax error expecting `('.
104    11 | VARIABLE LEVEL x **.
105       |                  ^~"
106
107 "var-display.sps:12.19-12.20: error: VARIABLE LEVEL: Syntax error expecting SCALE, ORDINAL, or NOMINAL.
108    12 | VARIABLE LEVEL x (**).
109       |                   ^~"
110
111 "var-display.sps:13.25-13.26: error: VARIABLE LEVEL: Syntax error expecting `)'.
112    13 | VARIABLE LEVEL x (SCALE **).
113       |                         ^~"
114
115 "var-display.sps:14.15-14.16: error: VARIABLE ROLE: Syntax error expecting `/'.
116    14 | VARIABLE ROLE **.
117       |               ^~"
118
119 "var-display.sps:15.17-15.18: error: VARIABLE ROLE: Syntax error expecting INPUT, TARGET, BOTH, NONE, PARTITION, or SPLIT.
120    15 | VARIABLE ROLE / **.
121       |                 ^~"
122
123 "var-display.sps:16.22-16.23: error: VARIABLE ROLE: Syntax error expecting variable name.
124    16 | VARIABLE ROLE /INPUT **.
125       |                      ^~"
126
127 "var-display.sps:17.24-17.25: error: VARIABLE ROLE: Syntax error expecting `/'.
128    17 | VARIABLE ROLE /INPUT x **.
129       |                        ^~"
130 ])
131 AT_CLEANUP
132
133 AT_SETUP([variable level inference and SCALEMIN])
134 AT_DATA([var-level.sps], [dnl
135 DATA LIST LIST NOTABLE /n1 to n3 s1 to s5.
136
137 * Nominal formats (copied from data that will default to scale).
138 COMPUTE n4=s1.
139 COMPUTE n5=s1.
140 FORMATS n4(WKDAY5) n5(MONTH5).
141
142 * Scale formats (copied from data that will default to nominal).
143 COMPUTE s6=n1.
144 COMPUTE s7=n1.
145 COMPUTE s8=n1.
146 FORMATS s6(DOLLAR6.2) s7(CCA8.2) s8(DATETIME17).
147
148 STRING string(A8).
149 DISPLAY DICTIONARY.
150 EXECUTE.
151
152 * n1 has 10 unique small values -> nominal.
153 * n2 has 23 unique small values -> nominal.
154 * n3 is all missing -> nominal.
155 * s1 has 24 unique small values -> scale.
156 * s2 has one negative value -> scale.
157 * s3 has one non-integer value -> scale.
158 * s4 has no valid values less than 10 -> scale.
159 * s5 has no valid values less than 10,000 -> scale.
160 BEGIN DATA.
161 1  1  . 1  1  1    10 10001
162 2  2  . 2  2  2    11 10002
163 3  3  . 3  3  3    12 10003
164 4  4  . 4  4  4    13 10004
165 5  5  . 5  5  5    14 10005
166 6  6  . 6  6  6    15 10006
167 7  7  . 7  7  7    16 10007
168 8  8  . 8  8  8    17 10008
169 9  9  . 9  9  9    18 10009
170 10 10 . 10 10 10.5 19 110000
171 1  11 . 11 -1 1    11 10001
172 2  12 . 12 2  2    12 10002
173 3  13 . 13 3  3    13 10003
174 4  14 . 14 4  4    14 10004
175 5  15 . 15 5  5    15 10005
176 6  16 . 16 6  6    16 10006
177 7  17 . 17 7  7    17 10007
178 8  18 . 18 8  8    18 10008
179 9  19 . 19 9  9    19 10009
180 1  20 . 20 1  1    20 10001
181 2  21 . 21 2  2    21 10002
182 3  22 . 22 3  3    22 10003
183 4  23 . 23 4  4    23 10004
184 5  23 . 24 5  5    24 10005
185 6  23 . 24 6  6    25 10006
186 END DATA.
187 DISPLAY DICTIONARY.
188 ])
189 AT_CHECK([pspp -o pspp.csv var-level.sps])
190 AT_CHECK([cat pspp.csv], [0], [dnl
191 Table: Variables
192 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
193 n1,1,Unknown,Input,8,Right,F8.2,F8.2
194 n2,2,Unknown,Input,8,Right,F8.2,F8.2
195 n3,3,Unknown,Input,8,Right,F8.2,F8.2
196 s1,4,Unknown,Input,8,Right,F8.2,F8.2
197 s2,5,Unknown,Input,8,Right,F8.2,F8.2
198 s3,6,Unknown,Input,8,Right,F8.2,F8.2
199 s4,7,Unknown,Input,8,Right,F8.2,F8.2
200 s5,8,Unknown,Input,8,Right,F8.2,F8.2
201 n4,9,Unknown,Input,8,Right,WKDAY5,WKDAY5
202 n5,10,Unknown,Input,8,Right,MONTH5,MONTH5
203 s6,11,Unknown,Input,8,Right,DOLLAR6.2,DOLLAR6.2
204 s7,12,Unknown,Input,8,Right,CCA8.2,CCA8.2
205 s8,13,Unknown,Input,8,Right,DATETIME17.0,DATETIME17.0
206 string,14,Nominal,Input,8,Left,A8,A8
207
208 Table: Variables
209 Name,Position,Measurement Level,Role,Width,Alignment,Print Format,Write Format
210 n1,1,Nominal,Input,8,Right,F8.2,F8.2
211 n2,2,Nominal,Input,8,Right,F8.2,F8.2
212 n3,3,Nominal,Input,8,Right,F8.2,F8.2
213 s1,4,Scale,Input,8,Right,F8.2,F8.2
214 s2,5,Scale,Input,8,Right,F8.2,F8.2
215 s3,6,Scale,Input,8,Right,F8.2,F8.2
216 s4,7,Scale,Input,8,Right,F8.2,F8.2
217 s5,8,Scale,Input,8,Right,F8.2,F8.2
218 n4,9,Nominal,Input,8,Right,WKDAY5,WKDAY5
219 n5,10,Nominal,Input,8,Right,MONTH5,MONTH5
220 s6,11,Scale,Input,8,Right,DOLLAR6.2,DOLLAR6.2
221 s7,12,Scale,Input,8,Right,CCA8.2,CCA8.2
222 s8,13,Scale,Input,8,Right,DATETIME17.0,DATETIME17.0
223 string,14,Nominal,Input,8,Left,A8,A8
224 ])
225 AT_CLEANUP
226
227 AT_BANNER([VARIABLE LABELS])
228
229 AT_SETUP([variable labels])
230
231 dnl The following test is to make sure the TVARS command works and that
232 dnl variables are displayed accordingly.
233 AT_DATA([var-labels.sps], [dnl
234 DATA LIST LIST NOTABLE /x * y *.
235 BEGIN DATA.
236 1 100
237 2 200
238 3 300
239 4 400
240 END DATA.
241
242 * While no labels have been set, the TVARS is irrelevant.
243 SET TVARS=NAMES.
244 DESCRIPTIVES ALL.
245
246 SET TVARS=LABELS.
247 DESCRIPTIVES ALL.
248
249 SET TVARS=BOTH.
250 DESCRIPTIVES ALL.
251
252 VARIABLE LABEL x 'foo' y 'bar'.
253
254 * Now, the TVARS setting should have effect
255
256 SET TVARS=NAMES.
257 DESCRIPTIVES ALL.
258
259 SET TVARS=LABELS.
260 DESCRIPTIVES ALL.
261
262 SET TVARS=BOTH.
263 DESCRIPTIVES ALL.
264 ])
265
266 AT_CHECK([pspp -o pspp.csv -o pspp.txt var-labels.sps])
267 AT_CHECK([cat pspp.csv], [0],[dnl
268 Table: Descriptive Statistics
269 ,N,Mean,Std Dev,Minimum,Maximum
270 x,4,2.50,1.29,1.00,4.00
271 y,4,250.00,129.10,100.00,400.00
272 Valid N (listwise),4,,,,
273 Missing N (listwise),0,,,,
274
275 Table: Descriptive Statistics
276 ,N,Mean,Std Dev,Minimum,Maximum
277 x,4,2.50,1.29,1.00,4.00
278 y,4,250.00,129.10,100.00,400.00
279 Valid N (listwise),4,,,,
280 Missing N (listwise),0,,,,
281
282 Table: Descriptive Statistics
283 ,N,Mean,Std Dev,Minimum,Maximum
284 x,4,2.50,1.29,1.00,4.00
285 y,4,250.00,129.10,100.00,400.00
286 Valid N (listwise),4,,,,
287 Missing N (listwise),0,,,,
288
289 Table: Descriptive Statistics
290 ,N,Mean,Std Dev,Minimum,Maximum
291 x,4,2.50,1.29,1.00,4.00
292 y,4,250.00,129.10,100.00,400.00
293 Valid N (listwise),4,,,,
294 Missing N (listwise),0,,,,
295
296 Table: Descriptive Statistics
297 ,N,Mean,Std Dev,Minimum,Maximum
298 foo,4,2.50,1.29,1.00,4.00
299 bar,4,250.00,129.10,100.00,400.00
300 Valid N (listwise),4,,,,
301 Missing N (listwise),0,,,,
302
303 Table: Descriptive Statistics
304 ,N,Mean,Std Dev,Minimum,Maximum
305 x foo,4,2.50,1.29,1.00,4.00
306 y bar,4,250.00,129.10,100.00,400.00
307 Valid N (listwise),4,,,,
308 Missing N (listwise),0,,,,
309 ])
310
311 AT_CLEANUP