Rewrite PSPP output engine.
[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 diff -c $TEMPDIR/pspp.csv - << EOF
95 Table: Data List
96 X,Y
97 1,4
98 2,5
99 3,6
100 EOF
101 if [ $? -ne 0 ] ; then fail ; fi
102
103 activity="create test2.pspp"
104 cat > test2.pspp <<EOF
105 INPUT PROGRAM.
106         NUMERIC #A #B.
107
108         DO IF NOT #A.
109                 DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
110         END IF.
111         DO IF NOT #B.
112                 DATA LIST NOTABLE END=#B FILE='b.data'/Y 1-10.
113         END IF.
114         DO IF #A AND #B.
115                 END FILE.
116         END IF.
117         END CASE.
118 END INPUT PROGRAM.
119 LIST.
120 EOF
121 if [ $? -ne 0 ] ; then no_result ; fi
122
123 activity="run test2"
124 $SUPERVISOR $PSPP --testing-mode test2.pspp
125 if [ $? -ne 0 ] ; then no_result ; fi
126
127 activity="compare test2 results"
128 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
129 diff -c $TEMPDIR/pspp.csv - << EOF
130 Table: Data List
131 X,Y
132 1,4
133 2,5
134 3,6
135 .,7
136 .,8
137 EOF
138 if [ $? -ne 0 ] ; then fail ; fi
139
140 activity="create test3.pspp"
141 cat > test3.pspp <<EOF
142 INPUT PROGRAM.
143         NUMERIC #A #B.
144
145         DO IF #A.
146                 DATA LIST NOTABLE END=#B FILE='b.data'/X 1-10.
147                 DO IF #B.
148                         END FILE.
149                 ELSE.
150                         END CASE.
151                 END IF.
152         ELSE.
153                 DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
154                 DO IF NOT #A.
155                         END CASE.
156                 END IF.
157         END IF.
158 END INPUT PROGRAM.
159 LIST.
160 EOF
161 if [ $? -ne 0 ] ; then no_result ; fi
162
163 activity="run test3"
164 $SUPERVISOR $PSPP --testing-mode test3.pspp
165 if [ $? -ne 0 ] ; then no_result ; fi
166
167 activity="compare test3 results"
168 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
169 diff -c $TEMPDIR/pspp.csv - << EOF
170 Table: Data List
171 X
172 1
173 2
174 3
175 4
176 5
177 6
178 7
179 8
180 EOF
181 if [ $? -ne 0 ] ; then fail ; fi
182
183 activity="create test4.pspp"
184 cat > test4.pspp <<EOF
185 INPUT PROGRAM.
186         NUMERIC #EOF.
187
188         LOOP IF NOT #EOF.
189                 DATA LIST NOTABLE END=#EOF FILE='a.data'/X 1-10.
190                 DO IF NOT #EOF.
191                         END CASE.
192                 END IF.
193         END LOOP.
194
195         COMPUTE #EOF = 0.
196         LOOP IF NOT #EOF.
197                 DATA LIST NOTABLE END=#EOF FILE='b.data'/X 1-10.
198                 DO IF NOT #EOF.
199                         END CASE.
200                 END IF.
201         END LOOP.
202
203         END FILE.
204 END INPUT PROGRAM.
205 LIST.
206 EOF
207 if [ $? -ne 0 ] ; then no_result ; fi
208
209 activity="run test4"
210 $SUPERVISOR $PSPP --testing-mode test4.pspp
211 if [ $? -ne 0 ] ; then no_result ; fi
212
213 activity="compare test4 results"
214 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
215 diff -c $TEMPDIR/pspp.csv - << EOF
216 Table: Data List
217 X
218 1
219 2
220 3
221 4
222 5
223 6
224 7
225 8
226 EOF
227 if [ $? -ne 0 ] ; then fail ; fi
228
229 # This example differs slightly from the one in the manual in that
230 # it doesn't generate random variates.  There's already a test that
231 # checks that random variates are predictable, so we don't need
232 # another.
233 activity="create test5.pspp"
234 cat > test5.pspp <<EOF
235 INPUT PROGRAM.
236         LOOP #I=1 TO 50.
237                 COMPUTE X=#I * 3.
238                 END CASE.
239         END LOOP.
240         END FILE.
241 END INPUT PROGRAM.
242 LIST/FORMAT=NUMBERED.
243 EOF
244 if [ $? -ne 0 ] ; then no_result ; fi
245
246 activity="run test5"
247 $SUPERVISOR $PSPP --testing-mode test5.pspp
248 if [ $? -ne 0 ] ; then no_result ; fi
249
250 activity="compare test5 results"
251 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
252 diff -c $TEMPDIR/pspp.csv - << EOF
253 Table: Data List
254 Case Number,X
255 1,3.00
256 2,6.00
257 3,9.00
258 4,12.00
259 5,15.00
260 6,18.00
261 7,21.00
262 8,24.00
263 9,27.00
264 10,30.00
265 11,33.00
266 12,36.00
267 13,39.00
268 14,42.00
269 15,45.00
270 16,48.00
271 17,51.00
272 18,54.00
273 19,57.00
274 20,60.00
275 21,63.00
276 22,66.00
277 23,69.00
278 24,72.00
279 25,75.00
280 26,78.00
281 27,81.00
282 28,84.00
283 29,87.00
284 30,90.00
285 31,93.00
286 32,96.00
287 33,99.00
288 34,102.00
289 35,105.00
290 36,108.00
291 37,111.00
292 38,114.00
293 39,117.00
294 40,120.00
295 41,123.00
296 42,126.00
297 43,129.00
298 44,132.00
299 45,135.00
300 46,138.00
301 47,141.00
302 48,144.00
303 49,147.00
304 50,150.00
305 EOF
306 if [ $? -ne 0 ] ; then fail ; fi
307
308
309 pass