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