Fix cleanup of ROC command.
[pspp-builds.git] / tests / command / input-program.sh
1 #!/bin/sh
2
3 # This program tests the INPUT PROGRAM command, specifically all of
4 # the examples given in the user manual.
5
6 TEMPDIR=/tmp/pspp-tst-$$
7
8 # ensure that top_builddir  are absolute
9 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
10 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
11 top_builddir=`cd $top_builddir; pwd`
12 PSPP=$top_builddir/src/ui/terminal/pspp
13
14 # ensure that top_srcdir is absolute
15 top_srcdir=`cd $top_srcdir; pwd`
16
17 STAT_CONFIG_PATH=$top_srcdir/config
18 export STAT_CONFIG_PATH
19
20 LANG=C
21 export LANG
22
23 cleanup()
24 {
25      if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
26         echo "NOT cleaning $TEMPDIR" 
27         return ; 
28      fi
29      cd /
30      rm -rf $TEMPDIR
31 }
32
33
34 fail()
35 {
36     echo $activity
37     echo FAILED
38     cleanup;
39     exit 1;
40 }
41
42
43 no_result()
44 {
45     echo $activity
46     echo NO RESULT;
47     cleanup;
48     exit 2;
49 }
50
51 pass()
52 {
53     cleanup;
54     exit 0;
55 }
56
57 mkdir -p $TEMPDIR
58
59 cd $TEMPDIR
60
61 activity="create a.data"
62 cat > a.data <<EOF
63 1
64 2
65 3
66 EOF
67 if [ $? -ne 0 ] ; then no_result ; fi
68
69 activity="create b.data"
70 cat > b.data <<EOF
71 4
72 5
73 6
74 7
75 8
76 EOF
77 if [ $? -ne 0 ] ; then no_result ; fi
78
79 activity="create test1.pspp"
80 cat > test1.pspp <<EOF
81 INPUT PROGRAM.
82         DATA LIST NOTABLE FILE='a.data'/X 1-10.
83         DATA LIST NOTABLE FILE='b.data'/Y 1-10.
84 END INPUT PROGRAM.
85 LIST.
86 EOF
87 if [ $? -ne 0 ] ; then no_result ; fi
88
89 activity="run test1"
90 $SUPERVISOR $PSPP --testing-mode test1.pspp
91 if [ $? -ne 0 ] ; then no_result ; fi
92
93 activity="compare test1 results"
94 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
95 diff -b  $TEMPDIR/pspp.list - << EOF
96          X          Y
97 ---------- ----------
98          1          4
99          2          5
100          3          6
101 EOF
102 if [ $? -ne 0 ] ; then fail ; fi
103
104 activity="create test2.pspp"
105 cat > test2.pspp <<EOF
106 INPUT PROGRAM.
107         NUMERIC #A #B.
108
109         DO IF NOT #A.
110                 DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
111         END IF.
112         DO IF NOT #B.
113                 DATA LIST NOTABLE END=#B FILE='b.data'/Y 1-10.
114         END IF.
115         DO IF #A AND #B.
116                 END FILE.
117         END IF.
118         END CASE.
119 END INPUT PROGRAM.
120 LIST.
121 EOF
122 if [ $? -ne 0 ] ; then no_result ; fi
123
124 activity="run test2"
125 $SUPERVISOR $PSPP --testing-mode test2.pspp
126 if [ $? -ne 0 ] ; then no_result ; fi
127
128 activity="compare test2 results"
129 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
130 diff -b  $TEMPDIR/pspp.list - << EOF
131          X          Y
132 ---------- ----------
133          1          4
134          2          5
135          3          6
136          .          7
137          .          8
138 EOF
139 if [ $? -ne 0 ] ; then fail ; fi
140
141 activity="create test3.pspp"
142 cat > test3.pspp <<EOF
143 INPUT PROGRAM.
144         NUMERIC #A #B.
145
146         DO IF #A.
147                 DATA LIST NOTABLE END=#B FILE='b.data'/X 1-10.
148                 DO IF #B.
149                         END FILE.
150                 ELSE.
151                         END CASE.
152                 END IF.
153         ELSE.
154                 DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
155                 DO IF NOT #A.
156                         END CASE.
157                 END IF.
158         END IF.
159 END INPUT PROGRAM.
160 LIST.
161 EOF
162 if [ $? -ne 0 ] ; then no_result ; fi
163
164 activity="run test3"
165 $SUPERVISOR $PSPP --testing-mode test3.pspp
166 if [ $? -ne 0 ] ; then no_result ; fi
167
168 activity="compare test3 results"
169 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
170 diff -b  $TEMPDIR/pspp.list - << EOF
171          X
172 ----------
173          1
174          2
175          3
176          4
177          5
178          6
179          7
180          8
181 EOF
182 if [ $? -ne 0 ] ; then fail ; fi
183
184 activity="create test4.pspp"
185 cat > test4.pspp <<EOF
186 INPUT PROGRAM.
187         NUMERIC #EOF.
188
189         LOOP IF NOT #EOF.
190                 DATA LIST NOTABLE END=#EOF FILE='a.data'/X 1-10.
191                 DO IF NOT #EOF.
192                         END CASE.
193                 END IF.
194         END LOOP.
195
196         COMPUTE #EOF = 0.
197         LOOP IF NOT #EOF.
198                 DATA LIST NOTABLE END=#EOF FILE='b.data'/X 1-10.
199                 DO IF NOT #EOF.
200                         END CASE.
201                 END IF.
202         END LOOP.
203
204         END FILE.
205 END INPUT PROGRAM.
206 LIST.
207 EOF
208 if [ $? -ne 0 ] ; then no_result ; fi
209
210 activity="run test4"
211 $SUPERVISOR $PSPP --testing-mode test4.pspp
212 if [ $? -ne 0 ] ; then no_result ; fi
213
214 activity="compare test4 results"
215 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
216 diff -b  $TEMPDIR/pspp.list - << EOF
217          X
218 ----------
219          1
220          2
221          3
222          4
223          5
224          6
225          7
226          8
227 EOF
228 if [ $? -ne 0 ] ; then fail ; fi
229
230 # This example differs slightly from the one in the manual in that
231 # it doesn't generate random variates.  There's already a test that
232 # checks that random variates are predictable, so we don't need
233 # another.
234 activity="create test5.pspp"
235 cat > test5.pspp <<EOF
236 INPUT PROGRAM.
237         LOOP #I=1 TO 50.
238                 COMPUTE X=#I * 3.
239                 END CASE.
240         END LOOP.
241         END FILE.
242 END INPUT PROGRAM.
243 LIST/FORMAT=NUMBERED.
244 EOF
245 if [ $? -ne 0 ] ; then no_result ; fi
246
247 activity="run test5"
248 $SUPERVISOR $PSPP --testing-mode test5.pspp
249 if [ $? -ne 0 ] ; then no_result ; fi
250
251 activity="compare test5 results"
252 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
253 diff -b  $TEMPDIR/pspp.list - << EOF
254 Case#        X
255 ----- --------
256     1     3.00
257     2     6.00
258     3     9.00
259     4    12.00
260     5    15.00
261     6    18.00
262     7    21.00
263     8    24.00
264     9    27.00
265    10    30.00
266    11    33.00
267    12    36.00
268    13    39.00
269    14    42.00
270    15    45.00
271    16    48.00
272    17    51.00
273    18    54.00
274    19    57.00
275    20    60.00
276    21    63.00
277    22    66.00
278    23    69.00
279    24    72.00
280    25    75.00
281    26    78.00
282    27    81.00
283    28    84.00
284    29    87.00
285    30    90.00
286    31    93.00
287    32    96.00
288    33    99.00
289    34   102.00
290    35   105.00
291    36   108.00
292    37   111.00
293    38   114.00
294    39   117.00
295    40   120.00
296    41   123.00
297    42   126.00
298    43   129.00
299    44   132.00
300    45   135.00
301    46   138.00
302    47   141.00
303    48   144.00
304    49   147.00
305    50   150.00
306 EOF
307 if [ $? -ne 0 ] ; then fail ; fi
308
309
310 pass