Integrate perlio:
[p5sagit/p5-mst-13.2.git] / t / lib / bigintpm.t
CommitLineData
748a9306 1#!./perl
2
d1f8c7a4 3BEGIN {
4 chdir 't' if -d 't';
20822f61 5 @INC = '../lib';
748a9306 6}
d1f8c7a4 7
748a9306 8use Math::BigInt;
9
10$test = 0;
11$| = 1;
f216259d 12print "1..283\n";
748a9306 13while (<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;";
f216259d 28 } elsif ($f eq "bint") {
29 $try .= "int \$x;";
748a9306 30 } else {
31 $try .= "\$y = new Math::BigInt \"$args[1]\";";
e16b8f49 32 if ($f eq "bcmp"){
748a9306 33 $try .= "\$x <=> \$y;";
e16b8f49 34 }elsif ($f eq "badd"){
748a9306 35 $try .= "\$x + \$y;";
e16b8f49 36 }elsif ($f eq "bsub"){
748a9306 37 $try .= "\$x - \$y;";
e16b8f49 38 }elsif ($f eq "bmul"){
748a9306 39 $try .= "\$x * \$y;";
e16b8f49 40 }elsif ($f eq "bdiv"){
748a9306 41 $try .= "\$x / \$y;";
e16b8f49 42 }elsif ($f eq "bmod"){
748a9306 43 $try .= "\$x % \$y;";
e16b8f49 44 }elsif ($f eq "bgcd"){
748a9306 45 $try .= "Math::BigInt::bgcd(\$x, \$y);";
e16b8f49 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;";
748a9306 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 }
a99f8827 69}
70
71{
72 use Math::BigInt ':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
748a9306 87__END__
88&bnorm
89abc:NaN
90 1 a:NaN
911bcd2:NaN
9211111b:NaN
93+1z:NaN
94-1z:NaN
950:+0
96+0:+0
97+00:+0
98+0 0 0:+0
99000000 0000000 00000:+0
100-0:+0
101-0000:+0
102+1:+1
103+01:+1
104+001:+1
105+00000100000:+100000
106123456789:+123456789
107-1:-1
108-01:-1
109-001:-1
110-123456789:-123456789
111-00000100000:-100000
112&bneg
113abd:NaN
114+0:+0
115+1:-1
116-1:+1
117+123456789:-123456789
118-123456789:+123456789
119&babs
120abc:NaN
121+0:+0
122+1:+1
123-1:+1
124+123456789:+123456789
125-123456789:+123456789
126&bcmp
5d7098d5 127abc:abc:
128abc:+0:
129+0:abc:
130+0:+0:0
748a9306 131-1:+0:-1
5d7098d5 132+0:-1:1
133+1:+0:1
748a9306 134+0:+1:-1
135-1:+1:-1
5d7098d5 136+1:-1:1
137-1:-1:0
138+1:+1:0
139+123:+123:0
140+123:+12:1
748a9306 141+12:+123:-1
5d7098d5 142-123:-123:0
748a9306 143-123:-12:-1
5d7098d5 144-12:-123:1
748a9306 145+123:+124:-1
5d7098d5 146+124:+123:1
147-123:-124:1
748a9306 148-124:-123:-1
5d7098d5 149+100:+5:1
748a9306 150&badd
151abc:abc:NaN
152abc:+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
189abc:abc:NaN
190abc:+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
227abc:abc:NaN
228abc:+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
260abc:abc:NaN
261abc:+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
297abc:abc:NaN
298abc:+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
334abc:abc:NaN
335abc:+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
e16b8f49 345&blsft
346abc:abc:NaN
347+2:+2:+8
348+1:+32:+4294967296
349+1:+48:+281474976710656
350+8:-2:NaN
351&brsft
352abc:abc:NaN
353+8:+2:+2
354+4294967296:+32:+1
355+281474976710656:+48:+1
356+2:-2:NaN
357&band
358abc:abc:NaN
359+8:+2:+0
360+281474976710656:+0:+0
361+281474976710656:+1:+0
362+281474976710656:+281474976710656:+281474976710656
363&bior
364abc:abc:NaN
365+8:+2:+10
366+281474976710656:+0:+281474976710656
367+281474976710656:+1:+281474976710657
368+281474976710656:+281474976710656:+281474976710656
369&bxor
370abc:abc:NaN
371+8:+2:+10
372+281474976710656:+0:+281474976710656
373+281474976710656:+1:+281474976710657
374+281474976710656:+281474976710656:+0
375&bnot
376abc:NaN
377+0:-1
378+8:-9
379+281474976710656:-281474976710657
f216259d 380&bint
381+0:+0
382+1:+1
383+11111111111111111234:+11111111111111111234
384-1:-1
385-11111111111111111234:-11111111111111111234