threads 1.63
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigfltpm.inc
CommitLineData
ee15d750 1#include this file into another test for subclass testing...
b3abae2a 2
3ok ($class->config()->{lib},$CL);
4
56d9de68 5use strict;
6
b68b7ab1 7my $z;
8
ee15d750 9while (<DATA>)
10 {
d614cd8b 11 chomp;
ee15d750 12 $_ =~ s/#.*$//; # remove comments
13 $_ =~ s/\s+$//; # trailing spaces
14 next if /^$/; # skip empty lines & comments
15 if (s/^&//)
16 {
17 $f = $_;
18 }
19 elsif (/^\$/)
20 {
21 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
22 #print "\$setup== $setup\n";
23 }
24 else
25 {
26 if (m|^(.*?):(/.+)$|)
27 {
28 $ans = $2;
29 @args = split(/:/,$1,99);
30 }
31 else
32 {
33 @args = split(/:/,$_,99); $ans = pop(@args);
34 }
9b924220 35 $try = "\$x = $class->new(\"$args[0]\");";
ee15d750 36 if ($f eq "fnorm")
37 {
38 $try .= "\$x;";
39 } elsif ($f eq "finf") {
40 $try .= "\$x->finf('$args[1]');";
027dc388 41 } elsif ($f eq "is_inf") {
42 $try .= "\$x->is_inf('$args[1]');";
ee15d750 43 } elsif ($f eq "fone") {
44 $try .= "\$x->bone('$args[1]');";
45 } elsif ($f eq "fstr") {
46 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
47 $try .= '$x->fstr();';
ee15d750 48 } elsif ($f eq "parts") {
48b581a2 49 # ->bstr() to see if an object is returned
ee15d750 50 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
51 $try .= '"$a $b";';
ee15d750 52 } elsif ($f eq "exponent") {
48b581a2 53 # ->bstr() to see if an object is returned
ee15d750 54 $try .= '$x->exponent()->bstr();';
55 } elsif ($f eq "mantissa") {
48b581a2 56 # ->bstr() to see if an object is returned
ee15d750 57 $try .= '$x->mantissa()->bstr();';
56d9de68 58 } elsif ($f =~ /^(numify|length|as_number|as_hex|as_bin)$/) {
59 $try .= "\$x->$f();";
b3abae2a 60 # some unary ops (test the fxxx form, since that is done by AUTOLOAD)
027dc388 61 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
394e6ffb 62 $try .= "\$x->f$1();";
027dc388 63 # some is_xxx test function
b3abae2a 64 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) {
027dc388 65 $try .= "\$x->$f();";
fdb4b05f 66 } elsif ($f eq "bpi") {
67 $try .= '$class->bpi($x);';
ee15d750 68 } elsif ($f eq "finc") {
69 $try .= '++$x;';
70 } elsif ($f eq "fdec") {
71 $try .= '--$x;';
72 }elsif ($f eq "fround") {
73 $try .= "$setup; \$x->fround($args[1]);";
74 } elsif ($f eq "ffround") {
75 $try .= "$setup; \$x->ffround($args[1]);";
76 } elsif ($f eq "fsqrt") {
77 $try .= "$setup; \$x->fsqrt();";
b3abae2a 78 } elsif ($f eq "ffac") {
79 $try .= "$setup; \$x->ffac();";
990fb837 80 } elsif ($f eq "flog") {
90d1b129 81 if (defined $args[1] && $args[1] ne '')
990fb837 82 {
83 $try .= "\$y = $class->new($args[1]);";
84 $try .= "$setup; \$x->flog(\$y);";
85 }
86 else
87 {
88 $try .= "$setup; \$x->flog();";
89 }
ee15d750 90 }
91 else
92 {
990fb837 93 $try .= "\$y = $class->new(\"$args[1]\");";
b68b7ab1 94
95 if ($f eq "bgcd")
96 {
97 if (defined $args[2])
98 {
99 $try .= " \$z = $class->new(\"$args[2]\"); ";
100 }
101 $try .= "$class\::bgcd(\$x, \$y";
102 $try .= ", \$z" if (defined $args[2]);
103 $try .= " );";
104 }
105 elsif ($f eq "blcm")
106 {
107 if (defined $args[2])
108 {
109 $try .= " \$z = $class->new(\"$args[2]\"); ";
110 }
111 $try .= "$class\::blcm(\$x, \$y";
112 $try .= ", \$z" if (defined $args[2]);
113 $try .= " );";
114 } elsif ($f eq "fcmp") {
a0ac753d 115 $try .= '$x->fcmp($y);';
ee15d750 116 } elsif ($f eq "facmp") {
117 $try .= '$x->facmp($y);';
118 } elsif ($f eq "fpow") {
119 $try .= '$x ** $y;';
50109ad0 120 } elsif ($f eq "bnok") {
121 $try .= '$x->bnok($y);';
60a1aa19 122 } elsif ($f eq "bcos") {
123 $try .= '$x->bcos($y);';
124 } elsif ($f eq "bsin") {
125 $try .= '$x->bsin($y);';
126 } elsif ($f eq "batan") {
127 $try .= '$x->batan($y);';
990fb837 128 } elsif ($f eq "froot") {
129 $try .= "$setup; \$x->froot(\$y);";
ee15d750 130 } elsif ($f eq "fadd") {
131 $try .= '$x + $y;';
132 } elsif ($f eq "fsub") {
133 $try .= '$x - $y;';
134 } elsif ($f eq "fmul") {
135 $try .= '$x * $y;';
136 } elsif ($f eq "fdiv") {
137 $try .= "$setup; \$x / \$y;";
b3abae2a 138 } elsif ($f eq "fdiv-list") {
139 $try .= "$setup; join(',',\$x->fdiv(\$y));";
394e6ffb 140 } elsif ($f eq "frsft") {
141 $try .= '$x >> $y;';
142 } elsif ($f eq "flsft") {
143 $try .= '$x << $y;';
ee15d750 144 } elsif ($f eq "fmod") {
145 $try .= '$x % $y;';
80365507 146 } else {
147 # Functions with three arguments
148 $try .= "\$z = $class->new(\"$args[2]\");";
149
150 if( $f eq "bmodpow") {
60a1aa19 151 $try .= '$x->bmodpow($y,$z);';
80365507 152 } elsif ($f eq "bmuladd"){
60a1aa19 153 $try .= '$x->bmuladd($y,$z);';
20e2035c 154 } elsif ($f eq "batan2"){
155 $try .= '$x->batan2($y,$z);';
80365507 156 } else { warn "Unknown op '$f'"; }
157 }
ee15d750 158 }
e745a66c 159 # print "# Trying: '$try'\n";
ee15d750 160 $ans1 = eval $try;
b68b7ab1 161 print "# Error: $@\n" if $@;
ee15d750 162 if ($ans =~ m|^/(.*)$|)
163 {
164 my $pat = $1;
165 if ($ans1 =~ /$pat/)
166 {
167 ok (1,1);
168 }
169 else
170 {
171 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
172 }
173 }
174 else
175 {
176 if ($ans eq "")
177 {
178 ok_undef ($ans1);
179 }
180 else
181 {
182 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
183 if (ref($ans1) eq "$class")
184 {
027dc388 185 # float numbers are normalized (for now), so mantissa shouldn't have
186 # trailing zeros
ee15d750 187 #print $ans1->_trailing_zeros(),"\n";
188 print "# Has trailing zeros after '$try'\n"
9b924220 189 if !ok ($CL->_zeros( $ans1->{_m}), 0);
ee15d750 190 }
191 }
192 } # end pattern or string
193 }
194 } # end while
195
394e6ffb 196# check whether $class->new( Math::BigInt->new()) destroys it
197# ($y == 12 in this case)
ee15d750 198$x = Math::BigInt->new(1200); $y = $class->new($x);
199ok ($y,1200); ok ($x,1200);
200
201###############################################################################
f9a08e12 202# Really huge, big, ultra-mega-biggy-monster exponents
203# Technically, the exponents should not be limited (they are BigInts), but
204# practically there are a few places were they are limited to a Perl scalar.
205# This is sometimes for speed, sometimes because otherwise the number wouldn't
206# fit into your memory (just think of 1e123456789012345678901234567890 + 1!)
207# anyway. We don't test everything here, but let's make sure it just basically
208# works.
209
210my $monster = '1e1234567890123456789012345678901234567890';
211
9b924220 212# new and exponent
56d9de68 213ok ($class->new($monster)->bsstr(),
214 '1e+1234567890123456789012345678901234567890');
9b924220 215ok ($class->new($monster)->exponent(),
216 '1234567890123456789012345678901234567890');
f9a08e12 217# cmp
218ok ($class->new($monster) > 0,1);
219
220# sub/mul
221ok ($class->new($monster)->bsub( $monster),0);
222ok ($class->new($monster)->bmul(2)->bsstr(),
223 '2e+1234567890123456789012345678901234567890');
224
9b924220 225# mantissa
226$monster = '1234567890123456789012345678901234567890e2';
227ok ($class->new($monster)->mantissa(),
228 '123456789012345678901234567890123456789');
229
f9a08e12 230###############################################################################
b3abae2a 231# zero,inf,one,nan
ee15d750 232
394e6ffb 233$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
234$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
235$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
236$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
56b9c951 237
238###############################################################################
239# bone/binf etc as plain calls (Lite failed them)
240
241ok ($class->fzero(),0);
242ok ($class->fone(),1);
243ok ($class->fone('+'),1);
244ok ($class->fone('-'),-1);
245ok ($class->fnan(),'NaN');
246ok ($class->finf(),'inf');
247ok ($class->finf('+'),'inf');
248ok ($class->finf('-'),'-inf');
249ok ($class->finf('-inf'),'-inf');
61f5c3f5 250
56d9de68 251$class->accuracy(undef); $class->precision(undef); # reset
252
253###############################################################################
254# bug in bsstr()/numify() showed up in after-rounding in bdiv()
255
256$x = $class->new('0.008'); $y = $class->new(2);
257$x->bdiv(3,$y);
258ok ($x,'0.0027');
259
61f5c3f5 260###############################################################################
261# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
262# correctly modifies $x
263
61f5c3f5 264
265$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
266
267$class->precision(undef);
268$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
269
270$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
271
56d9de68 272{
273 no strict 'refs';
274 # A and P set => NaN
275 ${${class}.'::accuracy'} = 4; $x = $class->new(12);
276 $x->fsqrt(3); ok ($x,'NaN');
277 # supplied arg overrides set global
278 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
279 $class->accuracy(undef); $class->precision(undef); # reset for further tests
280}
281
282#############################################################################
13a12e00 283# can we call objectify (broken until v1.52)
284
56d9de68 285{
286 no strict;
287 $try =
288 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);';
289 $ans = eval $try;
290 ok ($ans,"$class 4 5");
291}
f9a08e12 292
990fb837 293#############################################################################
294# is_one('-') (broken until v1.64)
295
296ok ($class->new(-1)->is_one(),0);
297ok ($class->new(-1)->is_one('-'),1);
298
27e7b8bb 299#############################################################################
300# bug 1/0.5 leaving 2e-0 instead of 2e0
301
302ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0');
303
03874afe 304###############################################################################
305# [perl #30609] bug with $x -= $x not beeing 0, but 2*$x
306
307$x = $class->new(3); $x -= $x; ok ($x, 0);
308$x = $class->new(-3); $x -= $x; ok ($x, 0);
309$x = $class->new(3); $x += $x; ok ($x, 6);
310$x = $class->new(-3); $x += $x; ok ($x, -6);
311
312$x = $class->new('NaN'); $x -= $x; ok ($x->is_nan(), 1);
313$x = $class->new('inf'); $x -= $x; ok ($x->is_nan(), 1);
314$x = $class->new('-inf'); $x -= $x; ok ($x->is_nan(), 1);
315
316$x = $class->new('NaN'); $x += $x; ok ($x->is_nan(), 1);
317$x = $class->new('inf'); $x += $x; ok ($x->is_inf(), 1);
318$x = $class->new('-inf'); $x += $x; ok ($x->is_inf('-'), 1);
319
320$x = $class->new('3.14'); $x -= $x; ok ($x, 0);
321$x = $class->new('-3.14'); $x -= $x; ok ($x, 0);
322$x = $class->new('3.14'); $x += $x; ok ($x, '6.28');
323$x = $class->new('-3.14'); $x += $x; ok ($x, '-6.28');
324
325$x = $class->new('3.14'); $x *= $x; ok ($x, '9.8596');
326$x = $class->new('-3.14'); $x *= $x; ok ($x, '9.8596');
327$x = $class->new('3.14'); $x /= $x; ok ($x, '1');
328$x = $class->new('-3.14'); $x /= $x; ok ($x, '1');
329$x = $class->new('3.14'); $x %= $x; ok ($x, '0');
330$x = $class->new('-3.14'); $x %= $x; ok ($x, '0');
331
ae161977 332###############################################################################
333# the following two were reported by "kenny" via hotmail.com:
334
335#perl -MMath::BigFloat -wle 'print Math::BigFloat->new(0)->bpow(".1")'
336#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
337
338$x = $class->new(0); $y = $class->new('0.1');
339ok ($x ** $y, 0, 'no warnings and zero result');
340
341#perl -MMath::BigFloat -lwe 'print Math::BigFloat->new(".222222222222222222222222222222222222222222")->bceil()'
342#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
343
344$x = $class->new(".222222222222222222222222222222222222222222");
345ok ($x->bceil(), 1, 'no warnings and one as result');
346
2d2b2744 347###############################################################################
348# test **=, <<=, >>=
349
350# ((2^148)-1)/17
351$x = $class->new(2); $x **= 148; $x++; $x->bdiv(17, 60)->bfloor(); $x->accuracy(undef);
352ok ($x,"20988936657440586486151264256610222593863921");
353ok ($x->length(),length "20988936657440586486151264256610222593863921");
354
355$x = $class->new('2');
356my $y = $class->new('18');
357ok ($x <<= $y, 2 << 18);
358ok ($x, 2 << 18);
359ok ($x >>= $y, 2);
360ok ($x, 2);
361
362$x = $class->new('2');
363$y = $class->new('18.2');
364$x <<= $y; # 2 * (2 ** 18.2);
365
366ok ($x->copy()->bfround(-9), '602248.763144685');
367ok ($x >>= $y, 2); # 2 * (2 ** 18.2) / (2 ** 18.2) => 2
368ok ($x, 2);
369
394e6ffb 3701; # all done
ee15d750 371
372###############################################################################
373# Perl 5.005 does not like ok ($x,undef)
374
375sub ok_undef
376 {
377 my $x = shift;
378
379 ok (1,1) and return if !defined $x;
380 ok ($x,'undef');
381 }
382
383__DATA__
b68b7ab1 384&bgcd
385inf:12:NaN
386-inf:12:NaN
38712:inf:NaN
38812:-inf:NaN
389inf:inf:NaN
390inf:-inf:NaN
391-inf:-inf:NaN
392abc:abc:NaN
393abc:+0:NaN
394+0:abc:NaN
395+0:+0:0
396+0:+1:1
397+1:+0:1
398+1:+1:1
399+2:+3:1
400+3:+2:1
401-3:+2:1
402-3:-2:1
403-144:-60:12
404144:-60:12
405144:60:12
406100:625:25
4074096:81:1
4081034:804:2
40927:90:56:1
41027:90:54:9
411&blcm
412abc:abc:NaN
413abc:+0:NaN
414+0:abc:NaN
415+0:+0:NaN
416+1:+0:0
417+0:+1:0
418+27:+90:270
419+1034:+804:415668
b3abae2a 420$div_scale = 40;
60a1aa19 421&bcos
4221.2:10:0.3623577545
4232.4:12:-0.737393715541
4240:10:1
4250:20:1
4261:10:0.5403023059
4271:12:0.540302305868
428&bsin
4291:10:0.8414709848
4300:10:0
4310:20:0
4322.1:12:0.863209366649
4331.2:13:0.9320390859672
4340.2:13:0.1986693307951
4353.2:12:-0.0583741434276
20e2035c 436&batan
4370.2:14:0.19739555984988
4380.2:13:0.1973955598499
439&batan2
4401:5:13:0.1973955598499
4411:5:14:0.19739555984988
fdb4b05f 442&bpi
20e2035c 443150:3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940813
fdb4b05f 44477:3.1415926535897932384626433832795028841971693993751058209749445923078164062862
445+0:3.141592653589793238462643383279502884197
20e2035c 44611:3.1415926536
50109ad0 447&bnok
448+inf:10:inf
449NaN:NaN:NaN
450NaN:1:NaN
4511:NaN:NaN
4521:1:1
453# k > n
4541:2:0
4552:3:0
456# k < 0
4571:-2:0
458# 7 over 3 = 35
4597:3:35
4607:6:1
461100:90:17310309456440
b3abae2a 462&flog
990fb837 4630::NaN
464-1::NaN
465-2::NaN
466# base > 0, base != 1
4672:-1:NaN
4682:0:NaN
4692:1:NaN
470# log(1) is always 1, regardless of $base
4711::0
4721:1:0
4731:2:0
90d1b129 4742::0.6931471805599453094172321214581765680755
4752.718281828::0.9999999998311266953289851340574956564911
476$div_scale = 20;
4772.718281828::0.99999999983112669533
478$div_scale = 15;
479123::4.81218435537242
48010::2.30258509299405
4811000::6.90775527898214
482100::4.60517018598809
4832::0.693147180559945
4843.1415::1.14470039286086
48512345::9.42100640177928
4860.001::-6.90775527898214
487# bug until v1.71:
48810:10:1
489100:100:1
b3abae2a 490# reset for further tests
491$div_scale = 40;
990fb837 4921::0
394e6ffb 493&frsft
b3abae2a 494NaNfrsft:2:NaN
394e6ffb 4950:2:0
4961:1:0.5
4972:1:1
4984:1:2
499123:1:61.5
50032:3:4
501&flsft
b3abae2a 502NaNflsft:0:NaN
394e6ffb 5032:1:4
5044:3:32
5055:3:40
5061:2:4
5070:5:0
ee15d750 508&fnorm
5091:1
510-0:0
511fnormNaN:NaN
512+inf:inf
513-inf:-inf
514123:123
515-123.4567:-123.4567
027dc388 516# invalid inputs
5171__2:NaN
5181E1__2:NaN
51911__2E2:NaN
027dc388 520.2E-3.:NaN
2d2b2744 5211e3e4:NaN
522# strange, but valid
027dc388 523.2E2:20
2d2b2744 5241.E3:1000
525# some inputs that result in zero
5260e0:0
527+0e0:0
528+0e+0:0
529-0e+0:0
5300e-0:0
531-0e-0:0
532+0e-0:0
533000:0
53400e2:0
53500e02:0
536000e002:0
537000e1230:0
53800e-3:0
53900e+3:0
54000e-03:0
54100e+03:0
542-000:0
543-00e2:0
544-00e02:0
545-000e002:0
546-000e1230:0
547-00e-3:0
548-00e+3:0
549-00e-03:0
550-00e+03:0
ee15d750 551&as_number
5520:0
5531:1
5541.2:1
5552.345:2
556-2:-2
557-123.456:-123
558-200:-200
56d9de68 559# test for bug in brsft() not handling cases that return 0
5600.000641:0
5610.0006412:0
5620.00064123:0
5630.000641234:0
5640.0006412345:0
5650.00064123456:0
5660.000641234567:0
5670.0006412345678:0
5680.00064123456789:0
5690.1:0
5700.01:0
5710.001:0
5720.0001:0
5730.00001:0
5740.000001:0
5750.0000001:0
5760.00000001:0
5770.000000001:0
5780.0000000001:0
5790.00000000001:0
990fb837 5800.12345:0
5810.123456:0
5820.1234567:0
5830.12345678:0
5840.123456789:0
ee15d750 585&finf
5861:+:inf
5872:-:-inf
5883:abc:inf
56d9de68 589&as_hex
590+inf:inf
591-inf:-inf
592hexNaN:NaN
5930:0x0
5945:0x5
595-5:-0x5
596&as_bin
597+inf:inf
598-inf:-inf
599hexNaN:NaN
6000:0b0
6015:0b101
602-5:-0b101
ee15d750 603&numify
56d9de68 604# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output
ee15d750 6050:0e+1
606+1:1e+0
6071234:1234e+0
608NaN:NaN
609+inf:inf
610-inf:-inf
56d9de68 611-5:-5e+0
612100:1e+2
613-100:-1e+2
ee15d750 614&fnan
615abc:NaN
6162:NaN
617-2:NaN
6180:NaN
619&fone
6202:+:1
621-2:-:-1
622-2:+:1
6232:-:-1
6240::1
625-2::1
626abc::1
6272:abc:1
628&fsstr
629+inf:inf
630-inf:-inf
631abcfsstr:NaN
56d9de68 632-abcfsstr:NaN
ee15d750 6331234.567:1234567e-3
56d9de68 634123:123e+0
635-5:-5e+0
636-100:-1e+2
ee15d750 637&fstr
638+inf:::inf
639-inf:::-inf
640abcfstr:::NaN
6411234.567:9::1234.56700
6421234.567::-6:1234.567000
64312345:5::12345
6440.001234:6::0.00123400
6450.001234::-8:0.00123400
6460:4::0
6470::-4:0.0000
648&fnorm
649inf:inf
650+inf:inf
651-inf:-inf
652+infinity:NaN
653+-inf:NaN
654abc:NaN
655 1 a:NaN
6561bcd2:NaN
65711111b:NaN
658+1z:NaN
659-1z:NaN
aef458a0 6600e999:0
6610e-999:0
662-0e999:0
663-0e-999:0
ee15d750 6640:0
665+0:0
666+00:0
667+0_0_0:0
668000000_0000000_00000:0
669-0:0
670-0000:0
671+1:1
672+01:1
673+001:1
674+00000100000:100000
675123456789:123456789
676-1:-1
677-01:-1
678-001:-1
679-123456789:-123456789
680-00000100000:-100000
681123.456a:NaN
682123.456:123.456
6830.01:0.01
684.002:0.002
685+.2:0.2
686-0.0003:-0.0003
687-.0000000004:-0.0000000004
688123456E2:12345600
689123456E-2:1234.56
690-123456E2:-12345600
691-123456E-2:-1234.56
6921e1:10
6932e-11:0.00000000002
694# excercise _split
695 .02e-1:0.002
696 000001:1
697 -00001:-1
698 -1:-1
699 000.01:0.01
700 -000.0023:-0.0023
701 1.1e1:11
702-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
703-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
704&fpow
9b924220 705NaN:1:NaN
7061:NaN:NaN
707NaN:-1:NaN
708-1:NaN:NaN
709NaN:-21:NaN
710-21:NaN:NaN
711NaN:21:NaN
71221:NaN:NaN
7130:0:1
7140:1:0
7150:9:0
7160:-2:inf
ee15d750 7172:2:4
7181:2:1
7191:3:1
720-1:2:1
721-1:3:-1
722123.456:2:15241.383936
7232:-2:0.25
7242:-3:0.125
725128:-2:0.00006103515625
726abc:123.456:NaN
727123.456:abc:NaN
728+inf:123.45:inf
729-inf:123.45:-inf
730+inf:-123.45:inf
731-inf:-123.45:-inf
9b924220 732-2:2:4
733-2:3:-8
734-2:4:16
735-2:5:-32
736-3:2:9
737-3:3:-27
738-3:4:81
739-3:5:-243
79c55733 740# 2 ** 0.5 == sqrt(2)
741# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0)
7422:0.5:1.41421356237309504880168872420969807857
56b9c951 743#2:0.2:1.148698354997035006798626946777927589444
07d34614 744#6:1.5:14.6969384566990685891837044482353483518
56b9c951 745$div_scale = 20;
746#62.5:12.5:26447206647554886213592.3959144
747$div_scale = 40;
ee15d750 748&fneg
749fnegNaN:NaN
750+inf:-inf
751-inf:inf
752+0:0
753+1:-1
754-1:1
755+123456789:-123456789
756-123456789:123456789
757+123.456789:-123.456789
758-123456.789:123456.789
759&fabs
760fabsNaN:NaN
761+inf:inf
762-inf:inf
763+0:0
764+1:1
765-1:1
766+123456789:123456789
767-123456789:123456789
768+123.456789:123.456789
769-123456.789:123456.789
770&fround
771$round_mode = "trunc"
772+inf:5:inf
773-inf:5:-inf
7740:5:0
775NaNfround:5:NaN
776+10123456789:5:10123000000
777-10123456789:5:-10123000000
778+10123456789.123:5:10123000000
779-10123456789.123:5:-10123000000
780+10123456789:9:10123456700
781-10123456789:9:-10123456700
782+101234500:6:101234000
783-101234500:6:-101234000
784$round_mode = "zero"
785+20123456789:5:20123000000
786-20123456789:5:-20123000000
787+20123456789.123:5:20123000000
788-20123456789.123:5:-20123000000
789+20123456789:9:20123456800
790-20123456789:9:-20123456800
791+201234500:6:201234000
792-201234500:6:-201234000
793$round_mode = "+inf"
794+30123456789:5:30123000000
795-30123456789:5:-30123000000
796+30123456789.123:5:30123000000
797-30123456789.123:5:-30123000000
798+30123456789:9:30123456800
799-30123456789:9:-30123456800
800+301234500:6:301235000
801-301234500:6:-301234000
802$round_mode = "-inf"
803+40123456789:5:40123000000
804-40123456789:5:-40123000000
805+40123456789.123:5:40123000000
806-40123456789.123:5:-40123000000
807+40123456789:9:40123456800
808-40123456789:9:-40123456800
809+401234500:6:401234000
810-401234500:6:-401235000
811$round_mode = "odd"
812+50123456789:5:50123000000
813-50123456789:5:-50123000000
814+50123456789.123:5:50123000000
815-50123456789.123:5:-50123000000
816+50123456789:9:50123456800
817-50123456789:9:-50123456800
818+501234500:6:501235000
819-501234500:6:-501235000
820$round_mode = "even"
821+60123456789:5:60123000000
822-60123456789:5:-60123000000
823+60123456789:9:60123456800
824-60123456789:9:-60123456800
825+601234500:6:601234000
826-601234500:6:-601234000
827+60123456789.0123:5:60123000000
828-60123456789.0123:5:-60123000000
7b29e1e6 829$round_mode = "common"
830+60123456789:5:60123000000
831-60123456789:5:-60123000000
832+60123456789:6:60123500000
833-60123456789:6:-60123500000
834+60123456789:9:60123456800
835-60123456789:9:-60123456800
836+601234500:6:601235000
837-601234500:6:-601235000
838+601234400:6:601234000
839-601234400:6:-601234000
840+601234600:6:601235000
841-601234600:6:-601235000
842+601234300:6:601234000
843+60123456789.0123:5:60123000000
844-60123456789.0123:5:-60123000000
ee15d750 845&ffround
846$round_mode = "trunc"
847+inf:5:inf
848-inf:5:-inf
8490:5:0
850NaNffround:5:NaN
851+1.23:-1:1.2
852+1.234:-1:1.2
853+1.2345:-1:1.2
854+1.23:-2:1.23
855+1.234:-2:1.23
856+1.2345:-2:1.23
857+1.23:-3:1.230
858+1.234:-3:1.234
859+1.2345:-3:1.234
860-1.23:-1:-1.2
861+1.27:-1:1.2
862-1.27:-1:-1.2
863+1.25:-1:1.2
864-1.25:-1:-1.2
865+1.35:-1:1.3
866-1.35:-1:-1.3
867-0.0061234567890:-1:0.0
868-0.0061:-1:0.0
869-0.00612:-1:0.0
870-0.00612:-2:0.00
871-0.006:-1:0.0
872-0.006:-2:0.00
873-0.0006:-2:0.00
874-0.0006:-3:0.000
875-0.0065:-3:/-0\.006|-6e-03
876-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
877-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8780.05:0:0
8790.5:0:0
8800.51:0:0
8810.41:0:0
882$round_mode = "zero"
883+2.23:-1:/2.2(?:0{5}\d+)?
884-2.23:-1:/-2.2(?:0{5}\d+)?
885+2.27:-1:/2.(?:3|29{5}\d+)
886-2.27:-1:/-2.(?:3|29{5}\d+)
887+2.25:-1:/2.2(?:0{5}\d+)?
888-2.25:-1:/-2.2(?:0{5}\d+)?
889+2.35:-1:/2.(?:3|29{5}\d+)
890-2.35:-1:/-2.(?:3|29{5}\d+)
891-0.0065:-1:0.0
892-0.0065:-2:/-0\.01|-1e-02
893-0.0065:-3:/-0\.006|-6e-03
894-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
895-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8960.05:0:0
8970.5:0:0
8980.51:0:1
8990.41:0:0
900$round_mode = "+inf"
901+3.23:-1:/3.2(?:0{5}\d+)?
902-3.23:-1:/-3.2(?:0{5}\d+)?
903+3.27:-1:/3.(?:3|29{5}\d+)
904-3.27:-1:/-3.(?:3|29{5}\d+)
905+3.25:-1:/3.(?:3|29{5}\d+)
906-3.25:-1:/-3.2(?:0{5}\d+)?
907+3.35:-1:/3.(?:4|39{5}\d+)
908-3.35:-1:/-3.(?:3|29{5}\d+)
909-0.0065:-1:0.0
910-0.0065:-2:/-0\.01|-1e-02
911-0.0065:-3:/-0\.006|-6e-03
912-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
913-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9140.05:0:0
9150.5:0:1
9160.51:0:1
9170.41:0:0
918$round_mode = "-inf"
919+4.23:-1:/4.2(?:0{5}\d+)?
920-4.23:-1:/-4.2(?:0{5}\d+)?
921+4.27:-1:/4.(?:3|29{5}\d+)
922-4.27:-1:/-4.(?:3|29{5}\d+)
923+4.25:-1:/4.2(?:0{5}\d+)?
924-4.25:-1:/-4.(?:3|29{5}\d+)
925+4.35:-1:/4.(?:3|29{5}\d+)
926-4.35:-1:/-4.(?:4|39{5}\d+)
927-0.0065:-1:0.0
928-0.0065:-2:/-0\.01|-1e-02
929-0.0065:-3:/-0\.007|-7e-03
930-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
931-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9320.05:0:0
9330.5:0:0
9340.51:0:1
9350.41:0:0
936$round_mode = "odd"
937+5.23:-1:/5.2(?:0{5}\d+)?
938-5.23:-1:/-5.2(?:0{5}\d+)?
939+5.27:-1:/5.(?:3|29{5}\d+)
940-5.27:-1:/-5.(?:3|29{5}\d+)
941+5.25:-1:/5.(?:3|29{5}\d+)
942-5.25:-1:/-5.(?:3|29{5}\d+)
943+5.35:-1:/5.(?:3|29{5}\d+)
944-5.35:-1:/-5.(?:3|29{5}\d+)
945-0.0065:-1:0.0
946-0.0065:-2:/-0\.01|-1e-02
947-0.0065:-3:/-0\.007|-7e-03
948-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
949-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9500.05:0:0
9510.5:0:1
9520.51:0:1
9530.41:0:0
954$round_mode = "even"
955+6.23:-1:/6.2(?:0{5}\d+)?
956-6.23:-1:/-6.2(?:0{5}\d+)?
957+6.27:-1:/6.(?:3|29{5}\d+)
958-6.27:-1:/-6.(?:3|29{5}\d+)
959+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
960-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
961+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
962-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
963-0.0065:-1:0.0
964-0.0065:-2:/-0\.01|-1e-02
965-0.0065:-3:/-0\.006|-7e-03
966-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
967-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9680.05:0:0
9690.5:0:0
9700.51:0:1
9710.41:0:0
9720.01234567:-3:0.012
9730.01234567:-4:0.0123
9740.01234567:-5:0.01235
9750.01234567:-6:0.012346
9760.01234567:-7:0.0123457
9770.01234567:-8:0.01234567
9780.01234567:-9:0.012345670
9790.01234567:-12:0.012345670000
980&fcmp
981fcmpNaN:fcmpNaN:
982fcmpNaN:+0:
983+0:fcmpNaN:
984+0:+0:0
985-1:+0:-1
986+0:-1:1
987+1:+0:1
988+0:+1:-1
989-1:+1:-1
990+1:-1:1
991-1:-1:0
992+1:+1:0
993-1.1:0:-1
994+0:-1.1:1
995+1.1:+0:1
996+0:+1.1:-1
997+123:+123:0
998+123:+12:1
999+12:+123:-1
1000-123:-123:0
1001-123:-12:-1
1002-12:-123:1
1003+123:+124:-1
1004+124:+123:1
1005-123:-124:1
1006-124:-123:-1
10070:0.01:-1
10080:0.0001:-1
10090:-0.0001:1
10100:-0.1:1
10110.1:0:1
10120.00001:0:1
1013-0.0001:0:-1
1014-0.1:0:-1
10150:0.0001234:-1
10160:-0.0001234:1
10170.0001234:0:1
1018-0.0001234:0:-1
10190.0001:0.0005:-1
10200.0005:0.0001:1
10210.005:0.0001:1
10220.001:0.0005:1
10230.000001:0.0005:-1
10240.00000123:0.0005:-1
10250.00512:0.0001:1
10260.005:0.000112:1
10270.00123:0.0005:1
10281.5:2:-1
10292:1.5:1
10301.54321:234:-1
1031234:1.54321:1
1032# infinity
1033-inf:5432112345:-1
1034+inf:5432112345:1
1035-inf:-5432112345:-1
1036+inf:-5432112345:1
1037-inf:54321.12345:-1
1038+inf:54321.12345:1
1039-inf:-54321.12345:-1
1040+inf:-54321.12345:1
1041+inf:+inf:0
1042-inf:-inf:0
1043+inf:-inf:1
1044-inf:+inf:-1
1045# return undef
1046+inf:NaN:
1047NaN:inf:
1048-inf:NaN:
1049NaN:-inf:
1050&facmp
1051fcmpNaN:fcmpNaN:
1052fcmpNaN:+0:
1053+0:fcmpNaN:
1054+0:+0:0
1055-1:+0:1
1056+0:-1:-1
1057+1:+0:1
1058+0:+1:-1
1059-1:+1:0
1060+1:-1:0
1061-1:-1:0
1062+1:+1:0
1063-1.1:0:1
1064+0:-1.1:-1
1065+1.1:+0:1
1066+0:+1.1:-1
1067+123:+123:0
1068+123:+12:1
1069+12:+123:-1
1070-123:-123:0
1071-123:-12:1
1072-12:-123:-1
1073+123:+124:-1
1074+124:+123:1
1075-123:-124:-1
1076-124:-123:1
10770:0.01:-1
10780:0.0001:-1
10790:-0.0001:-1
10800:-0.1:-1
10810.1:0:1
10820.00001:0:1
1083-0.0001:0:1
1084-0.1:0:1
10850:0.0001234:-1
10860:-0.0001234:-1
10870.0001234:0:1
1088-0.0001234:0:1
10890.0001:0.0005:-1
10900.0005:0.0001:1
10910.005:0.0001:1
10920.001:0.0005:1
10930.000001:0.0005:-1
10940.00000123:0.0005:-1
10950.00512:0.0001:1
10960.005:0.000112:1
10970.00123:0.0005:1
10981.5:2:-1
10992:1.5:1
11001.54321:234:-1
1101234:1.54321:1
1102# infinity
1103-inf:5432112345:1
1104+inf:5432112345:1
1105-inf:-5432112345:1
1106+inf:-5432112345:1
1107-inf:54321.12345:1
1108+inf:54321.12345:1
1109-inf:-54321.12345:1
1110+inf:-54321.12345:1
1111+inf:+inf:0
1112-inf:-inf:0
1113+inf:-inf:0
1114-inf:+inf:0
48b581a2 11155:inf:-1
1116-1:inf:-1
11175:-inf:-1
1118-1:-inf:-1
ee15d750 1119# return undef
1120+inf:facmpNaN:
1121facmpNaN:inf:
1122-inf:facmpNaN:
1123facmpNaN:-inf:
1124&fdec
1125fdecNaN:NaN
1126+inf:inf
1127-inf:-inf
1128+0:-1
1129+1:0
1130-1:-2
11311.23:0.23
1132-1.23:-2.23
e745a66c 1133100:99
1134101:100
1135-100:-101
1136-99:-100
1137-98:-99
113899:98
ee15d750 1139&finc
1140fincNaN:NaN
1141+inf:inf
1142-inf:-inf
1143+0:1
1144+1:2
1145-1:0
11461.23:2.23
1147-1.23:-0.23
e745a66c 1148100:101
1149-100:-99
1150-99:-98
1151-101:-100
115299:100
ee15d750 1153&fadd
1154abc:abc:NaN
1155abc:+0:NaN
1156+0:abc:NaN
13a12e00 1157+inf:-inf:NaN
1158-inf:+inf:NaN
ee15d750 1159+inf:+inf:inf
1160-inf:-inf:-inf
1161baddNaN:+inf:NaN
1162baddNaN:+inf:NaN
1163+inf:baddNaN:NaN
1164-inf:baddNaN:NaN
1165+0:+0:0
1166+1:+0:1
1167+0:+1:1
1168+1:+1:2
1169-1:+0:-1
1170+0:-1:-1
1171-1:-1:-2
1172-1:+1:0
1173+1:-1:0
1174+9:+1:10
1175+99:+1:100
1176+999:+1:1000
1177+9999:+1:10000
1178+99999:+1:100000
1179+999999:+1:1000000
1180+9999999:+1:10000000
1181+99999999:+1:100000000
1182+999999999:+1:1000000000
1183+9999999999:+1:10000000000
1184+99999999999:+1:100000000000
1185+10:-1:9
1186+100:-1:99
1187+1000:-1:999
1188+10000:-1:9999
1189+100000:-1:99999
1190+1000000:-1:999999
1191+10000000:-1:9999999
1192+100000000:-1:99999999
1193+1000000000:-1:999999999
1194+10000000000:-1:9999999999
1195+123456789:+987654321:1111111110
1196-123456789:+987654321:864197532
1197-123456789:-987654321:-1111111110
1198+123456789:-987654321:-864197532
11990.001234:0.0001234:0.0013574
1200&fsub
1201abc:abc:NaN
1202abc:+0:NaN
1203+0:abc:NaN
1204+inf:-inf:inf
1205-inf:+inf:-inf
13a12e00 1206+inf:+inf:NaN
1207-inf:-inf:NaN
ee15d750 1208baddNaN:+inf:NaN
1209baddNaN:+inf:NaN
1210+inf:baddNaN:NaN
1211-inf:baddNaN:NaN
1212+0:+0:0
1213+1:+0:1
1214+0:+1:-1
1215+1:+1:0
1216-1:+0:-1
1217+0:-1:1
1218-1:-1:0
1219-1:+1:-2
1220+1:-1:2
1221+9:+1:8
1222+99:+1:98
1223+999:+1:998
1224+9999:+1:9998
1225+99999:+1:99998
1226+999999:+1:999998
1227+9999999:+1:9999998
1228+99999999:+1:99999998
1229+999999999:+1:999999998
1230+9999999999:+1:9999999998
1231+99999999999:+1:99999999998
1232+10:-1:11
1233+100:-1:101
1234+1000:-1:1001
1235+10000:-1:10001
1236+100000:-1:100001
1237+1000000:-1:1000001
1238+10000000:-1:10000001
1239+100000000:-1:100000001
1240+1000000000:-1:1000000001
1241+10000000000:-1:10000000001
1242+123456789:+987654321:-864197532
1243-123456789:+987654321:-1111111110
1244-123456789:-987654321:864197532
1245+123456789:-987654321:1111111110
80365507 1246&bmuladd
1247abc:abc:0:NaN
1248abc:+0:0:NaN
1249+0:abc:0:NaN
1250+0:0:abc:NaN
1251NaNmul:+inf:0:NaN
1252NaNmul:-inf:0:NaN
1253-inf:NaNmul:0:NaN
1254+inf:NaNmul:0:NaN
1255+inf:+inf:0:inf
1256+inf:-inf:0:-inf
1257-inf:+inf:0:-inf
1258-inf:-inf:0:inf
1259+0:+0:0:0
1260+0:+1:0:0
1261+1:+0:0:0
1262+0:-1:0:0
1263-1:+0:0:0
1264123456789123456789:0:0:0
12650:123456789123456789:0:0
1266-1:-1:0:1
1267-1:-1:0:1
1268-1:+1:0:-1
1269+1:-1:0:-1
1270+1:+1:0:1
1271+2:+3:0:6
1272-2:+3:0:-6
1273+2:-3:0:-6
1274-2:-3:0:6
1275111:111:0:12321
127610101:10101:0:102030201
12771001001:1001001:0:1002003002001
1278100010001:100010001:0:10002000300020001
127910000100001:10000100001:0:100002000030000200001
128011111111111:9:0:99999999999
128122222222222:9:0:199999999998
128233333333333:9:0:299999999997
128344444444444:9:0:399999999996
128455555555555:9:0:499999999995
128566666666666:9:0:599999999994
128677777777777:9:0:699999999993
128788888888888:9:0:799999999992
128899999999999:9:0:899999999991
128911111111111:9:1:100000000000
129022222222222:9:1:199999999999
129133333333333:9:1:299999999998
129244444444444:9:1:399999999997
129355555555555:9:1:499999999996
129466666666666:9:1:599999999995
129577777777777:9:1:699999999994
129688888888888:9:1:799999999993
129799999999999:9:1:899999999992
1298-3:-4:-5:7
12993:-4:-5:-17
1300-3:4:-5:-17
13013:4:-5:7
1302-3:4:5:-7
13033:-4:5:-7
13049999999999999999999:10000000000000000000:1234567890:99999999999999999990000000001234567890
13053.2:5.7:8.9:27.14
1306-3.2:5.197:6.05:-10.5804
1307&bmodpow
13083:4:8:1
13093:4:7:4
13103:4:7:4
131177777:777:123456789:99995084
13123.2:6.2:5.2:2.970579856718063040273642739529400818
ee15d750 1313&fmul
1314abc:abc:NaN
1315abc:+0:NaN
1316+0:abc:NaN
1317+inf:NaNmul:NaN
1318+inf:NaNmul:NaN
1319NaNmul:+inf:NaN
1320NaNmul:-inf:NaN
1321+inf:+inf:inf
1322+inf:-inf:-inf
1323+inf:-inf:-inf
1324+inf:+inf:inf
1325+inf:123.34:inf
1326+inf:-123.34:-inf
1327-inf:123.34:-inf
1328-inf:-123.34:inf
1329123.34:+inf:inf
1330-123.34:+inf:-inf
1331123.34:-inf:-inf
1332-123.34:-inf:inf
1333+0:+0:0
1334+0:+1:0
1335+1:+0:0
1336+0:-1:0
1337-1:+0:0
1338+123456789123456789:+0:0
1339+0:+123456789123456789:0
1340-1:-1:1
1341-1:+1:-1
1342+1:-1:-1
1343+1:+1:1
1344+2:+3:6
1345-2:+3:-6
1346+2:-3:-6
1347-2:-3:6
1348+111:+111:12321
1349+10101:+10101:102030201
1350+1001001:+1001001:1002003002001
1351+100010001:+100010001:10002000300020001
1352+10000100001:+10000100001:100002000030000200001
1353+11111111111:+9:99999999999
1354+22222222222:+9:199999999998
1355+33333333333:+9:299999999997
1356+44444444444:+9:399999999996
1357+55555555555:+9:499999999995
1358+66666666666:+9:599999999994
1359+77777777777:+9:699999999993
1360+88888888888:+9:799999999992
1361+99999999999:+9:899999999991
13626:120:720
136310:10000:100000
b3abae2a 1364&fdiv-list
13650:0:NaN,NaN
13660:1:0,0
13679:4:2.25,1
13689:5:1.8,4
233f7bc0 1369# bug in v1.74 with bdiv in list context, when $y is 1 or -1
13702.1:-1:-2.1,0
13712.1:1:2.1,0
1372-2.1:-1:2.1,0
1373-2.1:1:-2.1,0
ee15d750 1374&fdiv
1375$div_scale = 40; $round_mode = 'even'
1376abc:abc:NaN
1377abc:+1:abc:NaN
1378+1:abc:NaN
1379-1:abc:NaN
13800:abc:NaN
1381+0:+0:NaN
1382+0:+1:0
1383+1:+0:inf
1384+3214:+0:inf
1385+0:-1:0
1386-1:+0:-inf
1387-3214:+0:-inf
1388+1:+1:1
1389-1:-1:1
1390+1:-1:-1
1391-1:+1:-1
1392+1:+2:0.5
1393+2:+1:2
1394123:+inf:0
1395123:-inf:0
1396+10:+5:2
1397+100:+4:25
1398+1000:+8:125
1399+10000:+16:625
1400+10000:-16:-625
1401+999999999999:+9:111111111111
1402+999999999999:+99:10101010101
1403+999999999999:+999:1001001001
1404+999999999999:+9999:100010001
1405+999999999999999:+99999:10000100001
1406+1000000000:+9:111111111.1111111111111111111111111111111
1407+2000000000:+9:222222222.2222222222222222222222222222222
1408+3000000000:+9:333333333.3333333333333333333333333333333
1409+4000000000:+9:444444444.4444444444444444444444444444444
1410+5000000000:+9:555555555.5555555555555555555555555555556
1411+6000000000:+9:666666666.6666666666666666666666666666667
1412+7000000000:+9:777777777.7777777777777777777777777777778
1413+8000000000:+9:888888888.8888888888888888888888888888889
1414+9000000000:+9:1000000000
1415+35500000:+113:314159.2920353982300884955752212389380531
1416+71000000:+226:314159.2920353982300884955752212389380531
1417+106500000:+339:314159.2920353982300884955752212389380531
1418+1000000000:+3:333333333.3333333333333333333333333333333
14192:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 1420123456:1:123456
ee15d750 1421$div_scale = 20
1422+1000000000:+9:111111111.11111111111
1423+2000000000:+9:222222222.22222222222
1424+3000000000:+9:333333333.33333333333
1425+4000000000:+9:444444444.44444444444
1426+5000000000:+9:555555555.55555555556
1427+6000000000:+9:666666666.66666666667
1428+7000000000:+9:777777777.77777777778
1429+8000000000:+9:888888888.88888888889
1430+9000000000:+9:1000000000
14311:10:0.1
14321:100:0.01
14331:1000:0.001
14341:10000:0.0001
14351:504:0.001984126984126984127
14362:1.987654321:1.0062111801179738436
394e6ffb 1437123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 1438# the next two cases are the "old" behaviour, but are now (>v0.01) different
1439#+35500000:+113:314159.292035398230088
1440#+71000000:+226:314159.292035398230088
1441+35500000:+113:314159.29203539823009
1442+71000000:+226:314159.29203539823009
1443+106500000:+339:314159.29203539823009
1444+1000000000:+3:333333333.33333333333
1445$div_scale = 1
1446# round to accuracy 1 after bdiv
1447+124:+3:40
394e6ffb 1448123456789.1234:1:100000000
ee15d750 1449# reset scale for further tests
1450$div_scale = 40
1451&fmod
61f5c3f5 1452+9:4:1
1453+9:5:4
1454+9000:56:40
1455+56:9000:56
1456# inf handling, see table in doc
14570:inf:0
14580:-inf:0
14595:inf:5
14605:-inf:5
1461-5:inf:-5
1462-5:-inf:-5
1463inf:5:0
1464-inf:5:0
1465inf:-5:0
1466-inf:-5:0
14675:5:0
1468-5:-5:0
b3abae2a 1469inf:inf:NaN
1470-inf:-inf:NaN
1471-inf:inf:NaN
1472inf:-inf:NaN
61f5c3f5 14738:0:8
1474inf:0:inf
1475# exceptions to reminder rule
1476-inf:0:-inf
1477-8:0:-8
14780:0:NaN
1479abc:abc:NaN
1480abc:1:abc:NaN
14811:abc:NaN
14820:0:NaN
14830:1:0
14841:0:1
14850:-1:0
1486-1:0:-1
14871:1:0
1488-1:-1:0
14891:-1:0
1490-1:1:0
14911:2:1
14922:1:0
14931000000000:9:1
14942000000000:9:2
14953000000000:9:3
14964000000000:9:4
14975000000000:9:5
14986000000000:9:6
14997000000000:9:7
15008000000000:9:8
15019000000000:9:0
150235500000:113:33
150371000000:226:66
1504106500000:339:99
15051000000000:3:1
150610:5:0
1507100:4:0
15081000:8:0
150910000:16:0
1510999999999999:9:0
1511999999999999:99:0
1512999999999999:999:0
1513999999999999:9999:0
1514999999999999999:99999:0
1515-9:+5:1
1516+9:-5:-1
1517-9:-5:-4
1518-5:3:1
1519-2:3:1
15204:3:1
15211:3:1
1522-5:-3:-2
1523-2:-3:-2
15244:-3:-2
15251:-3:-2
15264095:4095:0
1527100041000510123:3:0
1528152403346:12345:4321
152987654321:87654321:0
1530# now some floating point tests
1531123:2.5:0.5
15321230:2.5:0
1533123.4:2.5:0.9
1534123e1:25:5
7596a890 1535-2.1:1:0.9
15362.1:1:0.1
1537-2.1:-1:-0.1
15382.1:-1:-0.9
233f7bc0 1539-3:1:0
15403:1:0
1541-3:-1:0
15423:-1:0
b3abae2a 1543&ffac
1544Nanfac:NaN
1545-1:NaN
b282a552 1546+inf:inf
091c87b1 1547-inf:NaN
b3abae2a 15480:1
15491:1
15502:2
15513:6
15524:24
15535:120
15546:720
155510:3628800
155611:39916800
155712:479001600
990fb837 1558&froot
1559# sqrt()
1560+0:2:0
1561+1:2:1
1562-1:2:NaN
1563# -$x ** (1/2) => -$y, but not in froot()
1564-123.456:2:NaN
1565+inf:2:inf
1566-inf:2:NaN
15672:2:1.41421356237309504880168872420969807857
1568-2:2:NaN
15694:2:2
15709:2:3
157116:2:4
1572100:2:10
1573123.456:2:11.11107555549866648462149404118219234119
157415241.38393:2:123.4559999756998444766131352122991626468
15751.44:2:1.2
157612:2:3.464101615137754587054892683011744733886
15770.49:2:0.7
15780.0049:2:0.07
1579# invalid ones
15801:NaN:NaN
1581-1:NaN:NaN
15820:NaN:NaN
1583-inf:NaN:NaN
1584+inf:NaN:NaN
1585NaN:0:NaN
1586NaN:2:NaN
1587NaN:inf:NaN
1588NaN:inf:NaN
158912:-inf:NaN
159012:inf:NaN
1591+0:0:NaN
1592+1:0:NaN
1593-1:0:NaN
1594-2:0:NaN
1595-123.45:0:NaN
1596+inf:0:NaN
159712:1:12
1598-12:1:NaN
15998:-1:NaN
1600-8:-1:NaN
1601# cubic root
16028:3:2
1603-8:3:NaN
1604# fourths root
160516:4:2
160681:4:3
3a427a11 1607# see t/bigroot() for more tests
ee15d750 1608&fsqrt
1609+0:0
1610-1:NaN
1611-2:NaN
1612-16:NaN
1613-123.45:NaN
1614nanfsqrt:NaN
1615+inf:inf
1616-inf:NaN
394e6ffb 16171:1
16182:1.41421356237309504880168872420969807857
16194:2
16209:3
162116:4
1622100:10
1623123.456:11.11107555549866648462149404118219234119
162415241.38393:123.4559999756998444766131352122991626468
16251.44:1.2
1626# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
16271.44E10:120000
16282e10:141421.356237309504880168872420969807857
b3abae2a 1629144e20:120000000000
61f5c3f5 1630# proved to be an endless loop under 7-9
163112:3.464101615137754587054892683011744733886
990fb837 16320.49:0.7
16330.0049:0.07
027dc388 1634&is_nan
1635123:0
1636abc:1
1637NaN:1
1638-123:0
1639&is_inf
1640+inf::1
1641-inf::1
1642abc::0
16431::0
1644NaN::0
1645-1::0
1646+inf:-:0
1647+inf:+:1
1648-inf:-:1
1649-inf:+:0
1650# it must be exactly /^[+-]inf$/
1651+infinity::0
1652-infinity::0
ee15d750 1653&is_odd
1654abc:0
16550:0
1656-1:1
1657-3:1
16581:1
16593:1
16601000001:1
16611000002:0
1662+inf:0
1663-inf:0
1664123.45:0
1665-123.45:0
16662:0
b3abae2a 1667&is_int
1668NaNis_int:0
16690:1
16701:1
16712:1
1672-2:1
1673-1:1
1674-inf:0
1675+inf:0
1676123.4567:0
1677-0.1:0
1678-0.002:0
ee15d750 1679&is_even
1680abc:0
16810:1
1682-1:0
1683-3:0
16841:0
16853:0
16861000001:0
16871000002:1
16882:1
1689+inf:0
1690-inf:0
1691123.456:0
1692-123.456:0
b3abae2a 16930.01:0
1694-0.01:0
1695120:1
16961200:1
1697-1200:1
ee15d750 1698&is_positive
b68b7ab1 16990:0
ee15d750 17001:1
1701-1:0
1702-123:0
1703NaN:0
1704-inf:0
1705+inf:1
1706&is_negative
17070:0
17081:0
1709-1:1
1710-123:1
1711NaN:0
1712-inf:1
1713+inf:0
1714&parts
17150:0 1
17161:1 0
1717123:123 0
1718-123:-123 0
1719-1200:-12 2
1720NaNparts:NaN NaN
1721+inf:inf inf
1722-inf:-inf inf
1723&exponent
17240:1
17251:0
1726123:0
1727-123:0
1728-1200:2
1729+inf:inf
1730-inf:inf
1731NaNexponent:NaN
1732&mantissa
17330:0
17341:1
1735123:123
1736-123:-123
1737-1200:-12
1738+inf:inf
1739-inf:-inf
1740NaNmantissa:NaN
1741&length
1742123:3
1743-123:3
17440:1
17451:1
174612345678901234567890:20
1747&is_zero
1748NaNzero:0
1749+inf:0
1750-inf:0
17510:1
1752-1:0
17531:0
1754&is_one
1755NaNone:0
1756+inf:0
1757-inf:0
17580:0
17592:0
17601:1
1761-1:0
1762-2:0
027dc388 1763&ffloor
ee15d750 17640:0
1765abc:NaN
1766+inf:inf
1767-inf:-inf
17681:1
1769-51:-51
1770-51.2:-52
177112.2:12
990fb837 17720.12345:0
17730.123456:0
17740.1234567:0
17750.12345678:0
17760.123456789:0
027dc388 1777&fceil
ee15d750 17780:0
1779abc:NaN
1780+inf:inf
1781-inf:-inf
17821:1
1783-51:-51
1784-51.2:-51
178512.2:13