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 expecting MISSING, PRINT, SAVE, or CRITERIA.
274 7 | QUICK CLUSTER x y /UNSUPPORTED.
281 AT_SETUP([QUICK CLUSTER /PRINT subcommand])
282 AT_DATA([quick-cluster.sps], [dnl
283 data list notable list /cluster (A8) x y (F8.0).
345 /CRITERIA=CLUSTERS(3)
346 /PRINT=INITIAL CLUSTER.
349 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
350 Table: Initial Cluster Centers
356 Table: Final Cluster Centers
362 Table: Number of Cases in each Cluster
369 Table: Cluster Membership
433 dnl Test for a crash which happened on bad input syntax
434 AT_SETUP([QUICK CLUSTER -- Empty Parentheses])
436 AT_DATA([empty-parens.sps], [dnl
437 data list notable list /x * y *.
444 /CRITERIA = CONVERGE()
448 AT_CHECK([pspp -o pspp.csv empty-parens.sps], [1], [ignore])
454 AT_SETUP([QUICK CLUSTER with save])
455 AT_DATA([quick-cluster.sps], [dnl
456 DATA LIST notable LIST /x y z.
471 /CRITERIA=CLUSTER(2) MXITER(20)
472 /SAVE = CLUSTER (cluster) DISTANCE (distance).
477 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
478 Table: Final Cluster Centers
485 Table: Number of Cases in each Cluster
492 x,y,z,cluster,distance
493 22.00,2930.00,4099.00,2.00,1010.98
494 17.00,3350.00,4749.00,2.00,324.79
495 22.00,2640.00,3799.00,2.00,1399.00
496 20.00,3250.00,4816.00,2.00,242.00
497 15.00,4080.00,7827.00,2.00,2890.72
498 4.00,5.00,4.00,1.00,4.33
499 5.00,6.00,5.00,1.00,2.60
500 6.00,7.00,6.00,1.00,.87
501 7.00,8.00,7.00,1.00,.87
502 8.00,9.00,8.00,1.00,2.60
503 9.00,10.00,9.00,1.00,4.33
508 AT_SETUP([QUICK CLUSTER with single save])
509 AT_DATA([quick-cluster.sps], [dnl
510 DATA LIST notable LIST /x y z.
525 /CRITERIA=CLUSTER(2) MXITER(20)
531 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
532 Table: Final Cluster Centers
539 Table: Number of Cases in each Cluster
547 22.00,2930.00,4099.00,1010.98
548 17.00,3350.00,4749.00,324.79
549 22.00,2640.00,3799.00,1399.00
550 20.00,3250.00,4816.00,242.00
551 15.00,4080.00,7827.00,2890.72
562 dnl This one was noticed to crash at one point.
563 AT_SETUP([QUICK CLUSTER crash on bizarre input])
564 AT_DATA([badn.sps], [dnl
565 data list notable list /x.
580 " /criteria=cluster(2) mxiter(20)
587 AT_CHECK([pspp -O format=csv badn.sps], [1], [ignore])
591 AT_SETUP([QUICK CLUSTER syntax errors])
592 AT_DATA([quick-cluster.sps], [dnl
593 DATA LIST LIST NOTABLE /x y.
595 QUICK CLUSTER x/MISSING=**.
596 QUICK CLUSTER x/PRINT=**.
597 QUICK CLUSTER x/SAVE=CLUSTER(**).
598 QUICK CLUSTER x/SAVE=CLUSTER(x).
599 QUICK CLUSTER x/SAVE=CLUSTER(c **).
600 QUICK CLUSTER x/SAVE=DISTANCE(**).
601 QUICK CLUSTER x/SAVE=DISTANCE(x).
602 QUICK CLUSTER x/SAVE=DISTANCE(d **).
603 QUICK CLUSTER x/SAVE=**.
604 QUICK CLUSTER x/CRITERIA=CLUSTERS **.
605 QUICK CLUSTER x/CRITERIA=CLUSTERS(**).
606 QUICK CLUSTER x/CRITERIA=CLUSTERS(5 **).
607 QUICK CLUSTER x/CRITERIA=CONVERGE **.
608 QUICK CLUSTER x/CRITERIA=CONVERGE(**).
609 QUICK CLUSTER x/CRITERIA=CONVERGE(5 **).
610 QUICK CLUSTER x/CRITERIA=**.
613 AT_CHECK([pspp -O format=csv quick-cluster.sps], [1], [dnl
614 "quick-cluster.sps:2.15-2.16: error: QUICK CLUSTER: Syntax error expecting variable name.
615 2 | QUICK CLUSTER **.
618 "quick-cluster.sps:3.25-3.26: error: QUICK CLUSTER: Syntax error expecting LISTWISE, DEFAULT, PAIRWISE, INCLUDE, or EXCLUDE.
619 3 | QUICK CLUSTER x/MISSING=**.
622 "quick-cluster.sps:4.23-4.24: error: QUICK CLUSTER: Syntax error expecting CLUSTER or INITIAL.
623 4 | QUICK CLUSTER x/PRINT=**.
626 "quick-cluster.sps:5.30-5.31: error: QUICK CLUSTER: Syntax error expecting identifier.
627 5 | QUICK CLUSTER x/SAVE=CLUSTER(**).
630 "quick-cluster.sps:6.30: error: QUICK CLUSTER: A variable called `x' already exists.
631 6 | QUICK CLUSTER x/SAVE=CLUSTER(x).
634 "quick-cluster.sps:7.32-7.33: error: QUICK CLUSTER: Syntax error expecting `@:}@'.
635 7 | QUICK CLUSTER x/SAVE=CLUSTER(c **).
638 "quick-cluster.sps:8.31-8.32: error: QUICK CLUSTER: Syntax error expecting identifier.
639 8 | QUICK CLUSTER x/SAVE=DISTANCE(**).
642 "quick-cluster.sps:9.31: error: QUICK CLUSTER: A variable called `x' already exists.
643 9 | QUICK CLUSTER x/SAVE=DISTANCE(x).
646 "quick-cluster.sps:10.33-10.34: error: QUICK CLUSTER: Syntax error expecting `@:}@'.
647 10 | QUICK CLUSTER x/SAVE=DISTANCE(d **).
650 "quick-cluster.sps:11.22-11.23: error: QUICK CLUSTER: Syntax error expecting CLUSTER or DISTANCE.
651 11 | QUICK CLUSTER x/SAVE=**.
654 "quick-cluster.sps:12.35-12.36: error: QUICK CLUSTER: Syntax error expecting `('.
655 12 | QUICK CLUSTER x/CRITERIA=CLUSTERS **.
658 "quick-cluster.sps:13.35-13.36: error: QUICK CLUSTER: Syntax error expecting positive integer for CLUSTERS.
659 13 | QUICK CLUSTER x/CRITERIA=CLUSTERS(**).
662 "quick-cluster.sps:14.37-14.38: error: QUICK CLUSTER: Syntax error expecting `)'.
663 14 | QUICK CLUSTER x/CRITERIA=CLUSTERS(5 **).
666 "quick-cluster.sps:15.35-15.36: error: QUICK CLUSTER: Syntax error expecting `('.
667 15 | QUICK CLUSTER x/CRITERIA=CONVERGE **.
670 "quick-cluster.sps:16.35-16.36: error: QUICK CLUSTER: Syntax error expecting positive number for CONVERGE.
671 16 | QUICK CLUSTER x/CRITERIA=CONVERGE(**).
674 "quick-cluster.sps:17.37-17.38: error: QUICK CLUSTER: Syntax error expecting `)'.
675 17 | QUICK CLUSTER x/CRITERIA=CONVERGE(5 **).
678 "quick-cluster.sps:18.26-18.27: error: QUICK CLUSTER: Syntax error expecting CLUSTERS, CONVERGE, MXITER, NOINITIAL, or NOUPDATE.
679 18 | QUICK CLUSTER x/CRITERIA=**.
682 "quick-cluster.sps:19.18-19.19: error: QUICK CLUSTER: Syntax error expecting MISSING, PRINT, SAVE, or CRITERIA.
683 19 | QUICK CLUSTER x/ **.