1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
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.
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.
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/>.
17 AT_BANNER([QUICK CLUSTER])
19 AT_SETUP([QUICK CLUSTER with small data set])
20 AT_DATA([quick-cluster.sps], [dnl
21 DATA LIST LIST /x y z.
36 /CRITERIA=CLUSTER(2) MXITER(20).
38 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
39 AT_CHECK([cat pspp.csv], [0], [dnl
40 Table: Reading free-form data from INLINE.
46 Table: Final Cluster Centers
53 Table: Number of Cases in each Cluster
61 AT_SETUP([QUICK CLUSTER with large data set])
63 AT_DATA([quick-cluster.sps], [dnl
71 QUICK CLUSTER x /CRITERIA = CLUSTER(4) NOINITIAL.
73 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
74 AT_CHECK([cat pspp.csv], [0], [dnl
75 Table: Final Cluster Centers
80 Table: Number of Cases in each Cluster
91 AT_SETUP([QUICK CLUSTER with weights])
92 AT_DATA([qc-weighted.sps], [dnl
95 compute x = mod (#i, 4).
100 compute x = mod (#i, 4).
109 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
112 AT_CHECK([pspp -o pspp-w.csv qc-weighted.sps])
115 AT_DATA([qc-unweighted.sps], [dnl
118 compute x = mod (#i, 4).
124 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
127 AT_CHECK([pspp -o pspp-unw.csv qc-unweighted.sps])
129 AT_CHECK([diff pspp-w.csv pspp-unw.csv], [0])
133 AT_SETUP([QUICK CLUSTER with listwise missing])
134 AT_DATA([quick-miss.sps], [dnl
135 data list notable list /x *.
146 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
149 AT_CHECK([pspp -o pspp-m.csv quick-miss.sps])
151 AT_DATA([quick-nmiss.sps], [dnl
152 data list notable list /x *.
162 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
165 AT_CHECK([pspp -o pspp-nm.csv quick-nmiss.sps])
167 AT_CHECK([diff pspp-m.csv pspp-nm.csv], [0])
172 AT_SETUP([QUICK CLUSTER with pairwise missing])
174 dnl This test runs two programs, which are identical except that one
175 dnl has an extra case with one missing value. Because the syntax uses
176 dnl NOINITIAL and NOUPDATE, the results should be identical except for
177 dnl the final classification.
179 AT_DATA([quick-s.sps], [dnl
180 data list notable list /x * y *.
197 /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
201 AT_CHECK([pspp -O format=csv quick-s.sps > pspp-s.csv])
203 AT_DATA([quick-pw.sps], [dnl
204 data list notable list /x * y *.
221 /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
227 AT_CHECK([pspp -O format=csv quick-pw.sps > pspp-pw.csv])
229 AT_CHECK([head -n 13 pspp-s.csv > top-s.csv])
230 AT_CHECK([head -n 13 pspp-pw.csv > top-pw.csv])
231 AT_CHECK([diff top-s.csv top-pw.csv])
234 AT_CHECK([grep Valid pspp-s.csv], [0], [Valid,,11
237 AT_CHECK([grep Valid pspp-pw.csv], [0], [Valid,,12
245 AT_SETUP([QUICK CLUSTER crash on bad cluster quantity])
246 AT_DATA([badn.sps], [dnl
247 data list notable list /x * y *.
254 /CRITERIA = CLUSTER(0)
258 AT_CHECK([pspp -O format=csv badn.sps], [1], [ignore])
262 AT_SETUP([QUICK CLUSTER infinite loop on bad command name])
263 AT_DATA([quick-cluster.sps], [dnl
264 data list notable list /x y.
270 QUICK CLUSTER x y /UNSUPPORTED.
272 AT_CHECK([pspp -O format=csv quick-cluster.sps], [1], [dnl
273 quick-cluster.sps:7.20-7.30: error: QUICK CLUSTER: Syntax error at `UNSUPPORTED'.
279 AT_SETUP([QUICK CLUSTER /PRINT subcommand])
280 AT_DATA([quick-cluster.sps], [dnl
281 data list notable list /cluster (A8) x y (F8.0).
343 /CRITERIA=CLUSTERS(3)
344 /PRINT=INITIAL CLUSTER.
347 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
348 Table: Initial Cluster Centers
354 Table: Final Cluster Centers
360 Table: Number of Cases in each Cluster
367 Table: Cluster Membership
431 dnl Test for a crash which happened on bad input syntax
432 AT_SETUP([QUICK CLUSTER -- Empty Parentheses])
434 AT_DATA([empty-parens.sps], [dnl
435 data list notable list /x * y *.
442 /CRITERIA = CONVERGE()
446 AT_CHECK([pspp -o pspp.csv empty-parens.sps], [1], [ignore])
452 AT_SETUP([QUICK CLUSTER with save])
453 AT_DATA([quick-cluster.sps], [dnl
454 DATA LIST notable LIST /x y z.
469 /CRITERIA=CLUSTER(2) MXITER(20)
470 /SAVE = CLUSTER (cluster) DISTANCE (distance).
475 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
476 Table: Final Cluster Centers
483 Table: Number of Cases in each Cluster
490 x,y,z,cluster,distance
491 22.00,2930.00,4099.00,2.00,1010.98
492 17.00,3350.00,4749.00,2.00,324.79
493 22.00,2640.00,3799.00,2.00,1399.00
494 20.00,3250.00,4816.00,2.00,242.00
495 15.00,4080.00,7827.00,2.00,2890.72
496 4.00,5.00,4.00,1.00,4.33
497 5.00,6.00,5.00,1.00,2.60
498 6.00,7.00,6.00,1.00,.87
499 7.00,8.00,7.00,1.00,.87
500 8.00,9.00,8.00,1.00,2.60
501 9.00,10.00,9.00,1.00,4.33
506 AT_SETUP([QUICK CLUSTER with single save])
507 AT_DATA([quick-cluster.sps], [dnl
508 DATA LIST notable LIST /x y z.
523 /CRITERIA=CLUSTER(2) MXITER(20)
529 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
530 Table: Final Cluster Centers
537 Table: Number of Cases in each Cluster
545 22.00,2930.00,4099.00,1010.98
546 17.00,3350.00,4749.00,324.79
547 22.00,2640.00,3799.00,1399.00
548 20.00,3250.00,4816.00,242.00
549 15.00,4080.00,7827.00,2890.72
560 dnl This one was noticed to crash at one point.
561 AT_SETUP([QUICK CLUSTER crash on bizarre input])
562 AT_DATA([badn.sps], [dnl
563 data list notable list /x.
578 " /criteria=cluster(2) mxiter(20)
585 AT_CHECK([pspp -O format=csv badn.sps], [1], [ignore])