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