* recode.c (enlarge_dst_widths): Source isn't null-terminated, so
[pspp-builds.git] / tests / xforms / recode.sh
1 #!/bin/sh
2
3 # This program tests the RECODE command
4
5 TEMPDIR=/tmp/pspp-tst-$$
6 TESTFILE=$TEMPDIR/`basename $0`.sps
7
8
9 # ensure that top_builddir  are absolute
10 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
11 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
12 top_builddir=`cd $top_builddir; pwd`
13 PSPP=$top_builddir/src/ui/terminal/pspp
14
15 # ensure that top_srcdir is absolute
16 top_srcdir=`cd $top_srcdir; pwd`
17
18 STAT_CONFIG_PATH=$top_srcdir/config
19 export STAT_CONFIG_PATH
20
21 LANG=C
22 export LANG
23
24 cleanup()
25 {
26      cd /
27      rm -rf $TEMPDIR
28 }
29
30
31 fail()
32 {
33     echo $activity
34     echo FAILED
35     cleanup;
36     exit 1;
37 }
38
39
40 no_result()
41 {
42     echo $activity
43     echo NO RESULT;
44     cleanup;
45     exit 2;
46 }
47
48 pass()
49 {
50     cleanup;
51     exit 0;
52 }
53
54 mkdir -p $TEMPDIR
55
56 cd $TEMPDIR
57
58 activity="create program"
59 cat > $TESTFILE <<EOF
60 DATA LIST LIST NOTABLE/x (f1) s (a4) t (a10).
61 MISSING VALUES x(9)/s('xxx').
62 BEGIN DATA.
63 0, '', ''
64 1, a, a
65 2, ab, ab
66 3, abc, abc
67 4, abcd, abcd
68 5, 123, 123
69 6, ' 123', ' 123'
70 7, +1, +1
71 8, 1x, 1x
72 9, abcd, abcdefghi
73 ,  xxx, abcdefghij
74 END DATA.
75
76 * Numeric to numeric, without INTO.
77 NUMERIC x0 TO x8 (F3).
78 MISSING VALUES x0 to x8 (9).
79 COMPUTE x0=value(x).
80 RECODE x0 (1=9).
81 COMPUTE x1=value(x).
82 RECODE x1 (1=9)(3=8)(5=7).
83 COMPUTE x2=value(x).
84 RECODE x2 (1=8)(2,3,4,5,6,8=9)(9=1).
85 COMPUTE x3=value(x).
86 RECODE x3 (1 THRU 9=10)(MISSING=11).
87 COMPUTE x4=value(x).
88 RECODE x4 (MISSING=11)(1 THRU 9=10).
89 COMPUTE x5=value(x).
90 RECODE x5 (LOWEST THRU 5=1).
91 COMPUTE x6=value(x).
92 RECODE x6 (4 THRU HIGHEST=2).
93 COMPUTE x7=value(x).
94 RECODE x7 (LO THRU HI=3).
95 COMPUTE x8=value(x).
96 RECODE x8 (SYSMIS=4).
97 LIST x x0 TO x8.
98
99 * Numeric to numeric, with INTO, without COPY.
100 NUMERIC ix0 TO ix8 (F3).
101 RECODE x (1=9) INTO ix0.
102 RECODE x (1=9)(3=8)(5=7) INTO ix1.
103 RECODE x (1=8)(2,3,4,5,6,8=9)(9=1) INTO ix2.
104 RECODE x (1 THRU 9=10)(MISSING=11) INTO ix3.
105 RECODE x (MISSING=11)(1 THRU 9=10) INTO ix4.
106 RECODE x (LOWEST THRU 5=1) INTO ix5.
107 RECODE x (4 THRU HIGHEST=2) INTO ix6.
108 RECODE x (LO THRU HI=3) INTO ix7.
109 RECODE x (SYSMIS=4) INTO ix8.
110 LIST x ix0 TO ix8.
111
112 * Numeric to numeric, with INTO, with COPY.
113 NUMERIC cx0 TO cx8 (F3).
114 RECODE x (1=9)(ELSE=COPY) INTO cx0.
115 RECODE x (1=9)(3=8)(5=7)(ELSE=COPY) INTO cx1.
116 RECODE x (1=8)(2,3,4,5,6,8=9)(9=1)(ELSE=COPY) INTO cx2.
117 RECODE x (1 THRU 9=10)(MISSING=11)(ELSE=COPY) INTO cx3.
118 RECODE x (MISSING=11)(1 THRU 9=10)(ELSE=COPY) INTO cx4.
119 RECODE x (LOWEST THRU 5=1)(ELSE=COPY) INTO cx5.
120 RECODE x (4 THRU HIGHEST=2)(ELSE=COPY) INTO cx6.
121 RECODE x (LO THRU HI=3)(ELSE=COPY) INTO cx7.
122 RECODE x (SYSMIS=4)(ELSE=COPY) INTO cx8.
123 LIST x cx0 TO cx8.
124
125 * String to string, with INTO, without COPY.
126 STRING s0 TO s2 (A4)/t0 TO t3 (A10).
127 RECODE s t ('a'='b')('ab'='bc') INTO s0 t0.
128 RECODE s t ('abcd'='xyzw') INTO s1 t1.
129 RECODE s t ('abc'='def')(ELSE='xyz') INTO s2 t2.
130 RECODE t ('a'='b')('abcdefghi'='xyz')('abcdefghij'='jklmnopqr') INTO t3.
131 LIST s t s0 TO s2 t0 TO t3.
132
133 * String to string, with INTO, with COPY.
134 STRING cs0 TO cs2 (A4)/ct0 TO ct3 (A10).
135 RECODE s t ('a'='b')('ab'='bc')(ELSE=COPY) INTO cs0 ct0.
136 RECODE s t ('abcd'='xyzw')(ELSE=COPY) INTO cs1 ct1.
137 RECODE s t ('abc'='def')(ELSE='xyz')(ELSE=COPY) INTO cs2 ct2.
138 RECODE t ('a'='b')('abcdefghi'='xyz')('abcdefghij'='jklmnopqr')(ELSE=COPY)
139     INTO ct3.
140 LIST s t cs0 TO cs2 ct0 TO ct3.
141
142 * String to numeric.
143 NUMERIC ns0 TO ns2 (F3)/nt0 TO nt2 (F3).
144 RECODE s t (CONVERT)(' '=0)('abcd'=1) INTO ns0 nt0.
145 RECODE s t (' '=0)(CONVERT)('abcd'=1) INTO ns1 nt1.
146 RECODE s t ('1x'=1)('abcd'=2)(ELSE=3) INTO ns2 nt2.
147 LIST s t ns0 TO ns2 nt0 TO nt2.
148
149 * Numeric to string.
150 STRING sx0 TO sx2 (a10).
151 RECODE x (1 THRU 9='abcdefghij') INTO sx0.
152 RECODE x (0,1,3,5,7,MISSING='xxx') INTO sx1.
153 RECODE x (2 THRU 6,SYSMIS='xyz')(ELSE='foobar') INTO sx2.
154 LIST x sx0 TO sx2.
155 EOF
156 if [ $? -ne 0 ] ; then no_result ; fi
157
158 activity="run program"
159 $SUPERVISOR $PSPP    -o raw-ascii $TESTFILE
160 if [ $? -ne 0 ] ; then no_result ; fi
161
162 activity="test output"
163 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
164 diff -bu $TEMPDIR/pspp.list - <<EOF
165 x  x0  x1  x2  x3  x4  x5  x6  x7  x8
166 - --- --- --- --- --- --- --- --- ---
167 0   0   0   0   0   0   1   0   3   0
168 1   9   9   8  10  10   1   1   3   1
169 2   2   2   9  10  10   1   2   3   2
170 3   3   8   9  10  10   1   3   3   3
171 4   4   4   9  10  10   1   2   3   4
172 5   5   7   9  10  10   1   2   3   5
173 6   6   6   9  10  10   6   2   3   6
174 7   7   7   7  10  10   7   2   3   7
175 8   8   8   9  10  10   8   2   3   8
176 9   9   9   1  10  11   9   2   3   9
177 .   .   .   .  11  11   .   .   .   4
178 x ix0 ix1 ix2 ix3 ix4 ix5 ix6 ix7 ix8
179 - --- --- --- --- --- --- --- --- ---
180 0   .   .   .   .   .   1   .   3   .
181 1   9   9   8  10  10   1   .   3   .
182 2   .   .   9  10  10   1   .   3   .
183 3   .   8   9  10  10   1   .   3   .
184 4   .   .   9  10  10   1   2   3   .
185 5   .   7   9  10  10   1   2   3   .
186 6   .   .   9  10  10   .   2   3   .
187 7   .   .   .  10  10   .   2   3   .
188 8   .   .   9  10  10   .   2   3   .
189 9   .   .   1  10  11   .   2   3   .
190 .   .   .   .  11  11   .   .   .   4
191 x cx0 cx1 cx2 cx3 cx4 cx5 cx6 cx7 cx8
192 - --- --- --- --- --- --- --- --- ---
193 0   0   0   0   0   0   1   0   3   0
194 1   9   9   8  10  10   1   1   3   1
195 2   2   2   9  10  10   1   2   3   2
196 3   3   8   9  10  10   1   3   3   3
197 4   4   4   9  10  10   1   2   3   4
198 5   5   7   9  10  10   1   2   3   5
199 6   6   6   9  10  10   6   2   3   6
200 7   7   7   7  10  10   7   2   3   7
201 8   8   8   9  10  10   8   2   3   8
202 9   9   9   1  10  11   9   2   3   9
203 .   .   .   .  11  11   .   .   .   4
204    s          t   s0   s1   s2         t0         t1         t2         t3
205 ---- ---------- ---- ---- ---- ---------- ---------- ---------- ----------
206                           xyz                        xyz
207 a    a          b         xyz  b                     xyz        b
208 ab   ab         bc        xyz  bc                    xyz
209 abc  abc                  def                        def
210 abcd abcd            xyzw xyz             xyzw       xyz
211 123  123                  xyz                        xyz
212  123  123                 xyz                        xyz
213 +1   +1                   xyz                        xyz
214 1x   1x                   xyz                        xyz
215 abcd abcdefghi       xyzw xyz                        xyz        xyz
216 xxx  abcdefghij           xyz                        xyz        jklmnopqr
217    s          t  cs0  cs1  cs2        ct0        ct1        ct2        ct3
218 ---- ---------- ---- ---- ---- ---------- ---------- ---------- ----------
219                           xyz                        xyz
220 a    a          b    a    xyz  b          a          xyz        b
221 ab   ab         bc   ab   xyz  bc         ab         xyz        ab
222 abc  abc        abc  abc  def  abc        abc        def        abc
223 abcd abcd       abcd xyzw xyz  abcd       xyzw       xyz        abcd
224 123  123        123  123  xyz  123        123        xyz        123
225  123  123        123  123 xyz   123        123       xyz         123
226 +1   +1         +1   +1   xyz  +1         +1         xyz        +1
227 1x   1x         1x   1x   xyz  1x         1x         xyz        1x
228 abcd abcdefghi  abcd xyzw xyz  abcdefghi  abcdefghi  xyz        xyz
229 xxx  abcdefghij xxx  xxx  xyz  abcdefghij abcdefghij xyz        jklmnopqr
230    s          t ns0 ns1 ns2 nt0 nt1 nt2
231 ---- ---------- --- --- --- --- --- ---
232                   .   0   3   .   0   3
233 a    a            .   .   3   .   .   3
234 ab   ab           .   .   3   .   .   3
235 abc  abc          .   .   3   .   .   3
236 abcd abcd         1   1   2   1   1   2
237 123  123        123 123   3 123 123   3
238  123  123       123 123   3 123 123   3
239 +1   +1           1   1   3   1   1   3
240 1x   1x           .   .   1   .   .   1
241 abcd abcdefghi    1   1   2   .   .   3
242 xxx  abcdefghij   .   .   3   .   .   3
243 x        sx0        sx1        sx2
244 - ---------- ---------- ----------
245 0            xxx        foobar
246 1 abcdefghij xxx        foobar
247 2 abcdefghij            xyz
248 3 abcdefghij xxx        xyz
249 4 abcdefghij            xyz
250 5 abcdefghij xxx        xyz
251 6 abcdefghij            xyz
252 7 abcdefghij xxx        foobar
253 8 abcdefghij            foobar
254 9 abcdefghij xxx        foobar
255 .            xxx        xyz
256 EOF
257
258 if [ $? -ne 0 ] ; then fail ; fi
259
260 pass
261
262
263