test suite and fix input_line_number()
[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;
5276f2af 12print "1..276\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 }
67}
68__END__
69&bnorm
70abc:NaN
71 1 a:NaN
721bcd2:NaN
7311111b:NaN
74+1z:NaN
75-1z:NaN
760:+0
77+0:+0
78+00:+0
79+0 0 0:+0
80000000 0000000 00000:+0
81-0:+0
82-0000:+0
83+1:+1
84+01:+1
85+001:+1
86+00000100000:+100000
87123456789:+123456789
88-1:-1
89-01:-1
90-001:-1
91-123456789:-123456789
92-00000100000:-100000
93&bneg
94abd:NaN
95+0:+0
96+1:-1
97-1:+1
98+123456789:-123456789
99-123456789:+123456789
100&babs
101abc:NaN
102+0:+0
103+1:+1
104-1:+1
105+123456789:+123456789
106-123456789:+123456789
107&bcmp
5d7098d5 108abc:abc:
109abc:+0:
110+0:abc:
111+0:+0:0
748a9306 112-1:+0:-1
5d7098d5 113+0:-1:1
114+1:+0:1
748a9306 115+0:+1:-1
116-1:+1:-1
5d7098d5 117+1:-1:1
118-1:-1:0
119+1:+1:0
120+123:+123:0
121+123:+12:1
748a9306 122+12:+123:-1
5d7098d5 123-123:-123:0
748a9306 124-123:-12:-1
5d7098d5 125-12:-123:1
748a9306 126+123:+124:-1
5d7098d5 127+124:+123:1
128-123:-124:1
748a9306 129-124:-123:-1
5d7098d5 130+100:+5:1
748a9306 131&badd
132abc:abc:NaN
133abc:+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
170abc:abc:NaN
171abc:+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
208abc:abc:NaN
209abc:+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
241abc:abc:NaN
242abc:+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
278abc:abc:NaN
279abc:+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
315abc:abc:NaN
316abc:+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
e16b8f49 326&blsft
327abc:abc:NaN
328+2:+2:+8
329+1:+32:+4294967296
330+1:+48:+281474976710656
331+8:-2:NaN
332&brsft
333abc:abc:NaN
334+8:+2:+2
335+4294967296:+32:+1
336+281474976710656:+48:+1
337+2:-2:NaN
338&band
339abc:abc:NaN
340+8:+2:+0
341+281474976710656:+0:+0
342+281474976710656:+1:+0
343+281474976710656:+281474976710656:+281474976710656
344&bior
345abc:abc:NaN
346+8:+2:+10
347+281474976710656:+0:+281474976710656
348+281474976710656:+1:+281474976710657
349+281474976710656:+281474976710656:+281474976710656
350&bxor
351abc:abc:NaN
352+8:+2:+10
353+281474976710656:+0:+281474976710656
354+281474976710656:+1:+281474976710657
355+281474976710656:+281474976710656:+0
356&bnot
357abc:NaN
358+0:-1
359+8:-9
360+281474976710656:-281474976710657