This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Enhance lfs tests: check every seek and sysseek
[perl5.git] / t / lib / bigintpm.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     unshift @INC, '../lib';
6 }
7
8 use Math::BigInt;
9
10 $test = 0;
11 $| = 1;
12 print "1..278\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                } 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                    }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;";
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
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  
85 __END__
86 &bnorm
87 abc:NaN
88    1 a:NaN
89 1bcd2:NaN
90 11111b:NaN
91 +1z:NaN
92 -1z:NaN
93 0:+0
94 +0:+0
95 +00:+0
96 +0 0 0:+0
97 000000  0000000   00000:+0
98 -0:+0
99 -0000:+0
100 +1:+1
101 +01:+1
102 +001:+1
103 +00000100000:+100000
104 123456789:+123456789
105 -1:-1
106 -01:-1
107 -001:-1
108 -123456789:-123456789
109 -00000100000:-100000
110 &bneg
111 abd:NaN
112 +0:+0
113 +1:-1
114 -1:+1
115 +123456789:-123456789
116 -123456789:+123456789
117 &babs
118 abc:NaN
119 +0:+0
120 +1:+1
121 -1:+1
122 +123456789:+123456789
123 -123456789:+123456789
124 &bcmp
125 abc:abc:
126 abc:+0:
127 +0:abc:
128 +0:+0:0
129 -1:+0:-1
130 +0:-1:1
131 +1:+0:1
132 +0:+1:-1
133 -1:+1:-1
134 +1:-1:1
135 -1:-1:0
136 +1:+1:0
137 +123:+123:0
138 +123:+12:1
139 +12:+123:-1
140 -123:-123:0
141 -123:-12:-1
142 -12:-123:1
143 +123:+124:-1
144 +124:+123:1
145 -123:-124:1
146 -124:-123:-1
147 +100:+5:1
148 &badd
149 abc:abc:NaN
150 abc:+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
187 abc:abc:NaN
188 abc:+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
225 abc:abc:NaN
226 abc:+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
258 abc:abc:NaN
259 abc:+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
295 abc:abc:NaN
296 abc:+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
332 abc:abc:NaN
333 abc:+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
343 &blsft
344 abc:abc:NaN
345 +2:+2:+8
346 +1:+32:+4294967296
347 +1:+48:+281474976710656
348 +8:-2:NaN
349 &brsft
350 abc:abc:NaN
351 +8:+2:+2
352 +4294967296:+32:+1
353 +281474976710656:+48:+1
354 +2:-2:NaN
355 &band
356 abc:abc:NaN
357 +8:+2:+0
358 +281474976710656:+0:+0
359 +281474976710656:+1:+0
360 +281474976710656:+281474976710656:+281474976710656
361 &bior
362 abc:abc:NaN
363 +8:+2:+10
364 +281474976710656:+0:+281474976710656
365 +281474976710656:+1:+281474976710657
366 +281474976710656:+281474976710656:+281474976710656
367 &bxor
368 abc:abc:NaN
369 +8:+2:+10
370 +281474976710656:+0:+281474976710656
371 +281474976710656:+1:+281474976710657
372 +281474976710656:+281474976710656:+0
373 &bnot
374 abc:NaN
375 +0:-1
376 +8:-9
377 +281474976710656:-281474976710657