support native integers, pack("L_",...) etc. (via private mail)
[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;
e3c7ef20 12print "1..247\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]\";";
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 } else { warn "Unknown op"; }
45 }
46 #print ">>>",$try,"<<<\n";
47 $ans1 = eval $try;
48 if ("$ans1" eq $ans) { #bug!
49 print "ok $test\n";
50 } else {
51 print "not ok $test\n";
52 print "# '$try' expected: '$ans' got: '$ans1'\n";
53 }
54 }
55}
56__END__
57&bnorm
58abc:NaN
59 1 a:NaN
601bcd2:NaN
6111111b:NaN
62+1z:NaN
63-1z:NaN
640:+0
65+0:+0
66+00:+0
67+0 0 0:+0
68000000 0000000 00000:+0
69-0:+0
70-0000:+0
71+1:+1
72+01:+1
73+001:+1
74+00000100000:+100000
75123456789:+123456789
76-1:-1
77-01:-1
78-001:-1
79-123456789:-123456789
80-00000100000:-100000
81&bneg
82abd:NaN
83+0:+0
84+1:-1
85-1:+1
86+123456789:-123456789
87-123456789:+123456789
88&babs
89abc:NaN
90+0:+0
91+1:+1
92-1:+1
93+123456789:+123456789
94-123456789:+123456789
95&bcmp
5d7098d5 96abc:abc:
97abc:+0:
98+0:abc:
99+0:+0:0
748a9306 100-1:+0:-1
5d7098d5 101+0:-1:1
102+1:+0:1
748a9306 103+0:+1:-1
104-1:+1:-1
5d7098d5 105+1:-1:1
106-1:-1:0
107+1:+1:0
108+123:+123:0
109+123:+12:1
748a9306 110+12:+123:-1
5d7098d5 111-123:-123:0
748a9306 112-123:-12:-1
5d7098d5 113-12:-123:1
748a9306 114+123:+124:-1
5d7098d5 115+124:+123:1
116-123:-124:1
748a9306 117-124:-123:-1
5d7098d5 118+100:+5:1
748a9306 119&badd
120abc:abc:NaN
121abc:+0:NaN
122+0:abc:NaN
123+0:+0:+0
124+1:+0:+1
125+0:+1:+1
126+1:+1:+2
127-1:+0:-1
128+0:-1:-1
129-1:-1:-2
130-1:+1:+0
131+1:-1:+0
132+9:+1:+10
133+99:+1:+100
134+999:+1:+1000
135+9999:+1:+10000
136+99999:+1:+100000
137+999999:+1:+1000000
138+9999999:+1:+10000000
139+99999999:+1:+100000000
140+999999999:+1:+1000000000
141+9999999999:+1:+10000000000
142+99999999999:+1:+100000000000
143+10:-1:+9
144+100:-1:+99
145+1000:-1:+999
146+10000:-1:+9999
147+100000:-1:+99999
148+1000000:-1:+999999
149+10000000:-1:+9999999
150+100000000:-1:+99999999
151+1000000000:-1:+999999999
152+10000000000:-1:+9999999999
153+123456789:+987654321:+1111111110
154-123456789:+987654321:+864197532
155-123456789:-987654321:-1111111110
156+123456789:-987654321:-864197532
157&bsub
158abc:abc:NaN
159abc:+0:NaN
160+0:abc:NaN
161+0:+0:+0
162+1:+0:+1
163+0:+1:-1
164+1:+1:+0
165-1:+0:-1
166+0:-1:+1
167-1:-1:+0
168-1:+1:-2
169+1:-1:+2
170+9:+1:+8
171+99:+1:+98
172+999:+1:+998
173+9999:+1:+9998
174+99999:+1:+99998
175+999999:+1:+999998
176+9999999:+1:+9999998
177+99999999:+1:+99999998
178+999999999:+1:+999999998
179+9999999999:+1:+9999999998
180+99999999999:+1:+99999999998
181+10:-1:+11
182+100:-1:+101
183+1000:-1:+1001
184+10000:-1:+10001
185+100000:-1:+100001
186+1000000:-1:+1000001
187+10000000:-1:+10000001
188+100000000:-1:+100000001
189+1000000000:-1:+1000000001
190+10000000000:-1:+10000000001
191+123456789:+987654321:-864197532
192-123456789:+987654321:-1111111110
193-123456789:-987654321:+864197532
194+123456789:-987654321:+1111111110
195&bmul
196abc:abc:NaN
197abc:+0:NaN
198+0:abc:NaN
199+0:+0:+0
200+0:+1:+0
201+1:+0:+0
202+0:-1:+0
203-1:+0:+0
204+123456789123456789:+0:+0
205+0:+123456789123456789:+0
206-1:-1:+1
207-1:+1:-1
208+1:-1:-1
209+1:+1:+1
210+2:+3:+6
211-2:+3:-6
212+2:-3:-6
213-2:-3:+6
214+111:+111:+12321
215+10101:+10101:+102030201
216+1001001:+1001001:+1002003002001
217+100010001:+100010001:+10002000300020001
218+10000100001:+10000100001:+100002000030000200001
219+11111111111:+9:+99999999999
220+22222222222:+9:+199999999998
221+33333333333:+9:+299999999997
222+44444444444:+9:+399999999996
223+55555555555:+9:+499999999995
224+66666666666:+9:+599999999994
225+77777777777:+9:+699999999993
226+88888888888:+9:+799999999992
227+99999999999:+9:+899999999991
228&bdiv
229abc:abc:NaN
230abc:+1:abc:NaN
231+1:abc:NaN
232+0:+0:NaN
233+0:+1:+0
234+1:+0:NaN
235+0:-1:+0
236-1:+0:NaN
237+1:+1:+1
238-1:-1:+1
239+1:-1:-1
240-1:+1:-1
241+1:+2:+0
242+2:+1:+2
243+1000000000:+9:+111111111
244+2000000000:+9:+222222222
245+3000000000:+9:+333333333
246+4000000000:+9:+444444444
247+5000000000:+9:+555555555
248+6000000000:+9:+666666666
249+7000000000:+9:+777777777
250+8000000000:+9:+888888888
251+9000000000:+9:+1000000000
252+35500000:+113:+314159
253+71000000:+226:+314159
254+106500000:+339:+314159
255+1000000000:+3:+333333333
256+10:+5:+2
257+100:+4:+25
258+1000:+8:+125
259+10000:+16:+625
260+999999999999:+9:+111111111111
261+999999999999:+99:+10101010101
262+999999999999:+999:+1001001001
263+999999999999:+9999:+100010001
264+999999999999999:+99999:+10000100001
265&bmod
266abc:abc:NaN
267abc:+1:abc:NaN
268+1:abc:NaN
269+0:+0:NaN
270+0:+1:+0
271+1:+0:NaN
272+0:-1:+0
273-1:+0:NaN
274+1:+1:+0
275-1:-1:+0
276+1:-1:+0
277-1:+1:+0
278+1:+2:+1
279+2:+1:+0
280+1000000000:+9:+1
281+2000000000:+9:+2
282+3000000000:+9:+3
283+4000000000:+9:+4
284+5000000000:+9:+5
285+6000000000:+9:+6
286+7000000000:+9:+7
287+8000000000:+9:+8
288+9000000000:+9:+0
289+35500000:+113:+33
290+71000000:+226:+66
291+106500000:+339:+99
292+1000000000:+3:+1
293+10:+5:+0
294+100:+4:+0
295+1000:+8:+0
296+10000:+16:+0
297+999999999999:+9:+0
298+999999999999:+99:+0
299+999999999999:+999:+0
300+999999999999:+9999:+0
301+999999999999999:+99999:+0
302&bgcd
303abc:abc:NaN
304abc:+0:NaN
305+0:abc:NaN
306+0:+0:+0
307+0:+1:+1
308+1:+0:+1
309+1:+1:+1
310+2:+3:+1
311+3:+2:+1
312+100:+625:+25
313+4096:+81:+1