d0bf071765c8ba9d327c39b109df1c928f87be98
[pspp] / tests / language / control / do-if.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([DO IF])
18
19 AT_SETUP([DO IF])
20 (for a in 0 1 ' '; do
21     for b in 0 1 ' '; do
22         for c in 0 1 ' '; do
23             for d in 0 1 ' '; do
24                 abcd=$a$b$c$d
25                 echo "$abcd" 1>&3
26                 if test "$a" = "1"; then
27                     echo " $abcd A"
28                 elif test "$a" = " "; then
29                     :
30                 elif test "$b" = "1"; then
31                     echo " $abcd B"
32                 elif test "$b" = " "; then
33                     :
34                 elif test "$c" = "1"; then
35                     echo " $abcd C"
36                 elif test "$c" = " "; then
37                     :
38                 elif test "$d" = "1"; then
39                     echo " $abcd D"
40                 elif test "$d" = " "; then
41                     :
42                 else
43                     echo " $abcd E"
44                 fi
45             done
46         done
47     done
48 done) >expout 3>do-if.txt || exit 99
49 AT_DATA([do-if.sps], [dnl
50 DATA LIST FILE="do-if.txt"/A B C D 1-4 ABCD 1-4 (A).
51 DO IF A.
52 PRINT OUTFILE="do-if.out"/ABCD 'A'.
53 ELSE IF B.
54 PRINT OUTFILE="do-if.out"/ABCD 'B'.
55 ELSE IF C.
56 PRINT OUTFILE="do-if.out"/ABCD 'C'.
57 ELSE IF D.
58 PRINT OUTFILE="do-if.out"/ABCD 'D'.
59 ELSE.
60 PRINT OUTFILE="do-if.out"/ABCD 'E'.
61 END IF.
62 EXECUTE.
63 ])
64 AT_CHECK([pspp do-if.sps], [0], [ignore])
65 AT_CHECK([cat do-if.out], [0], [expout])
66 AT_CLEANUP
67
68 AT_SETUP([unpaired END IF crash])
69 AT_DATA([do-if.sps], [dnl
70 DATA LIST LIST NOTABLE/a b c.
71 END IF.
72 ])
73 AT_CHECK([pspp -O format=csv do-if.sps], [1], [dnl
74 do-if.sps:2: error: END IF: This command cannot appear outside DO IF...END IF.
75 ])
76 AT_CLEANUP
77
78
79
80 AT_SETUP([ELSE without DO IF])
81 AT_DATA([do-if.sps], [dnl
82 DATA lIST NOTABLE LIST /QUA BRA *.
83 BEGIN DATA
84 4  1
85 6  3
86 END DATA
87
88 ELSE QUA 'A string'.
89
90 EXECUTE.
91 ])
92 AT_CHECK([pspp -O format=csv do-if.sps], [1], [dnl
93 do-if.sps:7: error: ELSE: This command cannot appear outside DO IF...END IF.
94
95 do-if.sps:9: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
96 ])
97 AT_CLEANUP
98