Upgrade to Math::BigInt 1.47.
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigfltpm.inc
1 #include this file into another test for subclass testing...
2 while (<DATA>)
3   {
4   chop;
5   $_ =~ s/#.*$//;       # remove comments
6   $_ =~ s/\s+$//;       # trailing spaces
7   next if /^$/;         # skip empty lines & comments
8   if (s/^&//)
9     {
10     $f = $_;
11     }
12   elsif (/^\$/)
13     {
14     $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
15     #print "\$setup== $setup\n";
16     }
17   else
18     {
19     if (m|^(.*?):(/.+)$|)
20       {
21       $ans = $2;
22       @args = split(/:/,$1,99);
23       }
24     else
25       {
26       @args = split(/:/,$_,99); $ans = pop(@args);
27       }
28     $try = "\$x = new $class \"$args[0]\";";
29     if ($f eq "fnorm")
30       {
31         $try .= "\$x;";
32       } elsif ($f eq "finf") {
33         $try .= "\$x->finf('$args[1]');";
34       } elsif ($f eq "is_inf") {
35         $try .= "\$x->is_inf('$args[1]');"; 
36       } elsif ($f eq "fone") {
37         $try .= "\$x->bone('$args[1]');";
38       } elsif ($f eq "fstr") {
39         $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
40         $try .= '$x->fstr();';
41       } elsif ($f eq "parts") {
42         # ->bstr() to see if an object is returned
43         $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
44         $try .= '"$a $b";';
45       } elsif ($f eq "exponent") {
46         # ->bstr() to see if an object is returned
47         $try .= '$x->exponent()->bstr();';
48       } elsif ($f eq "mantissa") {
49         # ->bstr() to see if an object is returned
50         $try .= '$x->mantissa()->bstr();';
51       } elsif ($f eq "numify") {
52         $try .= "\$x->numify();";
53       } elsif ($f eq "length") {
54         $try .= "\$x->length();";
55       # some unary ops (test the bxxx form, since that is done by AUTOLOAD)
56       } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
57         $try .= "\$x->b$1();";
58       # some is_xxx test function       
59       } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan)$/) {
60         $try .= "\$x->$f();";
61       } elsif ($f eq "as_number") {
62         $try .= '$x->as_number();';
63       } elsif ($f eq "finc") {
64         $try .= '++$x;';
65       } elsif ($f eq "fdec") {
66         $try .= '--$x;';
67       }elsif ($f eq "fround") {
68         $try .= "$setup; \$x->fround($args[1]);";
69       } elsif ($f eq "ffround") {
70         $try .= "$setup; \$x->ffround($args[1]);";
71       } elsif ($f eq "fsqrt") {
72         $try .= "$setup; \$x->fsqrt();";
73       }
74     else
75       {
76       $try .= "\$y = new $class \"$args[1]\";";
77       if ($f eq "fcmp") {
78         $try .= '$x <=> $y;';
79       } elsif ($f eq "facmp") {
80         $try .= '$x->facmp($y);';
81       } elsif ($f eq "fpow") {
82         $try .= '$x ** $y;';
83       } elsif ($f eq "fadd") {
84         $try .= '$x + $y;';
85       } elsif ($f eq "fsub") {
86         $try .= '$x - $y;';
87       } elsif ($f eq "fmul") {
88         $try .= '$x * $y;';
89       } elsif ($f eq "fdiv") {
90         $try .= "$setup; \$x / \$y;";
91       } elsif ($f eq "fmod") {
92         $try .= '$x % $y;';
93       } else { warn "Unknown op '$f'"; }
94     }
95     # print "# Trying: '$try'\n";
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 "$class")
119           {
120           # float numbers are normalized (for now), so mantissa shouldn't have
121           # trailing zeros
122           #print $ans1->_trailing_zeros(),"\n";
123           print "# Has trailing zeros after '$try'\n"
124            if !ok ($ans1->{_m}->_trailing_zeros(), 0);
125           }
126         }
127       } # end pattern or string
128     }
129   } # end while
130
131 # check whether new() for BigInts destroys them ($y == 12 in this case)
132 $x = Math::BigInt->new(1200); $y = $class->new($x);
133 ok ($y,1200); ok ($x,1200);
134
135 ###############################################################################
136 # fdiv() in list context
137 $x = $class->bzero(); ($x,$y) = $x->fdiv(0);
138 ok ($x,'NaN'); ok ($y,'NaN');
139
140 # fdiv() in list context
141 $x = $class->bzero(); ($x,$y) = $x->fdiv(1);
142 ok ($x,0); ok ($y,0);
143
144 # all done
145
146 ###############################################################################
147 # Perl 5.005 does not like ok ($x,undef)
148
149 sub ok_undef
150   {
151   my $x = shift;
152
153   ok (1,1) and return if !defined $x;
154   ok ($x,'undef');
155   }
156
157 __DATA__
158 &fnorm
159 1:1
160 -0:0
161 fnormNaN:NaN
162 +inf:inf
163 -inf:-inf
164 123:123
165 -123.4567:-123.4567
166 # invalid inputs
167 1__2:NaN
168 1E1__2:NaN
169 11__2E2:NaN
170 #1.E3:NaN
171 .2E-3.:NaN
172 #1e3e4:NaN
173 .2E2:20
174 &as_number
175 0:0
176 1:1
177 1.2:1
178 2.345:2
179 -2:-2
180 -123.456:-123
181 -200:-200
182 &finf
183 1:+:inf
184 2:-:-inf
185 3:abc:inf
186 &numify
187 0:0e+1
188 +1:1e+0
189 1234:1234e+0
190 NaN:NaN
191 +inf:inf
192 -inf:-inf
193 &fnan
194 abc:NaN
195 2:NaN
196 -2:NaN
197 0:NaN
198 &fone
199 2:+:1
200 -2:-:-1
201 -2:+:1
202 2:-:-1
203 0::1
204 -2::1
205 abc::1
206 2:abc:1
207 &fsstr
208 +inf:inf
209 -inf:-inf
210 abcfsstr:NaN
211 1234.567:1234567e-3
212 &fstr
213 +inf:::inf
214 -inf:::-inf
215 abcfstr:::NaN
216 1234.567:9::1234.56700
217 1234.567::-6:1234.567000
218 12345:5::12345
219 0.001234:6::0.00123400
220 0.001234::-8:0.00123400
221 0:4::0
222 0::-4:0.0000
223 &fnorm
224 inf:inf
225 +inf:inf
226 -inf:-inf
227 +infinity:NaN
228 +-inf:NaN
229 abc:NaN
230    1 a:NaN
231 1bcd2:NaN
232 11111b:NaN
233 +1z:NaN
234 -1z:NaN
235 0:0
236 +0:0
237 +00:0
238 +0_0_0:0
239 000000_0000000_00000:0
240 -0:0
241 -0000:0
242 +1:1
243 +01:1
244 +001:1
245 +00000100000:100000
246 123456789:123456789
247 -1:-1
248 -01:-1
249 -001:-1
250 -123456789:-123456789
251 -00000100000:-100000
252 123.456a:NaN
253 123.456:123.456
254 0.01:0.01
255 .002:0.002
256 +.2:0.2
257 -0.0003:-0.0003
258 -.0000000004:-0.0000000004
259 123456E2:12345600
260 123456E-2:1234.56
261 -123456E2:-12345600
262 -123456E-2:-1234.56
263 1e1:10
264 2e-11:0.00000000002
265 # excercise _split
266   .02e-1:0.002
267    000001:1
268    -00001:-1
269    -1:-1
270   000.01:0.01
271    -000.0023:-0.0023
272   1.1e1:11
273 -3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
274 -4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
275 &fpow
276 2:2:4
277 1:2:1
278 1:3:1
279 -1:2:1
280 -1:3:-1
281 123.456:2:15241.383936
282 2:-2:0.25
283 2:-3:0.125
284 128:-2:0.00006103515625
285 abc:123.456:NaN
286 123.456:abc:NaN
287 +inf:123.45:inf
288 -inf:123.45:-inf
289 +inf:-123.45:inf
290 -inf:-123.45:-inf
291 &fneg
292 fnegNaN:NaN
293 +inf:-inf
294 -inf:inf
295 +0:0
296 +1:-1
297 -1:1
298 +123456789:-123456789
299 -123456789:123456789
300 +123.456789:-123.456789
301 -123456.789:123456.789
302 &fabs
303 fabsNaN:NaN
304 +inf:inf
305 -inf:inf
306 +0:0
307 +1:1
308 -1:1
309 +123456789:123456789
310 -123456789:123456789
311 +123.456789:123.456789
312 -123456.789:123456.789
313 &fround
314 $round_mode = "trunc"
315 +inf:5:inf
316 -inf:5:-inf
317 0:5:0
318 NaNfround:5:NaN
319 +10123456789:5:10123000000
320 -10123456789:5:-10123000000
321 +10123456789.123:5:10123000000
322 -10123456789.123:5:-10123000000
323 +10123456789:9:10123456700
324 -10123456789:9:-10123456700
325 +101234500:6:101234000
326 -101234500:6:-101234000
327 $round_mode = "zero"
328 +20123456789:5:20123000000
329 -20123456789:5:-20123000000
330 +20123456789.123:5:20123000000
331 -20123456789.123:5:-20123000000
332 +20123456789:9:20123456800
333 -20123456789:9:-20123456800
334 +201234500:6:201234000
335 -201234500:6:-201234000
336 $round_mode = "+inf"
337 +30123456789:5:30123000000
338 -30123456789:5:-30123000000
339 +30123456789.123:5:30123000000
340 -30123456789.123:5:-30123000000
341 +30123456789:9:30123456800
342 -30123456789:9:-30123456800
343 +301234500:6:301235000
344 -301234500:6:-301234000
345 $round_mode = "-inf"
346 +40123456789:5:40123000000
347 -40123456789:5:-40123000000
348 +40123456789.123:5:40123000000
349 -40123456789.123:5:-40123000000
350 +40123456789:9:40123456800
351 -40123456789:9:-40123456800
352 +401234500:6:401234000
353 -401234500:6:-401235000
354 $round_mode = "odd"
355 +50123456789:5:50123000000
356 -50123456789:5:-50123000000
357 +50123456789.123:5:50123000000
358 -50123456789.123:5:-50123000000
359 +50123456789:9:50123456800
360 -50123456789:9:-50123456800
361 +501234500:6:501235000
362 -501234500:6:-501235000
363 $round_mode = "even"
364 +60123456789:5:60123000000
365 -60123456789:5:-60123000000
366 +60123456789:9:60123456800
367 -60123456789:9:-60123456800
368 +601234500:6:601234000
369 -601234500:6:-601234000
370 +60123456789.0123:5:60123000000
371 -60123456789.0123:5:-60123000000
372 &ffround
373 $round_mode = "trunc"
374 +inf:5:inf
375 -inf:5:-inf
376 0:5:0
377 NaNffround:5:NaN
378 +1.23:-1:1.2
379 +1.234:-1:1.2
380 +1.2345:-1:1.2
381 +1.23:-2:1.23
382 +1.234:-2:1.23
383 +1.2345:-2:1.23
384 +1.23:-3:1.230
385 +1.234:-3:1.234
386 +1.2345:-3:1.234
387 -1.23:-1:-1.2
388 +1.27:-1:1.2
389 -1.27:-1:-1.2
390 +1.25:-1:1.2
391 -1.25:-1:-1.2
392 +1.35:-1:1.3
393 -1.35:-1:-1.3
394 -0.0061234567890:-1:0.0
395 -0.0061:-1:0.0
396 -0.00612:-1:0.0
397 -0.00612:-2:0.00
398 -0.006:-1:0.0
399 -0.006:-2:0.00
400 -0.0006:-2:0.00
401 -0.0006:-3:0.000
402 -0.0065:-3:/-0\.006|-6e-03
403 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
404 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
405 0.05:0:0
406 0.5:0:0
407 0.51:0:0
408 0.41:0:0
409 $round_mode = "zero"
410 +2.23:-1:/2.2(?:0{5}\d+)?
411 -2.23:-1:/-2.2(?:0{5}\d+)?
412 +2.27:-1:/2.(?:3|29{5}\d+)
413 -2.27:-1:/-2.(?:3|29{5}\d+)
414 +2.25:-1:/2.2(?:0{5}\d+)?
415 -2.25:-1:/-2.2(?:0{5}\d+)?
416 +2.35:-1:/2.(?:3|29{5}\d+)
417 -2.35:-1:/-2.(?:3|29{5}\d+)
418 -0.0065:-1:0.0
419 -0.0065:-2:/-0\.01|-1e-02
420 -0.0065:-3:/-0\.006|-6e-03
421 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
422 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
423 0.05:0:0
424 0.5:0:0
425 0.51:0:1
426 0.41:0:0
427 $round_mode = "+inf"
428 +3.23:-1:/3.2(?:0{5}\d+)?
429 -3.23:-1:/-3.2(?:0{5}\d+)?
430 +3.27:-1:/3.(?:3|29{5}\d+)
431 -3.27:-1:/-3.(?:3|29{5}\d+)
432 +3.25:-1:/3.(?:3|29{5}\d+)
433 -3.25:-1:/-3.2(?:0{5}\d+)?
434 +3.35:-1:/3.(?:4|39{5}\d+)
435 -3.35:-1:/-3.(?:3|29{5}\d+)
436 -0.0065:-1:0.0
437 -0.0065:-2:/-0\.01|-1e-02
438 -0.0065:-3:/-0\.006|-6e-03
439 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
440 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
441 0.05:0:0
442 0.5:0:1
443 0.51:0:1
444 0.41:0:0
445 $round_mode = "-inf"
446 +4.23:-1:/4.2(?:0{5}\d+)?
447 -4.23:-1:/-4.2(?:0{5}\d+)?
448 +4.27:-1:/4.(?:3|29{5}\d+)
449 -4.27:-1:/-4.(?:3|29{5}\d+)
450 +4.25:-1:/4.2(?:0{5}\d+)?
451 -4.25:-1:/-4.(?:3|29{5}\d+)
452 +4.35:-1:/4.(?:3|29{5}\d+)
453 -4.35:-1:/-4.(?:4|39{5}\d+)
454 -0.0065:-1:0.0
455 -0.0065:-2:/-0\.01|-1e-02
456 -0.0065:-3:/-0\.007|-7e-03
457 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
458 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
459 0.05:0:0
460 0.5:0:0
461 0.51:0:1
462 0.41:0:0
463 $round_mode = "odd"
464 +5.23:-1:/5.2(?:0{5}\d+)?
465 -5.23:-1:/-5.2(?:0{5}\d+)?
466 +5.27:-1:/5.(?:3|29{5}\d+)
467 -5.27:-1:/-5.(?:3|29{5}\d+)
468 +5.25:-1:/5.(?:3|29{5}\d+)
469 -5.25:-1:/-5.(?:3|29{5}\d+)
470 +5.35:-1:/5.(?:3|29{5}\d+)
471 -5.35:-1:/-5.(?:3|29{5}\d+)
472 -0.0065:-1:0.0
473 -0.0065:-2:/-0\.01|-1e-02
474 -0.0065:-3:/-0\.007|-7e-03
475 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
476 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
477 0.05:0:0
478 0.5:0:1
479 0.51:0:1
480 0.41:0:0
481 $round_mode = "even"
482 +6.23:-1:/6.2(?:0{5}\d+)?
483 -6.23:-1:/-6.2(?:0{5}\d+)?
484 +6.27:-1:/6.(?:3|29{5}\d+)
485 -6.27:-1:/-6.(?:3|29{5}\d+)
486 +6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
487 -6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
488 +6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
489 -6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
490 -0.0065:-1:0.0
491 -0.0065:-2:/-0\.01|-1e-02
492 -0.0065:-3:/-0\.006|-7e-03
493 -0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
494 -0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
495 0.05:0:0
496 0.5:0:0
497 0.51:0:1
498 0.41:0:0
499 0.01234567:-3:0.012
500 0.01234567:-4:0.0123
501 0.01234567:-5:0.01235
502 0.01234567:-6:0.012346
503 0.01234567:-7:0.0123457
504 0.01234567:-8:0.01234567
505 0.01234567:-9:0.012345670
506 0.01234567:-12:0.012345670000
507 &fcmp
508 fcmpNaN:fcmpNaN:
509 fcmpNaN:+0:
510 +0:fcmpNaN:
511 +0:+0:0
512 -1:+0:-1
513 +0:-1:1
514 +1:+0:1
515 +0:+1:-1
516 -1:+1:-1
517 +1:-1:1
518 -1:-1:0
519 +1:+1:0
520 -1.1:0:-1
521 +0:-1.1:1
522 +1.1:+0:1
523 +0:+1.1:-1
524 +123:+123:0
525 +123:+12:1
526 +12:+123:-1
527 -123:-123:0
528 -123:-12:-1
529 -12:-123:1
530 +123:+124:-1
531 +124:+123:1
532 -123:-124:1
533 -124:-123:-1
534 0:0.01:-1
535 0:0.0001:-1
536 0:-0.0001:1
537 0:-0.1:1
538 0.1:0:1
539 0.00001:0:1
540 -0.0001:0:-1
541 -0.1:0:-1
542 0:0.0001234:-1
543 0:-0.0001234:1
544 0.0001234:0:1
545 -0.0001234:0:-1
546 0.0001:0.0005:-1
547 0.0005:0.0001:1
548 0.005:0.0001:1
549 0.001:0.0005:1
550 0.000001:0.0005:-1
551 0.00000123:0.0005:-1
552 0.00512:0.0001:1
553 0.005:0.000112:1
554 0.00123:0.0005:1
555 1.5:2:-1
556 2:1.5:1
557 1.54321:234:-1
558 234:1.54321:1
559 # infinity
560 -inf:5432112345:-1
561 +inf:5432112345:1
562 -inf:-5432112345:-1
563 +inf:-5432112345:1
564 -inf:54321.12345:-1
565 +inf:54321.12345:1
566 -inf:-54321.12345:-1
567 +inf:-54321.12345:1
568 +inf:+inf:0
569 -inf:-inf:0
570 +inf:-inf:1
571 -inf:+inf:-1
572 # return undef
573 +inf:NaN:
574 NaN:inf:
575 -inf:NaN:
576 NaN:-inf:
577 &facmp
578 fcmpNaN:fcmpNaN:
579 fcmpNaN:+0:
580 +0:fcmpNaN:
581 +0:+0:0
582 -1:+0:1
583 +0:-1:-1
584 +1:+0:1
585 +0:+1:-1
586 -1:+1:0
587 +1:-1:0
588 -1:-1:0
589 +1:+1:0
590 -1.1:0:1
591 +0:-1.1:-1
592 +1.1:+0:1
593 +0:+1.1:-1
594 +123:+123:0
595 +123:+12:1
596 +12:+123:-1
597 -123:-123:0
598 -123:-12:1
599 -12:-123:-1
600 +123:+124:-1
601 +124:+123:1
602 -123:-124:-1
603 -124:-123:1
604 0:0.01:-1
605 0:0.0001:-1
606 0:-0.0001:-1
607 0:-0.1:-1
608 0.1:0:1
609 0.00001:0:1
610 -0.0001:0:1
611 -0.1:0:1
612 0:0.0001234:-1
613 0:-0.0001234:-1
614 0.0001234:0:1
615 -0.0001234:0:1
616 0.0001:0.0005:-1
617 0.0005:0.0001:1
618 0.005:0.0001:1
619 0.001:0.0005:1
620 0.000001:0.0005:-1
621 0.00000123:0.0005:-1
622 0.00512:0.0001:1
623 0.005:0.000112:1
624 0.00123:0.0005:1
625 1.5:2:-1
626 2:1.5:1
627 1.54321:234:-1
628 234:1.54321:1
629 # infinity
630 -inf:5432112345:1
631 +inf:5432112345:1
632 -inf:-5432112345:1
633 +inf:-5432112345:1
634 -inf:54321.12345:1
635 +inf:54321.12345:1
636 -inf:-54321.12345:1
637 +inf:-54321.12345:1
638 +inf:+inf:0
639 -inf:-inf:0
640 +inf:-inf:0
641 -inf:+inf:0
642 5:inf:-1
643 -1:inf:-1
644 5:-inf:-1
645 -1:-inf:-1
646 # return undef
647 +inf:facmpNaN:
648 facmpNaN:inf:
649 -inf:facmpNaN:
650 facmpNaN:-inf:
651 &fdec
652 fdecNaN:NaN
653 +inf:inf
654 -inf:-inf
655 +0:-1
656 +1:0
657 -1:-2
658 1.23:0.23
659 -1.23:-2.23
660 100:99
661 101:100
662 -100:-101
663 -99:-100
664 -98:-99
665 99:98
666 &finc
667 fincNaN:NaN
668 +inf:inf
669 -inf:-inf
670 +0:1
671 +1:2
672 -1:0
673 1.23:2.23
674 -1.23:-0.23
675 100:101
676 -100:-99
677 -99:-98
678 -101:-100
679 99:100
680 &fadd
681 abc:abc:NaN
682 abc:+0:NaN
683 +0:abc:NaN
684 +inf:-inf:0
685 -inf:+inf:0
686 +inf:+inf:inf
687 -inf:-inf:-inf
688 baddNaN:+inf:NaN
689 baddNaN:+inf:NaN
690 +inf:baddNaN:NaN
691 -inf:baddNaN:NaN
692 +0:+0:0
693 +1:+0:1
694 +0:+1:1
695 +1:+1:2
696 -1:+0:-1
697 +0:-1:-1
698 -1:-1:-2
699 -1:+1:0
700 +1:-1:0
701 +9:+1:10
702 +99:+1:100
703 +999:+1:1000
704 +9999:+1:10000
705 +99999:+1:100000
706 +999999:+1:1000000
707 +9999999:+1:10000000
708 +99999999:+1:100000000
709 +999999999:+1:1000000000
710 +9999999999:+1:10000000000
711 +99999999999:+1:100000000000
712 +10:-1:9
713 +100:-1:99
714 +1000:-1:999
715 +10000:-1:9999
716 +100000:-1:99999
717 +1000000:-1:999999
718 +10000000:-1:9999999
719 +100000000:-1:99999999
720 +1000000000:-1:999999999
721 +10000000000:-1:9999999999
722 +123456789:+987654321:1111111110
723 -123456789:+987654321:864197532
724 -123456789:-987654321:-1111111110
725 +123456789:-987654321:-864197532
726 0.001234:0.0001234:0.0013574
727 &fsub
728 abc:abc:NaN
729 abc:+0:NaN
730 +0:abc:NaN
731 +inf:-inf:inf
732 -inf:+inf:-inf
733 +inf:+inf:0
734 -inf:-inf:0
735 baddNaN:+inf:NaN
736 baddNaN:+inf:NaN
737 +inf:baddNaN:NaN
738 -inf:baddNaN:NaN
739 +0:+0:0
740 +1:+0:1
741 +0:+1:-1
742 +1:+1:0
743 -1:+0:-1
744 +0:-1:1
745 -1:-1:0
746 -1:+1:-2
747 +1:-1:2
748 +9:+1:8
749 +99:+1:98
750 +999:+1:998
751 +9999:+1:9998
752 +99999:+1:99998
753 +999999:+1:999998
754 +9999999:+1:9999998
755 +99999999:+1:99999998
756 +999999999:+1:999999998
757 +9999999999:+1:9999999998
758 +99999999999:+1:99999999998
759 +10:-1:11
760 +100:-1:101
761 +1000:-1:1001
762 +10000:-1:10001
763 +100000:-1:100001
764 +1000000:-1:1000001
765 +10000000:-1:10000001
766 +100000000:-1:100000001
767 +1000000000:-1:1000000001
768 +10000000000:-1:10000000001
769 +123456789:+987654321:-864197532
770 -123456789:+987654321:-1111111110
771 -123456789:-987654321:864197532
772 +123456789:-987654321:1111111110
773 &fmul
774 abc:abc:NaN
775 abc:+0:NaN
776 +0:abc:NaN
777 +inf:NaNmul:NaN
778 +inf:NaNmul:NaN
779 NaNmul:+inf:NaN
780 NaNmul:-inf:NaN
781 +inf:+inf:inf
782 +inf:-inf:-inf
783 +inf:-inf:-inf
784 +inf:+inf:inf
785 +inf:123.34:inf
786 +inf:-123.34:-inf
787 -inf:123.34:-inf
788 -inf:-123.34:inf
789 123.34:+inf:inf
790 -123.34:+inf:-inf
791 123.34:-inf:-inf
792 -123.34:-inf:inf
793 +0:+0:0
794 +0:+1:0
795 +1:+0:0
796 +0:-1:0
797 -1:+0:0
798 +123456789123456789:+0:0
799 +0:+123456789123456789:0
800 -1:-1:1
801 -1:+1:-1
802 +1:-1:-1
803 +1:+1:1
804 +2:+3:6
805 -2:+3:-6
806 +2:-3:-6
807 -2:-3:6
808 +111:+111:12321
809 +10101:+10101:102030201
810 +1001001:+1001001:1002003002001
811 +100010001:+100010001:10002000300020001
812 +10000100001:+10000100001:100002000030000200001
813 +11111111111:+9:99999999999
814 +22222222222:+9:199999999998
815 +33333333333:+9:299999999997
816 +44444444444:+9:399999999996
817 +55555555555:+9:499999999995
818 +66666666666:+9:599999999994
819 +77777777777:+9:699999999993
820 +88888888888:+9:799999999992
821 +99999999999:+9:899999999991
822 6:120:720
823 10:10000:100000
824 &fdiv
825 $div_scale = 40; $round_mode = 'even'
826 abc:abc:NaN
827 abc:+1:abc:NaN
828 +1:abc:NaN
829 -1:abc:NaN
830 0:abc:NaN
831 +0:+0:NaN
832 +0:+1:0
833 +1:+0:inf
834 +3214:+0:inf
835 +0:-1:0
836 -1:+0:-inf
837 -3214:+0:-inf
838 +1:+1:1
839 -1:-1:1
840 +1:-1:-1
841 -1:+1:-1
842 +1:+2:0.5
843 +2:+1:2
844 123:+inf:0
845 123:-inf:0
846 +10:+5:2
847 +100:+4:25
848 +1000:+8:125
849 +10000:+16:625
850 +10000:-16:-625
851 +999999999999:+9:111111111111
852 +999999999999:+99:10101010101
853 +999999999999:+999:1001001001
854 +999999999999:+9999:100010001
855 +999999999999999:+99999:10000100001
856 +1000000000:+9:111111111.1111111111111111111111111111111
857 +2000000000:+9:222222222.2222222222222222222222222222222
858 +3000000000:+9:333333333.3333333333333333333333333333333
859 +4000000000:+9:444444444.4444444444444444444444444444444
860 +5000000000:+9:555555555.5555555555555555555555555555556
861 +6000000000:+9:666666666.6666666666666666666666666666667
862 +7000000000:+9:777777777.7777777777777777777777777777778
863 +8000000000:+9:888888888.8888888888888888888888888888889
864 +9000000000:+9:1000000000
865 +35500000:+113:314159.2920353982300884955752212389380531
866 +71000000:+226:314159.2920353982300884955752212389380531
867 +106500000:+339:314159.2920353982300884955752212389380531
868 +1000000000:+3:333333333.3333333333333333333333333333333
869 2:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
870 $div_scale = 20
871 +1000000000:+9:111111111.11111111111
872 +2000000000:+9:222222222.22222222222
873 +3000000000:+9:333333333.33333333333
874 +4000000000:+9:444444444.44444444444
875 +5000000000:+9:555555555.55555555556
876 +6000000000:+9:666666666.66666666667
877 +7000000000:+9:777777777.77777777778
878 +8000000000:+9:888888888.88888888889
879 +9000000000:+9:1000000000
880 1:10:0.1
881 1:100:0.01
882 1:1000:0.001
883 1:10000:0.0001
884 1:504:0.001984126984126984127
885 2:1.987654321:1.0062111801179738436
886 # the next two cases are the "old" behaviour, but are now (>v0.01) different
887 #+35500000:+113:314159.292035398230088
888 #+71000000:+226:314159.292035398230088
889 +35500000:+113:314159.29203539823009
890 +71000000:+226:314159.29203539823009
891 +106500000:+339:314159.29203539823009
892 +1000000000:+3:333333333.33333333333
893 $div_scale = 1
894 # round to accuracy 1 after bdiv
895 +124:+3:40
896 # reset scale for further tests
897 $div_scale = 40
898 &fmod
899 +0:0:NaN
900 +0:1:0
901 +3:1:0
902 #+5:2:1
903 #+9:4:1
904 #+9:5:4
905 #+9000:56:40
906 #+56:9000:56
907 &fsqrt
908 +0:0
909 -1:NaN
910 -2:NaN
911 -16:NaN
912 -123.45:NaN
913 nanfsqrt:NaN
914 +inf:inf
915 -inf:NaN
916 +1:1
917 +2:1.41421356237309504880168872420969807857
918 +4:2
919 +16:4
920 +100:10
921 +123.456:11.11107555549866648462149404118219234119
922 +15241.38393:123.4559999756998444766131352122991626468
923 +1.44:1.2
924 &is_nan
925 123:0
926 abc:1
927 NaN:1
928 -123:0
929 &is_inf
930 +inf::1
931 -inf::1
932 abc::0
933 1::0
934 NaN::0
935 -1::0
936 +inf:-:0
937 +inf:+:1
938 -inf:-:1
939 -inf:+:0
940 # it must be exactly /^[+-]inf$/
941 +infinity::0
942 -infinity::0
943 &is_odd
944 abc:0
945 0:0
946 -1:1
947 -3:1
948 1:1
949 3:1
950 1000001:1
951 1000002:0
952 +inf:0
953 -inf:0
954 123.45:0
955 -123.45:0
956 2:0
957 &is_even
958 abc:0
959 0:1
960 -1:0
961 -3:0
962 1:0
963 3:0
964 1000001:0
965 1000002:1
966 2:1
967 +inf:0
968 -inf:0
969 123.456:0
970 -123.456:0
971 &is_positive
972 0:1
973 1:1
974 -1:0
975 -123:0
976 NaN:0
977 -inf:0
978 +inf:1
979 &is_negative
980 0:0
981 1:0
982 -1:1
983 -123:1
984 NaN:0
985 -inf:1
986 +inf:0
987 &parts
988 0:0 1
989 1:1 0
990 123:123 0
991 -123:-123 0
992 -1200:-12 2
993 NaNparts:NaN NaN
994 +inf:inf inf
995 -inf:-inf inf
996 &exponent
997 0:1
998 1:0
999 123:0
1000 -123:0
1001 -1200:2
1002 +inf:inf
1003 -inf:inf
1004 NaNexponent:NaN
1005 &mantissa
1006 0:0
1007 1:1
1008 123:123
1009 -123:-123
1010 -1200:-12
1011 +inf:inf
1012 -inf:-inf
1013 NaNmantissa:NaN
1014 &length
1015 123:3
1016 -123:3
1017 0:1
1018 1:1
1019 12345678901234567890:20
1020 &is_zero
1021 NaNzero:0
1022 +inf:0
1023 -inf:0
1024 0:1
1025 -1:0
1026 1:0
1027 &is_one
1028 NaNone:0
1029 +inf:0
1030 -inf:0
1031 0:0
1032 2:0
1033 1:1
1034 -1:0
1035 -2:0
1036 &ffloor
1037 0:0
1038 abc:NaN
1039 +inf:inf
1040 -inf:-inf
1041 1:1
1042 -51:-51
1043 -51.2:-52
1044 12.2:12
1045 &fceil
1046 0:0
1047 abc:NaN
1048 +inf:inf
1049 -inf:-inf
1050 1:1
1051 -51:-51
1052 -51.2:-51
1053 12.2:13