78e7f31801d9555593dd4286285a342fdc61ee1d
[pspp-builds.git] / tests / command / match-files.sh
1 #!/bin/sh
2
3 # This program tests the MATCH FILES procedure
4
5 TEMPDIR=/tmp/pspp-tst-$$
6 TESTFILE=$TEMPDIR/match-files.pspp
7
8
9 here=`pwd`;
10
11 # ensure that top_srcdir is absolute
12 cd $top_srcdir; top_srcdir=`pwd`
13
14
15 STAT_CONFIG_PATH=$top_srcdir/config
16 export STAT_CONFIG_PATH
17
18 cleanup()
19 {
20     cd /
21     rm -rf $TEMPDIR
22     :
23 }
24
25
26 fail()
27 {
28     echo $activity
29     echo FAILED
30     cleanup;
31     exit 1;
32 }
33
34
35 no_result()
36 {
37     echo $activity
38     echo NO RESULT;
39     cleanup;
40     exit 2;
41 }
42
43 pass()
44 {
45     cleanup;
46     exit 0;
47 }
48
49 mkdir -p $TEMPDIR
50
51 cd $TEMPDIR
52
53 activity="data create"
54 cat > a.data <<EOF
55 0aA
56 1aB
57 1aC
58 2aD
59 3aE
60 4aF
61 5aG
62 5aH
63 6aI
64 7aJ
65 7aK
66 7aL
67 8aM
68 EOF
69 if [ $? -ne 0 ] ; then no_result ; fi
70 cat > b.data <<EOF
71 1bN
72 3bO
73 4bP
74 6bQ
75 7bR
76 9bS
77 EOF
78 if [ $? -ne 0 ] ; then no_result ; fi
79
80 cat > ff.out <<EOF
81 A B C D INA INB
82 - - - - --- ---
83 0 a A     1   0
84 1 a B N   1   1
85 1 a C     1   0
86 2 a D     1   0
87 3 a E O   1   1
88 4 a F P   1   1
89 5 a G     1   0
90 5 a H     1   0
91 6 a I Q   1   1
92 7 a J R   1   1
93 7 a K     1   0
94 7 a L     1   0
95 8 a M     1   0
96 9 b   S   0   1
97 EOF
98
99 cat > ft.out <<EOF
100 A B C D INA INB
101 - - - - --- ---
102 0 a A     1   0
103 1 a B N   1   1
104 1 a C N   1   1
105 2 a D     1   0
106 3 a E O   1   1
107 4 a F P   1   1
108 5 a G     1   0
109 5 a H     1   0
110 6 a I Q   1   1
111 7 a J R   1   1
112 7 a K R   1   1
113 7 a L R   1   1
114 8 a M     1   0
115 EOF
116
117 # Test nonparallel match and table lookup.
118 dla="data list notable file='a.data' /A B C 1-3 (a)."
119 sa="save outfile='a.sys'."
120 dlb="data list notable file='b.data' /A B C 1-3 (a)."
121 sb="save outfile='b.sys'."
122 for types in ff ft; do
123     type1=file
124     if [ $types = ff ]; then 
125         type2=file
126     else
127         type2=table
128     fi
129     for sources in ss sa as; do
130         name="$types-$sources"
131         activity="create $name.pspp"
132         {
133             if [ $sources = ss ]; then
134                 cat <<EOF
135 $dla
136 $sa
137 $dlb
138 $sb
139 match files $type1='a.sys' /in=INA /$type2='b.sys' /in=INB /rename c=D /by a.
140 EOF
141             elif [ $sources = sa ]; then
142                 cat <<EOF
143 $dla
144 $sa
145 $dlb
146 match files $type1='a.sys' /in=INA /$type2=* /in=INB /rename c=D /by a.
147 EOF
148             elif [ $sources = as ]; then
149                 cat <<EOF
150 $dlb
151 $sb
152 $dla
153 match files $type1=* /in=INA /$type2='b.sys' /in=INB /rename c=D /by a.
154 EOF
155             else
156                 activity="internal error"
157                 no_result
158             fi
159             echo 'list.'
160         } > $name.pspp
161         if [ $? -ne 0 ] ; then no_result ; fi
162
163         activity="run $name.pspp"
164         $SUPERVISOR $here/../src/pspp -o raw-ascii $name.pspp >/dev/null 2>&1
165         if [ $? -ne 0 ] ; then no_result ; fi
166
167         activity="check $name output"
168         perl -pi -e 's/^\s*$//g' pspp.list
169         perl -pi -e 's/^\s*$//g' $types.out
170         diff -b -w pspp.list $types.out
171         if [ $? -ne 0 ] ; then fail ; fi
172     done
173 done
174
175 # Test parallel match.  
176 name="parallel"
177 activity="create $name.pspp"
178 cat > $name.pspp <<EOF
179 $dla
180 $sa
181 $dlb
182 $sb
183 match files file='a.sys' /file='b.sys' /rename (a b c=D E F).
184 list.
185 EOF
186 if [ $? -ne 0 ] ; then no_result ; fi
187
188 activity="run $name.pspp"
189 $SUPERVISOR $here/../src/pspp -o raw-ascii $name.pspp >/dev/null 2>&1
190 if [ $? -ne 0 ] ; then no_result ; fi
191
192 activity="check $name output"
193 perl -pi -e 's/^\s*$//g' pspp.list
194 diff -b -w - pspp.list <<EOF
195 A B C D E F
196 - - - - - -
197 0 a A 1 b N
198 1 a B 3 b O
199 1 a C 4 b P
200 2 a D 6 b Q
201 3 a E 7 b R
202 4 a F 9 b S
203 5 a G
204 5 a H
205 6 a I
206 7 a J
207 7 a K
208 7 a L
209 8 a M
210 EOF
211 if [ $? -ne 0 ] ; then fail ; fi
212
213 # Test bug handling TABLE from active file found by John Darrington.
214 name="active-table"
215 activity="create $name.pspp"
216 cat > $name.pspp <<EOF
217 DATA LIST LIST NOTABLE /x * y *.
218 BEGIN DATA
219 3 30
220 2 21
221 1 22
222 END DATA.
223
224 SAVE OUTFILE='bar.sav'.
225
226 DATA LIST LIST NOTABLE /x * z *.
227 BEGIN DATA
228 3 8
229 2 9
230 END DATA.
231
232 MATCH FILES TABLE=* /FILE='bar.sav' /BY=x.
233 LIST.
234 EOF
235 if [ $? -ne 0 ] ; then no_result ; fi
236
237 activity="run $name.pspp"
238 $SUPERVISOR $here/../src/pspp -o raw-ascii $name.pspp >/dev/null 2>&1
239 if [ $? -ne 0 ] ; then no_result ; fi
240
241 activity="check $name output"
242 perl -pi -e 's/^\s*$//g' pspp.list
243 diff -b -w - pspp.list <<EOF | perl -e 's/^\s*$//g'
244         x        z        y
245  -------- -------- --------
246      3.00     8.00    30.00 
247      2.00      .      21.00 
248      1.00      .      22.00 
249 EOF
250 if [ $? -ne 0 ] ; then fail ; fi
251
252
253 pass;