AUTORECODE: Properly handle variable labels.
[pspp] / tests / language / stats / autorecode.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([AUTORECODE procedure])
18
19 AT_SETUP([AUTORECODE multiple missing values])
20 AT_DATA([autorecode.sps],
21   [DATA LIST LIST NOTABLE /u v w x y z (F2.0).
22 BEGIN DATA.
23 11 11 11 11 11 11
24 12 12 12 12 12 12
25 13 13 13 13 13 13
26 14 14 14 14 14 14
27 15 15 15 15 15 15
28 16 16 16 16 16 16
29 END DATA.
30
31 MISSING VALUES u (11)
32                v (11, 12)
33                w (11, 12, 13)
34                x (11 THRU 14)
35                y (11 THRU 15)
36                z (11 THRU 16).
37
38 AUTORECODE u v w x y z INTO a b c d e f.
39 LIST.
40 DISPLAY VARIABLES/VARIABLES=a TO f.
41 ])
42 AT_CHECK([pspp -O format=csv autorecode.sps], [0], [dnl
43 Table: Data List
44 u,v,w,x,y,z,a,b,c,d,e,f
45 11,11,11,11,11,11,6.00,5.00,4.00,3.00,2.00,1.00
46 12,12,12,12,12,12,1.00,6.00,5.00,4.00,3.00,2.00
47 13,13,13,13,13,13,2.00,1.00,6.00,5.00,4.00,3.00
48 14,14,14,14,14,14,3.00,2.00,1.00,6.00,5.00,4.00
49 15,15,15,15,15,15,4.00,3.00,2.00,1.00,6.00,5.00
50 16,16,16,16,16,16,5.00,4.00,3.00,2.00,1.00,6.00
51
52 Table: Variables
53 Name,Position,Print Format,Write Format,Missing Values
54 a,7,F8.2,F8.2,6
55 b,8,F8.2,F8.2,5; 6
56 c,9,F8.2,F8.2,4; 5; 6
57 d,10,F8.2,F8.2,3 THRU 6
58 e,11,F8.2,F8.2,2 THRU 6
59 f,12,F8.2,F8.2,1 THRU 6
60 ])
61 AT_CLEANUP
62
63 AT_SETUP([AUTORECODE numbers and short strings])
64 AT_DATA([autorecode.sps],
65   [data list /X 1-5(a) Y 7.
66 begin data.
67 lasdj 1
68 asdfk 0
69 asdfj 2
70 asdfj 1
71 asdfk 2
72 asdfj 9
73 lajks 9
74 asdfk 0
75 asdfk 1
76 end data.
77
78 missing values x('asdfk') y(9).
79
80 autorecode x y into A B/descend.
81
82 list.
83 compute Z=trunc(y/2).
84 autorecode z into W.
85 list.
86 ])
87 AT_CHECK([pspp -O format=csv autorecode.sps], [0],
88   [Table: Reading 1 record from INLINE.
89 Variable,Record,Columns,Format
90 X,1,1-  5,A5
91 Y,1,7-  7,F1.0
92
93 Table: Data List
94 X,Y,A,B
95 lasdj,1,1.00,2.00
96 asdfk,0,4.00,3.00
97 asdfj,2,3.00,1.00
98 asdfj,1,3.00,2.00
99 asdfk,2,4.00,1.00
100 asdfj,9,3.00,4.00
101 lajks,9,2.00,4.00
102 asdfk,0,4.00,3.00
103 asdfk,1,4.00,2.00
104
105 Table: Data List
106 X,Y,A,B,Z,W
107 lasdj,1,1.00,2.00,.00,1.00
108 asdfk,0,4.00,3.00,.00,1.00
109 asdfj,2,3.00,1.00,1.00,2.00
110 asdfj,1,3.00,2.00,.00,1.00
111 asdfk,2,4.00,1.00,1.00,2.00
112 asdfj,9,3.00,4.00,.  ,.  @&t@
113 lajks,9,2.00,4.00,.  ,.  @&t@
114 asdfk,0,4.00,3.00,.00,1.00
115 asdfk,1,4.00,2.00,.00,1.00
116 ])
117 AT_CLEANUP
118
119
120
121 AT_SETUP([AUTORECODE long strings and check the value labels])
122 AT_DATA([ar.sps],
123   [data list notable list /s (a16) x *.
124 begin data.
125 widgets      1
126 thingummies  2
127 oojars       3
128 widgets      4
129 oojars       5
130 thingummies  6
131 oojimiflips  7
132 end data.
133
134 variable labels s 'tracking my stuff'.
135 value labels /s 'thingummies' 'Funny sticky things'.
136
137 autorecode s into new.
138
139 list.
140
141 display dictionary/variables=new.
142 ])
143
144 AT_CHECK([pspp -O format=csv ar.sps], [0],
145   [Table: Data List
146 s,x,new
147 widgets,1.00,4.00
148 thingummies,2.00,3.00
149 oojars,3.00,1.00
150 widgets,4.00,4.00
151 oojars,5.00,1.00
152 thingummies,6.00,3.00
153 oojimiflips,7.00,2.00
154
155 Table: Variables
156 Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
157 new,3,tracking my stuff,Scale,Input,8,Right,F8.2,F8.2,
158
159 Table: Value Labels
160 Variable Value,,Label
161 tracking my stuff,1.00,oojars
162 ,2.00,oojimiflips
163 ,3.00,Funny sticky things
164 ,4.00,widgets
165 ])
166
167 AT_CLEANUP
168
169
170 AT_SETUP([AUTORECODE group subcommand])
171 AT_DATA([ar-group.sps],
172 [data list notable list /x * y *.
173 begin data.
174 11 10
175 12 12 
176 13 15
177 14 11
178 15 12
179 16 18
180 end data.
181
182 missing values y (12).
183
184 autorecode 
185         x y into a b
186         /group.
187
188 list.
189 display variables /variables=a b.
190 ])
191
192 AT_CHECK([pspp -O format=csv ar-group.sps], [0],
193 [Table: Data List
194 x,y,a,b
195 11.00,10.00,2.00,1.00
196 12.00,12.00,8.00,8.00
197 13.00,15.00,3.00,5.00
198 14.00,11.00,4.00,2.00
199 15.00,12.00,5.00,8.00
200 16.00,18.00,6.00,7.00
201
202 Table: Variables
203 Name,Position,Print Format,Write Format,Missing Values
204 a,3,F8.2,F8.2,8
205 b,4,F8.2,F8.2,8
206 ])
207
208 AT_CLEANUP
209
210
211
212 AT_SETUP([AUTORECODE group - string variables])
213 AT_DATA([strings.sps],
214 [data list notable list /x (a8) y (a16).
215 begin data.
216 fred bert
217 charlie "         "
218 delta echo
219 "      " windows
220 " "  nothing
221 end data.
222
223
224 autorecode x y into a b
225         /group.
226
227 delete variables x y.
228
229 list.
230
231 ])
232
233 AT_CHECK([pspp -O format=csv strings.sps], [0],
234 [Table: Data List
235 a,b
236 6.00,2.00
237 3.00,1.00
238 4.00,5.00
239 1.00,8.00
240 1.00,7.00
241 ])
242
243 AT_CLEANUP
244
245
246 dnl Tests for a crash which happened when the /GROUP subcommand
247 dnl appeared with string variables of different widths.
248 AT_SETUP([AUTORECODE group vs. strings])
249 AT_DATA([ar-strings.sps],
250   [data list notable list /a (a12) b (a6).
251 begin data.
252 one    nine
253 two    ten
254 three  eleven 
255 four   nought
256 end data.
257
258 autorecode a b into x y 
259         /group.
260
261 list.
262 ])
263
264 AT_CHECK([pspp -O format=csv ar-strings.sps], [0],
265 [dnl
266 Table: Data List
267 a,b,x,y
268 one,nine,5.00,3.00
269 two,ten,8.00,6.00
270 three,eleven,7.00,1.00
271 four,nought,2.00,4.00
272 ])
273
274 AT_CLEANUP
275
276
277
278 AT_SETUP([AUTORECODE /blank])
279
280 AT_DATA([auto-blank.sps],  [dnl
281 data list notable list /x (a8) y * z (a16).
282 begin data.
283 one   2  fred
284 two   4  ""
285 ""    4  fred
286 ""    2  charliebrown
287 three 2  charliebrown
288 end data.
289
290 autorecode variables x y z into a b c  /blank=missing.
291
292 list a b c y.
293 ])
294
295 AT_CHECK([pspp -O format=csv auto-blank.sps], [0], [dnl
296 Table: Data List
297 a,b,c,y
298 1.00,1.00,2.00,2.00
299 3.00,2.00,.  ,4.00
300 .  ,2.00,2.00,4.00
301 .  ,1.00,1.00,2.00
302 2.00,1.00,1.00,2.00
303 ])
304
305 AT_CLEANUP
306
307 dnl AUTORECODE had a use-after-free error when TEMPORARY was in use.
308 dnl Bug #32757.
309 AT_SETUP([AUTORECODE with TEMPORARY])
310 AT_DATA([autorecode.sps],
311   [data list /X 1-5(a) Y 7.
312 begin data.
313 lasdj 1
314 asdfk 0
315 asdfj 2
316 asdfj 1
317 asdfk 2
318 asdfj 9
319 lajks 9
320 asdfk 0
321 asdfk 1
322 end data.
323
324 temporary.
325 select if y > 1.
326 autorecode x y into A B/descend.
327 list.
328 ])
329 AT_CHECK([pspp -O format=csv autorecode.sps], [0],
330   [Table: Reading 1 record from INLINE.
331 Variable,Record,Columns,Format
332 X,1,1-  5,A5
333 Y,1,7-  7,F1.0
334
335 Table: Data List
336 X,Y,A,B
337 lasdj,1,.  ,.  @&t@
338 asdfk,0,2.00,.  @&t@
339 asdfj,2,3.00,2.00
340 asdfj,1,3.00,.  @&t@
341 asdfk,2,2.00,2.00
342 asdfj,9,3.00,1.00
343 lajks,9,1.00,1.00
344 asdfk,0,2.00,.  @&t@
345 asdfk,1,2.00,.  @&t@
346 ])
347 AT_CLEANUP
348
349
350 dnl For compatibility, make sure that /INTO (with leading slash) is accepted
351 dnl (bug #48762)
352 AT_SETUP([AUTORECODE with /INTO])
353 AT_DATA([autorecode.sps],
354   [data list list notable /x .
355 begin data.
356 1
357 8
358 -901
359 4
360 1
361 99
362 8
363 end data.
364
365 autorecode x  /into y.
366
367 list.
368 ])
369 AT_CHECK([pspp -O format=csv autorecode.sps], [0],
370 [Table: Data List
371 x,y
372 1.00,2.00
373 8.00,4.00
374 -901.00,1.00
375 4.00,3.00
376 1.00,2.00
377 99.00,5.00
378 8.00,4.00
379 ])
380 AT_CLEANUP