test suite and fix input_line_number()
[p5sagit/p5-mst-13.2.git] / t / lib / bigintpm.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     unshift @INC, '../lib';
6 }
7
8 use Math::BigInt;
9
10 $test = 0;
11 $| = 1;
12 print "1..276\n";
13 while (<DATA>) {
14        chop;
15        if (s/^&//) {
16                $f = $_;
17        } else {
18                ++$test;
19                @args = split(/:/,$_,99);
20                $ans = pop(@args);
21                $try = "\$x = new Math::BigInt \"$args[0]\";";
22                if ($f eq "bnorm"){
23                    $try .= "\$x+0;";
24                } elsif ($f eq "bneg") {
25                    $try .= "-\$x;";
26                } elsif ($f eq "babs") {
27                    $try .= "abs \$x;";
28                } else {
29                    $try .= "\$y = new Math::BigInt \"$args[1]\";";
30                    if ($f eq "bcmp"){
31                        $try .= "\$x <=> \$y;";
32                    }elsif ($f eq "badd"){
33                        $try .= "\$x + \$y;";
34                    }elsif ($f eq "bsub"){
35                        $try .= "\$x - \$y;";
36                    }elsif ($f eq "bmul"){
37                        $try .= "\$x * \$y;";
38                    }elsif ($f eq "bdiv"){
39                        $try .= "\$x / \$y;";
40                    }elsif ($f eq "bmod"){
41                        $try .= "\$x % \$y;";
42                    }elsif ($f eq "bgcd"){
43                        $try .= "Math::BigInt::bgcd(\$x, \$y);";
44                    }elsif ($f eq "blsft"){
45                        $try .= "\$x << \$y;";
46                    }elsif ($f eq "brsft"){
47                        $try .= "\$x >> \$y;";
48                    }elsif ($f eq "band"){
49                        $try .= "\$x & \$y;";
50                    }elsif ($f eq "bior"){
51                        $try .= "\$x | \$y;";
52                    }elsif ($f eq "bxor"){
53                        $try .= "\$x ^ \$y;";
54                    }elsif ($f eq "bnot"){
55                        $try .= "~\$x;";
56                    } else { warn "Unknown op"; }
57                }
58                #print ">>>",$try,"<<<\n";
59                $ans1 = eval $try;
60                if ("$ans1" eq $ans) { #bug!
61                        print "ok $test\n";
62                } else {
63                        print "not ok $test\n";
64                        print "# '$try' expected: '$ans' got: '$ans1'\n";
65                }
66        }
67
68 __END__
69 &bnorm
70 abc:NaN
71    1 a:NaN
72 1bcd2:NaN
73 11111b:NaN
74 +1z:NaN
75 -1z:NaN
76 0:+0
77 +0:+0
78 +00:+0
79 +0 0 0:+0
80 000000  0000000   00000:+0
81 -0:+0
82 -0000:+0
83 +1:+1
84 +01:+1
85 +001:+1
86 +00000100000:+100000
87 123456789:+123456789
88 -1:-1
89 -01:-1
90 -001:-1
91 -123456789:-123456789
92 -00000100000:-100000
93 &bneg
94 abd:NaN
95 +0:+0
96 +1:-1
97 -1:+1
98 +123456789:-123456789
99 -123456789:+123456789
100 &babs
101 abc:NaN
102 +0:+0
103 +1:+1
104 -1:+1
105 +123456789:+123456789
106 -123456789:+123456789
107 &bcmp
108 abc:abc:
109 abc:+0:
110 +0:abc:
111 +0:+0:0
112 -1:+0:-1
113 +0:-1:1
114 +1:+0:1
115 +0:+1:-1
116 -1:+1:-1
117 +1:-1:1
118 -1:-1:0
119 +1:+1:0
120 +123:+123:0
121 +123:+12:1
122 +12:+123:-1
123 -123:-123:0
124 -123:-12:-1
125 -12:-123:1
126 +123:+124:-1
127 +124:+123:1
128 -123:-124:1
129 -124:-123:-1
130 +100:+5:1
131 &badd
132 abc:abc:NaN
133 abc:+0:NaN
134 +0:abc:NaN
135 +0:+0:+0
136 +1:+0:+1
137 +0:+1:+1
138 +1:+1:+2
139 -1:+0:-1
140 +0:-1:-1
141 -1:-1:-2
142 -1:+1:+0
143 +1:-1:+0
144 +9:+1:+10
145 +99:+1:+100
146 +999:+1:+1000
147 +9999:+1:+10000
148 +99999:+1:+100000
149 +999999:+1:+1000000
150 +9999999:+1:+10000000
151 +99999999:+1:+100000000
152 +999999999:+1:+1000000000
153 +9999999999:+1:+10000000000
154 +99999999999:+1:+100000000000
155 +10:-1:+9
156 +100:-1:+99
157 +1000:-1:+999
158 +10000:-1:+9999
159 +100000:-1:+99999
160 +1000000:-1:+999999
161 +10000000:-1:+9999999
162 +100000000:-1:+99999999
163 +1000000000:-1:+999999999
164 +10000000000:-1:+9999999999
165 +123456789:+987654321:+1111111110
166 -123456789:+987654321:+864197532
167 -123456789:-987654321:-1111111110
168 +123456789:-987654321:-864197532
169 &bsub
170 abc:abc:NaN
171 abc:+0:NaN
172 +0:abc:NaN
173 +0:+0:+0
174 +1:+0:+1
175 +0:+1:-1
176 +1:+1:+0
177 -1:+0:-1
178 +0:-1:+1
179 -1:-1:+0
180 -1:+1:-2
181 +1:-1:+2
182 +9:+1:+8
183 +99:+1:+98
184 +999:+1:+998
185 +9999:+1:+9998
186 +99999:+1:+99998
187 +999999:+1:+999998
188 +9999999:+1:+9999998
189 +99999999:+1:+99999998
190 +999999999:+1:+999999998
191 +9999999999:+1:+9999999998
192 +99999999999:+1:+99999999998
193 +10:-1:+11
194 +100:-1:+101
195 +1000:-1:+1001
196 +10000:-1:+10001
197 +100000:-1:+100001
198 +1000000:-1:+1000001
199 +10000000:-1:+10000001
200 +100000000:-1:+100000001
201 +1000000000:-1:+1000000001
202 +10000000000:-1:+10000000001
203 +123456789:+987654321:-864197532
204 -123456789:+987654321:-1111111110
205 -123456789:-987654321:+864197532
206 +123456789:-987654321:+1111111110
207 &bmul
208 abc:abc:NaN
209 abc:+0:NaN
210 +0:abc:NaN
211 +0:+0:+0
212 +0:+1:+0
213 +1:+0:+0
214 +0:-1:+0
215 -1:+0:+0
216 +123456789123456789:+0:+0
217 +0:+123456789123456789:+0
218 -1:-1:+1
219 -1:+1:-1
220 +1:-1:-1
221 +1:+1:+1
222 +2:+3:+6
223 -2:+3:-6
224 +2:-3:-6
225 -2:-3:+6
226 +111:+111:+12321
227 +10101:+10101:+102030201
228 +1001001:+1001001:+1002003002001
229 +100010001:+100010001:+10002000300020001
230 +10000100001:+10000100001:+100002000030000200001
231 +11111111111:+9:+99999999999
232 +22222222222:+9:+199999999998
233 +33333333333:+9:+299999999997
234 +44444444444:+9:+399999999996
235 +55555555555:+9:+499999999995
236 +66666666666:+9:+599999999994
237 +77777777777:+9:+699999999993
238 +88888888888:+9:+799999999992
239 +99999999999:+9:+899999999991
240 &bdiv
241 abc:abc:NaN
242 abc:+1:abc:NaN
243 +1:abc:NaN
244 +0:+0:NaN
245 +0:+1:+0
246 +1:+0:NaN
247 +0:-1:+0
248 -1:+0:NaN
249 +1:+1:+1
250 -1:-1:+1
251 +1:-1:-1
252 -1:+1:-1
253 +1:+2:+0
254 +2:+1:+2
255 +1000000000:+9:+111111111
256 +2000000000:+9:+222222222
257 +3000000000:+9:+333333333
258 +4000000000:+9:+444444444
259 +5000000000:+9:+555555555
260 +6000000000:+9:+666666666
261 +7000000000:+9:+777777777
262 +8000000000:+9:+888888888
263 +9000000000:+9:+1000000000
264 +35500000:+113:+314159
265 +71000000:+226:+314159
266 +106500000:+339:+314159
267 +1000000000:+3:+333333333
268 +10:+5:+2
269 +100:+4:+25
270 +1000:+8:+125
271 +10000:+16:+625
272 +999999999999:+9:+111111111111
273 +999999999999:+99:+10101010101
274 +999999999999:+999:+1001001001
275 +999999999999:+9999:+100010001
276 +999999999999999:+99999:+10000100001
277 &bmod
278 abc:abc:NaN
279 abc:+1:abc:NaN
280 +1:abc:NaN
281 +0:+0:NaN
282 +0:+1:+0
283 +1:+0:NaN
284 +0:-1:+0
285 -1:+0:NaN
286 +1:+1:+0
287 -1:-1:+0
288 +1:-1:+0
289 -1:+1:+0
290 +1:+2:+1
291 +2:+1:+0
292 +1000000000:+9:+1
293 +2000000000:+9:+2
294 +3000000000:+9:+3
295 +4000000000:+9:+4
296 +5000000000:+9:+5
297 +6000000000:+9:+6
298 +7000000000:+9:+7
299 +8000000000:+9:+8
300 +9000000000:+9:+0
301 +35500000:+113:+33
302 +71000000:+226:+66
303 +106500000:+339:+99
304 +1000000000:+3:+1
305 +10:+5:+0
306 +100:+4:+0
307 +1000:+8:+0
308 +10000:+16:+0
309 +999999999999:+9:+0
310 +999999999999:+99:+0
311 +999999999999:+999:+0
312 +999999999999:+9999:+0
313 +999999999999999:+99999:+0
314 &bgcd
315 abc:abc:NaN
316 abc:+0:NaN
317 +0:abc:NaN
318 +0:+0:+0
319 +0:+1:+1
320 +1:+0:+1
321 +1:+1:+1
322 +2:+3:+1
323 +3:+2:+1
324 +100:+625:+25
325 +4096:+81:+1
326 &blsft
327 abc:abc:NaN
328 +2:+2:+8
329 +1:+32:+4294967296
330 +1:+48:+281474976710656
331 +8:-2:NaN
332 &brsft
333 abc:abc:NaN
334 +8:+2:+2
335 +4294967296:+32:+1
336 +281474976710656:+48:+1
337 +2:-2:NaN
338 &band
339 abc:abc:NaN
340 +8:+2:+0
341 +281474976710656:+0:+0
342 +281474976710656:+1:+0
343 +281474976710656:+281474976710656:+281474976710656
344 &bior
345 abc:abc:NaN
346 +8:+2:+10
347 +281474976710656:+0:+281474976710656
348 +281474976710656:+1:+281474976710657
349 +281474976710656:+281474976710656:+281474976710656
350 &bxor
351 abc:abc:NaN
352 +8:+2:+10
353 +281474976710656:+0:+281474976710656
354 +281474976710656:+1:+281474976710657
355 +281474976710656:+281474976710656:+0
356 &bnot
357 abc:NaN
358 +0:-1
359 +8:-9
360 +281474976710656:-281474976710657