Update to Math::BigInt 1.36. The biggest news is
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigfltpm.t
1 #!/usr/bin/perl -w
2
3 use Test;
4 use strict;
5
6 BEGIN
7   {
8   $| = 1;
9   unshift @INC, '../lib'; # for running manually
10   # chdir 't' if -d 't';
11   plan tests => 945;
12   }
13
14 use Math::BigFloat;
15 use Math::BigInt;
16
17 my ($x,$y,$f,@args,$ans,$try,$ans1,$ans1_str,$setup);
18 while (<DATA>)
19   {
20   chop;
21   $_ =~ s/#.*$//;       # remove comments
22   $_ =~ s/\s+$//;       # trailing spaces
23   next if /^$/;         # skip empty lines & comments
24   if (s/^&//)
25     {
26     $f = $_;
27     }
28   elsif (/^\$/)
29     {
30     $setup = $_; $setup =~ s/^\$/\$Math::BigFloat::/;   # rnd_mode, div_scale 
31     # print "$setup\n";
32     }
33   else
34     {
35     if (m|^(.*?):(/.+)$|)
36       {
37       $ans = $2;
38       @args = split(/:/,$1,99);
39       }
40     else
41       {
42       @args = split(/:/,$_,99); $ans = pop(@args);
43       }
44     $try = "\$x = new Math::BigFloat \"$args[0]\";";
45     if ($f eq "fnorm")
46       {
47         $try .= "\$x;";
48       } elsif ($f eq "binf") {
49         $try .= "\$x->binf('$args[1]');";
50       } elsif ($f eq "bsstr") {
51         $try .= "\$x->bsstr();";
52       } elsif ($f eq "fneg") {
53         $try .= "-\$x;";
54       } elsif ($f eq "bfloor") {
55         $try .= "\$x->bfloor();";
56       } elsif ($f eq "bceil") {
57         $try .= "\$x->bceil();";
58       } elsif ($f eq "is_zero") {
59         $try .= "\$x->is_zero()+0;";
60       } elsif ($f eq "is_one") {
61         $try .= "\$x->is_one()+0;";
62       } elsif ($f eq "is_odd") {
63         $try .= "\$x->is_odd()+0;";
64       } elsif ($f eq "is_even") {
65         $try .= "\$x->is_even()+0;";
66       } elsif ($f eq "as_number") {
67         $try .= "\$x->as_number();";
68       } elsif ($f eq "fabs") {
69         $try .= "abs \$x;";
70       }elsif ($f eq "fround") {
71         $try .= "$setup; \$x->fround($args[1]);";
72       } elsif ($f eq "ffround") {
73         $try .= "$setup; \$x->ffround($args[1]);";
74       } elsif ($f eq "fsqrt") {
75         $try .= "$setup; \$x->fsqrt();";
76       }
77     else
78       {
79       $try .= "\$y = new Math::BigFloat \"$args[1]\";";
80       if ($f eq "fcmp") {
81         $try .= "\$x <=> \$y;";
82       } elsif ($f eq "fpow") {
83         $try .= "\$x ** \$y;";
84       } elsif ($f eq "fadd") {
85         $try .= "\$x + \$y;";
86       } elsif ($f eq "fsub") {
87         $try .= "\$x - \$y;";
88       } elsif ($f eq "fmul") {
89         $try .= "\$x * \$y;";
90       } elsif ($f eq "fdiv") {
91         $try .= "$setup; \$x / \$y;";
92       } elsif ($f eq "fmod") {
93         $try .= "\$x % \$y;";
94       } else { warn "Unknown op '$f'"; }
95     }
96     $ans1 = eval $try;
97     if ($ans =~ m|^/(.*)$|)
98       {
99       my $pat = $1;
100       if ($ans1 =~ /$pat/)
101         {
102         ok (1,1);
103         }
104       else
105         {
106         print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
107         }
108       }
109     else
110       {
111       if ($ans eq "")
112         {
113         ok_undef ($ans1);
114         }
115       else
116         {
117         print "# Tried: '$try'\n" if !ok ($ans1, $ans);
118         if (ref($ans1) eq 'Math::BigFloat')
119           {
120           #print $ans1->_trailing_zeros(),"\n";
121           print "# Has trailing zeros after '$try'\n" 
122            if !ok ($ans1->{_m}->_trailing_zeros(), 0);
123           }
124         } 
125       } # end pattern or string
126     }
127   } # end while
128
129 # check whether new() for BigInts destroys them ($y == 12 in this case)
130 $x = Math::BigInt->new(1200); $y = Math::BigFloat->new($x);
131 ok ($y,1200); ok ($x,1200);
132
133 # all done
134
135 ###############################################################################
136 # Perl 5.005 does not like ok ($x,undef)
137
138 sub ok_undef
139   {
140   my $x = shift;
141
142   ok (1,1) and return if !defined $x;
143   ok ($x,'undef');
144   }
145    
146 __END__
147 &as_number
148 0:0
149 1:1
150 1.2:1
151 2.345:2
152 -2:-2
153 -123.456:-123
154 -200:-200
155 &binf
156 1:+:+inf
157 2:-:-inf
158 3:abc:+inf
159 &bsstr
160 +inf:+inf
161 -inf:-inf
162 abc:NaN
163 &fnorm
164 +inf:+inf
165 -inf:-inf
166 +infinity:NaN
167 +-inf:NaN
168 abc:NaN
169    1 a:NaN
170 1bcd2:NaN
171 11111b:NaN
172 +1z:NaN
173 -1z:NaN
174 0:0
175 +0:0
176 +00:0
177 +0_0_0:0
178 000000_0000000_00000:0
179 -0:0
180 -0000:0
181 +1:1
182 +01:1
183 +001:1
184 +00000100000:100000
185 123456789:123456789
186 -1:-1
187 -01:-1
188 -001:-1
189 -123456789:-123456789
190 -00000100000:-100000
191 123.456a:NaN
192 123.456:123.456
193 0.01:0.01
194 .002:0.002
195 +.2:0.2
196 -0.0003:-0.0003
197 -.0000000004:-0.0000000004
198 123456E2:12345600
199 123456E-2:1234.56
200 -123456E2:-12345600
201 -123456E-2:-1234.56
202 1e1:10
203 2e-11:0.00000000002
204 -3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
205 -4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
206 &fpow
207 2:2:4
208 1:2:1
209 1:3:1
210 -1:2:1
211 -1:3:-1
212 123.456:2:15241.383936
213 2:-2:0.25
214 2:-3:0.125
215 128:-2:0.00006103515625
216 abc:123.456:NaN
217 123.456:abc:NaN
218 +inf:123.45:+inf
219 -inf:123.45:-inf
220 +inf:-123.45:+inf
221 -inf:-123.45:-inf
222 &fneg
223 abc:NaN
224 +0:0
225 +1:-1
226 -1:1
227 +123456789:-123456789
228 -123456789:123456789
229 +123.456789:-123.456789
230 -123456.789:123456.789
231 &fabs
232 abc:NaN
233 +0:0
234 +1:1
235 -1:1
236 +123456789:123456789
237 -123456789:123456789
238 +123.456789:123.456789
239 -123456.789:123456.789
240 &fround
241 $rnd_mode = "trunc"
242 +10123456789:5:10123000000
243 -10123456789:5:-10123000000
244 +10123456789.123:5:10123000000
245 -10123456789.123:5:-10123000000
246 +10123456789:9:10123456700
247 -10123456789:9:-10123456700
248 +101234500:6:101234000
249 -101234500:6:-101234000
250 $rnd_mode = "zero"
251 +20123456789:5:20123000000
252 -20123456789:5:-20123000000
253 +20123456789.123:5:20123000000
254 -20123456789.123:5:-20123000000
255 +20123456789:9:20123456800
256 -20123456789:9:-20123456800
257 +201234500:6:201234000
258 -201234500:6:-201234000
259 $rnd_mode = "+inf"
260 +30123456789:5:30123000000
261 -30123456789:5:-30123000000
262 +30123456789.123:5:30123000000
263 -30123456789.123:5:-30123000000
264 +30123456789:9:30123456800
265 -30123456789:9:-30123456800
266 +301234500:6:301235000
267 -301234500:6:-301234000
268 $rnd_mode = "-inf"
269 +40123456789:5:40123000000
270 -40123456789:5:-40123000000
271 +40123456789.123:5:40123000000
272 -40123456789.123:5:-40123000000
273 +40123456789:9:40123456800
274 -40123456789:9:-40123456800
275 +401234500:6:401234000
276 -401234500:6:-401235000
277 $rnd_mode = "odd"
278 +50123456789:5:50123000000
279 -50123456789:5:-50123000000
280 +50123456789.123:5:50123000000
281 -50123456789.123:5:-50123000000
282 +50123456789:9:50123456800
283 -50123456789:9:-50123456800
284 +501234500:6:501235000
285 -501234500:6:-501235000
286 $rnd_mode = "even"
287 +60123456789:5:60123000000
288 -60123456789:5:-60123000000
289 +60123456789:9:60123456800
290 -60123456789:9:-60123456800
291 +601234500:6:601234000
292 -601234500:6:-601234000
293 +60123456789.0123:5:60123000000
294 -60123456789.0123:5:-60123000000
295 &ffround
296 $rnd_mode = "trunc"
297 +1.23:-1:1.2
298 +1.234:-1:1.2
299 +1.2345:-1:1.2
300 +1.23:-2:1.23
301 +1.234:-2:1.23
302 +1.2345:-2:1.23
303 +1.23:-3:1.23
304 +1.234:-3:1.234
305 +1.2345:-3:1.234
306 -1.23:-1:-1.2
307 +1.27:-1:1.2
308 -1.27:-1:-1.2
309 +1.25:-1:1.2
310 -1.25:-1:-1.2
311 +1.35:-1:1.3
312 -1.35:-1:-1.3
313 -0.0061234567890:-1:0
314 -0.0061:-1:0
315 -0.00612:-1:0
316 -0.00612:-2:0
317 -0.006:-1:0
318 -0.006:-2:0
319 -0.0006:-2:0
320 -0.0006:-3:0
321 -0.0065:-3:/-0\.006|-6e-03
322 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
323 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
324 0.05:0:0
325 0.5:0:0
326 0.51:0:0
327 0.41:0:0
328 $rnd_mode = "zero"
329 +2.23:-1:/2.2(?:0{5}\d+)?
330 -2.23:-1:/-2.2(?:0{5}\d+)?
331 +2.27:-1:/2.(?:3|29{5}\d+)
332 -2.27:-1:/-2.(?:3|29{5}\d+)
333 +2.25:-1:/2.2(?:0{5}\d+)?
334 -2.25:-1:/-2.2(?:0{5}\d+)?
335 +2.35:-1:/2.(?:3|29{5}\d+)
336 -2.35:-1:/-2.(?:3|29{5}\d+)
337 -0.0065:-1:0
338 -0.0065:-2:/-0\.01|-1e-02
339 -0.0065:-3:/-0\.006|-6e-03
340 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
341 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
342 0.05:0:0
343 0.5:0:0
344 0.51:0:1
345 0.41:0:0
346 $rnd_mode = "+inf"
347 +3.23:-1:/3.2(?:0{5}\d+)?
348 -3.23:-1:/-3.2(?:0{5}\d+)?
349 +3.27:-1:/3.(?:3|29{5}\d+)
350 -3.27:-1:/-3.(?:3|29{5}\d+)
351 +3.25:-1:/3.(?:3|29{5}\d+)
352 -3.25:-1:/-3.2(?:0{5}\d+)?
353 +3.35:-1:/3.(?:4|39{5}\d+)
354 -3.35:-1:/-3.(?:3|29{5}\d+)
355 -0.0065:-1:0
356 -0.0065:-2:/-0\.01|-1e-02
357 -0.0065:-3:/-0\.006|-6e-03
358 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
359 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
360 0.05:0:0
361 0.5:0:1
362 0.51:0:1
363 0.41:0:0
364 $rnd_mode = "-inf"
365 +4.23:-1:/4.2(?:0{5}\d+)?
366 -4.23:-1:/-4.2(?:0{5}\d+)?
367 +4.27:-1:/4.(?:3|29{5}\d+)
368 -4.27:-1:/-4.(?:3|29{5}\d+)
369 +4.25:-1:/4.2(?:0{5}\d+)?
370 -4.25:-1:/-4.(?:3|29{5}\d+)
371 +4.35:-1:/4.(?:3|29{5}\d+)
372 -4.35:-1:/-4.(?:4|39{5}\d+)
373 -0.0065:-1:0
374 -0.0065:-2:/-0\.01|-1e-02
375 -0.0065:-3:/-0\.007|-7e-03
376 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
377 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
378 0.05:0:0
379 0.5:0:0
380 0.51:0:1
381 0.41:0:0
382 $rnd_mode = "odd"
383 +5.23:-1:/5.2(?:0{5}\d+)?
384 -5.23:-1:/-5.2(?:0{5}\d+)?
385 +5.27:-1:/5.(?:3|29{5}\d+)
386 -5.27:-1:/-5.(?:3|29{5}\d+)
387 +5.25:-1:/5.(?:3|29{5}\d+)
388 -5.25:-1:/-5.(?:3|29{5}\d+)
389 +5.35:-1:/5.(?:3|29{5}\d+)
390 -5.35:-1:/-5.(?:3|29{5}\d+)
391 -0.0065:-1:0
392 -0.0065:-2:/-0\.01|-1e-02
393 -0.0065:-3:/-0\.007|-7e-03
394 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
395 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
396 0.05:0:0
397 0.5:0:1
398 0.51:0:1
399 0.41:0:0
400 $rnd_mode = "even"
401 +6.23:-1:/6.2(?:0{5}\d+)?
402 -6.23:-1:/-6.2(?:0{5}\d+)?
403 +6.27:-1:/6.(?:3|29{5}\d+)
404 -6.27:-1:/-6.(?:3|29{5}\d+)
405 +6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
406 -6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
407 +6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
408 -6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
409 -0.0065:-1:0
410 -0.0065:-2:/-0\.01|-1e-02
411 -0.0065:-3:/-0\.006|-7e-03
412 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
413 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
414 0.05:0:0
415 0.5:0:0
416 0.51:0:1
417 0.41:0:0
418 0.01234567:-3:0.012
419 0.01234567:-4:0.0123
420 0.01234567:-5:0.01235
421 0.01234567:-6:0.012346
422 0.01234567:-7:0.0123457
423 0.01234567:-8:0.01234567
424 0.01234567:-9:0.01234567
425 0.01234567:-12:0.01234567
426 &fcmp
427 abc:abc:
428 abc:+0:
429 +0:abc:
430 +0:+0:0
431 -1:+0:-1
432 +0:-1:1
433 +1:+0:1
434 +0:+1:-1
435 -1:+1:-1
436 +1:-1:1
437 -1:-1:0
438 +1:+1:0
439 -1.1:0:-1
440 +0:-1.1:1
441 +1.1:+0:1
442 +0:+1.1:-1
443 +123:+123:0
444 +123:+12:1
445 +12:+123:-1
446 -123:-123:0
447 -123:-12:-1
448 -12:-123:1
449 +123:+124:-1
450 +124:+123:1
451 -123:-124:1
452 -124:-123:-1
453 0:0.01:-1
454 0:0.0001:-1
455 0:-0.0001:1
456 0:-0.1:1
457 0.1:0:1
458 0.00001:0:1
459 -0.0001:0:-1
460 -0.1:0:-1
461 0:0.0001234:-1
462 0:-0.0001234:1
463 0.0001234:0:1
464 -0.0001234:0:-1
465 0.0001:0.0005:-1
466 0.0005:0.0001:1
467 0.005:0.0001:1
468 0.001:0.0005:1
469 0.000001:0.0005:-2      # <0, but can't test this
470 0.00000123:0.0005:-2    # <0, but can't test this
471 0.00512:0.0001:1
472 0.005:0.000112:1
473 0.00123:0.0005:1
474 # infinity
475 -inf:5432112345:-1
476 +inf:5432112345:1
477 -inf:-5432112345:-1
478 +inf:-5432112345:1
479 -inf:54321.12345:-1
480 +inf:54321.12345:1
481 -inf:-54321.12345:-1
482 +inf:-54321.12345:1
483 +inf:+inf:0
484 -inf:-inf:0
485 # return undef
486 +inf:NaN:
487 NaN:+inf:
488 -inf:NaN:
489 NaN:-inf:
490 &fadd
491 abc:abc:NaN
492 abc:+0:NaN
493 +0:abc:NaN
494 +0:+0:0
495 +1:+0:1
496 +0:+1:1
497 +1:+1:2
498 -1:+0:-1
499 +0:-1:-1
500 -1:-1:-2
501 -1:+1:0
502 +1:-1:0
503 +9:+1:10
504 +99:+1:100
505 +999:+1:1000
506 +9999:+1:10000
507 +99999:+1:100000
508 +999999:+1:1000000
509 +9999999:+1:10000000
510 +99999999:+1:100000000
511 +999999999:+1:1000000000
512 +9999999999:+1:10000000000
513 +99999999999:+1:100000000000
514 +10:-1:9
515 +100:-1:99
516 +1000:-1:999
517 +10000:-1:9999
518 +100000:-1:99999
519 +1000000:-1:999999
520 +10000000:-1:9999999
521 +100000000:-1:99999999
522 +1000000000:-1:999999999
523 +10000000000:-1:9999999999
524 +123456789:+987654321:1111111110
525 -123456789:+987654321:864197532
526 -123456789:-987654321:-1111111110
527 +123456789:-987654321:-864197532
528 0.001234:0.0001234:0.0013574
529 &fsub
530 abc:abc:NaN
531 abc:+0:NaN
532 +0:abc:NaN
533 +0:+0:0
534 +1:+0:1
535 +0:+1:-1
536 +1:+1:0
537 -1:+0:-1
538 +0:-1:1
539 -1:-1:0
540 -1:+1:-2
541 +1:-1:2
542 +9:+1:8
543 +99:+1:98
544 +999:+1:998
545 +9999:+1:9998
546 +99999:+1:99998
547 +999999:+1:999998
548 +9999999:+1:9999998
549 +99999999:+1:99999998
550 +999999999:+1:999999998
551 +9999999999:+1:9999999998
552 +99999999999:+1:99999999998
553 +10:-1:11
554 +100:-1:101
555 +1000:-1:1001
556 +10000:-1:10001
557 +100000:-1:100001
558 +1000000:-1:1000001
559 +10000000:-1:10000001
560 +100000000:-1:100000001
561 +1000000000:-1:1000000001
562 +10000000000:-1:10000000001
563 +123456789:+987654321:-864197532
564 -123456789:+987654321:-1111111110
565 -123456789:-987654321:864197532
566 +123456789:-987654321:1111111110
567 &fmul
568 abc:abc:NaN
569 abc:+0:NaN
570 +0:abc:NaN
571 +0:+0:0
572 +0:+1:0
573 +1:+0:0
574 +0:-1:0
575 -1:+0:0
576 +123456789123456789:+0:0
577 +0:+123456789123456789:0
578 -1:-1:1
579 -1:+1:-1
580 +1:-1:-1
581 +1:+1:1
582 +2:+3:6
583 -2:+3:-6
584 +2:-3:-6
585 -2:-3:6
586 +111:+111:12321
587 +10101:+10101:102030201
588 +1001001:+1001001:1002003002001
589 +100010001:+100010001:10002000300020001
590 +10000100001:+10000100001:100002000030000200001
591 +11111111111:+9:99999999999
592 +22222222222:+9:199999999998
593 +33333333333:+9:299999999997
594 +44444444444:+9:399999999996
595 +55555555555:+9:499999999995
596 +66666666666:+9:599999999994
597 +77777777777:+9:699999999993
598 +88888888888:+9:799999999992
599 +99999999999:+9:899999999991
600 6:120:720
601 10:10000:100000
602 &fdiv
603 $div_scale = 40; $Math::BigFloat::rnd_mode = 'even'
604 abc:abc:NaN
605 abc:+1:abc:NaN
606 +1:abc:NaN
607 +0:+0:NaN
608 +0:+1:0
609 +1:+0:NaN
610 +0:-1:0
611 -1:+0:NaN
612 +1:+1:1
613 -1:-1:1
614 +1:-1:-1
615 -1:+1:-1
616 +1:+2:0.5
617 +2:+1:2
618 +10:+5:2
619 +100:+4:25
620 +1000:+8:125
621 +10000:+16:625
622 +10000:-16:-625
623 +999999999999:+9:111111111111
624 +999999999999:+99:10101010101
625 +999999999999:+999:1001001001
626 +999999999999:+9999:100010001
627 +999999999999999:+99999:10000100001
628 +1000000000:+9:111111111.1111111111111111111111111111111
629 +2000000000:+9:222222222.2222222222222222222222222222222
630 +3000000000:+9:333333333.3333333333333333333333333333333
631 +4000000000:+9:444444444.4444444444444444444444444444444
632 +5000000000:+9:555555555.5555555555555555555555555555556
633 +6000000000:+9:666666666.6666666666666666666666666666667
634 +7000000000:+9:777777777.7777777777777777777777777777778
635 +8000000000:+9:888888888.8888888888888888888888888888889
636 +9000000000:+9:1000000000
637 +35500000:+113:314159.2920353982300884955752212389380531
638 +71000000:+226:314159.2920353982300884955752212389380531
639 +106500000:+339:314159.2920353982300884955752212389380531
640 +1000000000:+3:333333333.3333333333333333333333333333333
641 2:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
642 $div_scale = 20
643 +1000000000:+9:111111111.11111111111
644 +2000000000:+9:222222222.22222222222
645 +3000000000:+9:333333333.33333333333
646 +4000000000:+9:444444444.44444444444
647 +5000000000:+9:555555555.55555555556
648 +6000000000:+9:666666666.66666666667
649 +7000000000:+9:777777777.77777777778
650 +8000000000:+9:888888888.88888888889
651 +9000000000:+9:1000000000
652 1:10:0.1
653 1:100:0.01
654 1:1000:0.001
655 1:10000:0.0001
656 1:504:0.001984126984126984127
657 2:1.987654321:1.0062111801179738436
658 # the next two cases are the "old" behaviour, but are now (>v0.01) different
659 #+35500000:+113:314159.292035398230088
660 #+71000000:+226:314159.292035398230088
661 +35500000:+113:314159.29203539823009
662 +71000000:+226:314159.29203539823009
663 +106500000:+339:314159.29203539823009
664 +1000000000:+3:333333333.33333333333
665 $div_scale = 1
666 # round to accuracy 1 after bdiv
667 +124:+3:40
668 # reset scale for further tests
669 $div_scale = 40
670 &fmod
671 +0:0:NaN
672 +0:1:0
673 +3:1:0
674 #+5:2:1
675 #+9:4:1
676 #+9:5:4
677 #+9000:56:40
678 #+56:9000:56
679 &fsqrt
680 +0:0
681 -1:NaN
682 -2:NaN
683 -16:NaN
684 -123.45:NaN
685 nanfsqrt:NaN
686 +inf:+inf
687 -inf:NaN
688 +1:1
689 +2:1.41421356237309504880168872420969807857
690 +4:2
691 +16:4
692 +100:10
693 +123.456:11.11107555549866648462149404118219234119
694 +15241.38393:123.4559999756998444766131352122991626468
695 +1.44:1.2
696 &is_odd
697 abc:0
698 0:0
699 -1:1
700 -3:1
701 1:1
702 3:1
703 1000001:1
704 1000002:0
705 +inf:0
706 -inf:0
707 123.45:0
708 -123.45:0
709 2:0
710 &is_even
711 abc:0
712 0:1
713 -1:0
714 -3:0
715 1:0
716 3:0
717 1000001:0
718 1000002:1
719 2:1
720 +inf:0
721 -inf:0
722 123.456:0
723 -123.456:0
724 &is_zero
725 NaNzero:0
726 0:1
727 -1:0
728 1:0
729 &is_one
730 0:0
731 2:0
732 1:1
733 -1:0
734 -2:0
735 &bfloor
736 0:0
737 abc:NaN
738 +inf:+inf
739 -inf:-inf
740 1:1
741 -51:-51
742 -51.2:-52
743 12.2:12
744 &bceil
745 0:0
746 abc:NaN
747 +inf:+inf
748 -inf:-inf
749 1:1
750 -51:-51
751 -51.2:-51
752 12.2:13