Add some tests for empty parens
[pspp] / tests / language / stats / quick-cluster.at
1 AT_BANNER([QUICK CLUSTER])
2
3 AT_SETUP([QUICK CLUSTER with small data set])
4 AT_DATA([quick-cluster.sps], [dnl
5 DATA LIST LIST /x y z.
6 BEGIN DATA.
7 22,2930,4099
8 17,3350,4749
9 22,2640,3799
10 20, 3250,4816
11 15,4080,7827
12 4,5,4
13 5,6,5
14 6,7,6
15 7,8,7
16 8,9,8
17 9,10,9
18 END DATA.
19 QUICK CLUSTER x y z
20   /CRITERIA=CLUSTER(2) MXITER(20).
21 ])
22 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
23 AT_CHECK([cat pspp.csv], [0], [dnl
24 Table: Reading free-form data from INLINE.
25 Variable,Format
26 x,F8.0
27 y,F8.0
28 z,F8.0
29
30 Table: Final Cluster Centers
31 ,Cluster,
32 ,,
33 ,1,2
34 ,,
35 x,6.50,19.20
36 y,7.50,3250.00
37 z,6.50,5058.00
38
39 Table: Number of Cases in each Cluster
40 Cluster,1,6
41 ,2,5
42 Valid,,11
43 ])
44 AT_CLEANUP
45
46 AT_SETUP([QUICK CLUSTER with large data set])
47 AT_DATA([quick-cluster.sps], [dnl
48 input program.
49 loop #i = 1 to 50000.
50 compute x = 3.
51 end case.
52 end loop.
53 end file.
54 end input program.
55 QUICK CLUSTER x /CRITERIA = CLUSTER(4) NOINITIAL.
56 ])
57 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
58 AT_CHECK([cat pspp.csv], [0], [dnl
59 Table: Final Cluster Centers
60 ,Cluster,,,
61 ,,,,
62 ,1,2,3,4
63 ,,,,
64 x,NaN,NaN,NaN,3.00
65
66 Table: Number of Cases in each Cluster
67 Cluster,1,0
68 ,2,0
69 ,3,0
70 ,4,50000
71 Valid,,50000
72 ])
73 AT_CLEANUP
74
75
76 AT_SETUP([QUICK CLUSTER with weights])
77 AT_DATA([qc-weighted.sps], [dnl
78 input program.
79 loop #i = 1 to 400.
80  compute x = mod (#i, 4).
81  compute w = 5.
82  end case.
83 end loop.
84 loop #i = 1 to 400.
85  compute x = mod (#i, 4).
86  compute w = 3.
87  end case.
88 end loop.
89 end file.
90 end input program.
91
92 weight by w.
93
94 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
95 ])
96
97 AT_CHECK([pspp -o pspp-w.csv qc-weighted.sps])
98
99
100 AT_DATA([qc-unweighted.sps], [dnl
101 input program.
102 loop #i = 1 to 3200.
103  compute x = mod (#i, 4).
104  end case.
105 end loop.
106 end file.
107 end input program.
108
109 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
110 ])
111
112 AT_CHECK([pspp -o pspp-unw.csv qc-unweighted.sps])
113
114 AT_CHECK([diff pspp-w.csv pspp-unw.csv], [0])
115
116 AT_CLEANUP
117
118 AT_SETUP([QUICK CLUSTER with listwise missing])
119 AT_DATA([quick-miss.sps], [dnl
120 data list notable list /x *.
121 begin data.
122 1
123 1
124 2
125 3
126 4
127 .
128 2
129 end data.
130
131 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
132 ])
133
134 AT_CHECK([pspp -o pspp-m.csv quick-miss.sps])
135
136 AT_DATA([quick-nmiss.sps], [dnl
137 data list notable list /x *.
138 begin data.
139 1
140 1
141 2
142 3
143 4
144 2
145 end data.
146
147 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
148 ])
149
150 AT_CHECK([pspp -o pspp-nm.csv quick-nmiss.sps])
151
152 AT_CHECK([diff pspp-m.csv pspp-nm.csv], [0])
153
154 AT_CLEANUP
155
156
157 AT_SETUP([QUICK CLUSTER with pairwise missing])
158
159 dnl This test runs two programs, which are identical except that one
160 dnl has an extra case with one missing value. Becuase the syntax uses
161 dnl NOINITIAL and NOUPDATE, the results should be identical except for
162 dnl the final classification.
163
164 AT_DATA([quick-s.sps], [dnl
165 data list notable list /x * y *.
166 begin data.
167 1   2
168 1   2.2
169 1.1 1.9
170 1   9
171 1   10
172 1.3 9.5
173 0.9 8.9
174 3.5 2
175 3.4 3
176 3.5 2.5
177 3.1 2.0
178 end data.
179
180 QUICK CLUSTER x y 
181         /PRINT = INITIAL
182         /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
183         .
184 ])
185
186 AT_CHECK([pspp -O format=csv quick-s.sps  > pspp-s.csv])
187
188 AT_DATA([quick-pw.sps], [dnl
189 data list notable list /x * y *.
190 begin data.
191 1   2
192 1   2.2
193 1.1 1.9
194 1   9
195 1   10
196 1.3 9.5
197 0.9 8.9
198 3.5 2
199 3.4 3
200 3.5 2.5
201 3.1 2.0
202 .   2.3
203 end data.
204
205 QUICK CLUSTER x y 
206         /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
207         /PRINT = INITIAL
208         /MISSING = PAIRWISE
209         .
210 ])
211
212 AT_CHECK([pspp -O format=csv quick-pw.sps  > pspp-pw.csv])
213
214 AT_CHECK([head -n 18  pspp-s.csv > top-s.csv])
215 AT_CHECK([head -n 18  pspp-pw.csv > top-pw.csv])
216 AT_CHECK([diff top-s.csv top-pw.csv])
217
218
219 AT_CHECK([grep Valid pspp-s.csv], [0], [Valid,,11
220 ])
221
222 AT_CHECK([grep Valid pspp-pw.csv], [0], [Valid,,12
223 ])
224
225
226 AT_CLEANUP
227
228
229
230 AT_SETUP([QUICK CLUSTER crash on bad cluster quantity])
231 AT_DATA([badn.sps], [dnl
232 data list notable list /x * y *.
233 begin data.
234 1   2
235 1   2.2
236 end data.
237
238 QUICK CLUSTER x y 
239         /CRITERIA = CLUSTER(0)
240         .
241 ])
242
243 AT_CHECK([pspp -O format=csv badn.sps], [1], [ignore])
244
245 AT_CLEANUP
246
247 AT_SETUP([QUICK CLUSTER infinite loop on bad command name])
248 AT_DATA([quick-cluster.sps], [dnl
249 data list notable list /x y.
250 begin data.
251 1   2
252 1   2.2
253 end data.
254
255 QUICK CLUSTER x y /UNSUPPORTED.
256 ])
257 AT_CHECK([pspp -O format=csv quick-cluster.sps], [1], [dnl
258 quick-cluster.sps:7.20-7.30: error: QUICK CLUSTER: Syntax error at `UNSUPPORTED'.
259 ])
260 AT_CLEANUP
261
262
263
264 AT_SETUP([QUICK CLUSTER /PRINT subcommand])
265 AT_DATA([quick-cluster.sps], [dnl
266 data list notable list /cluster (A8) x (F) y (F).
267 begin data.
268 A 10.45 9.38
269 A 10.67 9.17
270 A 10.86 9.63
271 A 8.77 8.45
272 A 8.04 11.77
273 A 10.34 9.83
274 A 10.37 10.54
275 A 11.49 8.18
276 A 10.17 11.10
277 A 11.37 9.16
278 A 10.25 8.83
279 A 8.69 9.92
280 A 10.36 10.39
281 A 10.89 10.51
282 A 9.9 11.39
283 A 11.1 10.91
284 A 11.77 8.47
285 A 9.5 10.46
286 B -11.01 -9.21
287 B -10.8 -11.76
288 B -10.03 -10.29
289 B -9.54 -9.17
290 B -10.16 -9.82
291 B -10.01 -8.63
292 B -9.6 -10.22
293 B -11.36 -10.93
294 B -10.63 -10.97
295 B -9.53 -10.78
296 B -9.40 -10.26
297 B -10.76 -9.76
298 B -9.9 -10.11
299 B -10.16 -9.75
300 B -8.65 -11.31
301 B -10.10 -10.90
302 B -11.67 -9.89
303 B -11.11 -9.23
304 B -8.7 -8.43
305 B -11.35 -8.68
306 C -10.20 9.00
307 C -10.12 9.92
308 C -10.41 10.16
309 C -9.86 10.12
310 C -10.31 10.12
311 C -9.57 10.16
312 C -9.69 9.93
313 C -9.14 10.84
314 C -9.8 10.19
315 C -9.97 10.22
316 C -11.65 10.81
317 C -9.80 11.39
318 C -10.31 10.74
319 C -10.26 10.38
320 C -11.57 10.02
321 C -10.50 9.75
322 C -9.06 9.63
323 C -10.17 10.82
324 C -10.22 9.99
325 end data.
326
327 QUICK CLUSTER x y
328   /CRITERIA=CLUSTERS(3)
329   /PRINT=INITIAL CLUSTER.
330 ])
331
332 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
333 Table: Initial Cluster Centers
334 ,Cluster,,
335 ,,,
336 ,1,2,3
337 ,,,
338 x,-11,-12,11
339 y,-12,11,11
340
341 Table: Final Cluster Centers
342 ,Cluster,,
343 ,,,
344 ,1,2,3
345 ,,,
346 x,-10,-10,10
347 y,-10,10,10
348
349 Table: Number of Cases in each Cluster
350 Cluster,1,20
351 ,2,19
352 ,3,18
353 Valid,,57
354
355 Table: Cluster Membership
356 Case Number,Cluster
357 1,3
358 2,3
359 3,3
360 4,3
361 5,3
362 6,3
363 7,3
364 8,3
365 9,3
366 10,3
367 11,3
368 12,3
369 13,3
370 14,3
371 15,3
372 16,3
373 17,3
374 18,3
375 19,1
376 20,1
377 21,1
378 22,1
379 23,1
380 24,1
381 25,1
382 26,1
383 27,1
384 28,1
385 29,1
386 30,1
387 31,1
388 32,1
389 33,1
390 34,1
391 35,1
392 36,1
393 37,1
394 38,1
395 39,2
396 40,2
397 41,2
398 42,2
399 43,2
400 44,2
401 45,2
402 46,2
403 47,2
404 48,2
405 49,2
406 50,2
407 51,2
408 52,2
409 53,2
410 54,2
411 55,2
412 56,2
413 57,2
414 ])
415
416 AT_CLEANUP
417
418
419 dnl Test for a crash which happened on bad input syntax
420 AT_SETUP([QUICK CLUSTER -- Empty Parentheses])
421
422 AT_DATA([empty-parens.sps], [dnl
423 data list notable list /x * y *.
424 begin data.
425 1   2
426 1   2.2
427 end data.
428
429 QUICK CLUSTER x y
430         /CRITERIA = CONVERGE()
431         .
432 ])
433
434 AT_CHECK([pspp -o pspp.csv empty-parens.sps], [1], [ignore])
435
436 AT_CLEANUP
437