remove the test added by change #31447
[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);';
990fb837 122 } elsif ($f eq "froot") {
123 $try .= "$setup; \$x->froot(\$y);";
ee15d750 124 } elsif ($f eq "fadd") {
125 $try .= '$x + $y;';
126 } elsif ($f eq "fsub") {
127 $try .= '$x - $y;';
128 } elsif ($f eq "fmul") {
129 $try .= '$x * $y;';
130 } elsif ($f eq "fdiv") {
131 $try .= "$setup; \$x / \$y;";
b3abae2a 132 } elsif ($f eq "fdiv-list") {
133 $try .= "$setup; join(',',\$x->fdiv(\$y));";
394e6ffb 134 } elsif ($f eq "frsft") {
135 $try .= '$x >> $y;';
136 } elsif ($f eq "flsft") {
137 $try .= '$x << $y;';
ee15d750 138 } elsif ($f eq "fmod") {
139 $try .= '$x % $y;';
80365507 140 } else {
141 # Functions with three arguments
142 $try .= "\$z = $class->new(\"$args[2]\");";
143
144 if( $f eq "bmodpow") {
145 $try .= "\$x->bmodpow(\$y,\$z);";
146 } elsif ($f eq "bmuladd"){
147 $try .= "\$x->bmuladd(\$y,\$z);";
148 } else { warn "Unknown op '$f'"; }
149 }
ee15d750 150 }
e745a66c 151 # print "# Trying: '$try'\n";
ee15d750 152 $ans1 = eval $try;
b68b7ab1 153 print "# Error: $@\n" if $@;
ee15d750 154 if ($ans =~ m|^/(.*)$|)
155 {
156 my $pat = $1;
157 if ($ans1 =~ /$pat/)
158 {
159 ok (1,1);
160 }
161 else
162 {
163 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
164 }
165 }
166 else
167 {
168 if ($ans eq "")
169 {
170 ok_undef ($ans1);
171 }
172 else
173 {
174 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
175 if (ref($ans1) eq "$class")
176 {
027dc388 177 # float numbers are normalized (for now), so mantissa shouldn't have
178 # trailing zeros
ee15d750 179 #print $ans1->_trailing_zeros(),"\n";
180 print "# Has trailing zeros after '$try'\n"
9b924220 181 if !ok ($CL->_zeros( $ans1->{_m}), 0);
ee15d750 182 }
183 }
184 } # end pattern or string
185 }
186 } # end while
187
394e6ffb 188# check whether $class->new( Math::BigInt->new()) destroys it
189# ($y == 12 in this case)
ee15d750 190$x = Math::BigInt->new(1200); $y = $class->new($x);
191ok ($y,1200); ok ($x,1200);
192
193###############################################################################
f9a08e12 194# Really huge, big, ultra-mega-biggy-monster exponents
195# Technically, the exponents should not be limited (they are BigInts), but
196# practically there are a few places were they are limited to a Perl scalar.
197# This is sometimes for speed, sometimes because otherwise the number wouldn't
198# fit into your memory (just think of 1e123456789012345678901234567890 + 1!)
199# anyway. We don't test everything here, but let's make sure it just basically
200# works.
201
202my $monster = '1e1234567890123456789012345678901234567890';
203
9b924220 204# new and exponent
56d9de68 205ok ($class->new($monster)->bsstr(),
206 '1e+1234567890123456789012345678901234567890');
9b924220 207ok ($class->new($monster)->exponent(),
208 '1234567890123456789012345678901234567890');
f9a08e12 209# cmp
210ok ($class->new($monster) > 0,1);
211
212# sub/mul
213ok ($class->new($monster)->bsub( $monster),0);
214ok ($class->new($monster)->bmul(2)->bsstr(),
215 '2e+1234567890123456789012345678901234567890');
216
9b924220 217# mantissa
218$monster = '1234567890123456789012345678901234567890e2';
219ok ($class->new($monster)->mantissa(),
220 '123456789012345678901234567890123456789');
221
f9a08e12 222###############################################################################
b3abae2a 223# zero,inf,one,nan
ee15d750 224
394e6ffb 225$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
226$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
227$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
228$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
56b9c951 229
230###############################################################################
231# bone/binf etc as plain calls (Lite failed them)
232
233ok ($class->fzero(),0);
234ok ($class->fone(),1);
235ok ($class->fone('+'),1);
236ok ($class->fone('-'),-1);
237ok ($class->fnan(),'NaN');
238ok ($class->finf(),'inf');
239ok ($class->finf('+'),'inf');
240ok ($class->finf('-'),'-inf');
241ok ($class->finf('-inf'),'-inf');
61f5c3f5 242
56d9de68 243$class->accuracy(undef); $class->precision(undef); # reset
244
245###############################################################################
246# bug in bsstr()/numify() showed up in after-rounding in bdiv()
247
248$x = $class->new('0.008'); $y = $class->new(2);
249$x->bdiv(3,$y);
250ok ($x,'0.0027');
251
61f5c3f5 252###############################################################################
253# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
254# correctly modifies $x
255
61f5c3f5 256
257$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
258
259$class->precision(undef);
260$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
261
262$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
263
56d9de68 264{
265 no strict 'refs';
266 # A and P set => NaN
267 ${${class}.'::accuracy'} = 4; $x = $class->new(12);
268 $x->fsqrt(3); ok ($x,'NaN');
269 # supplied arg overrides set global
270 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
271 $class->accuracy(undef); $class->precision(undef); # reset for further tests
272}
273
274#############################################################################
13a12e00 275# can we call objectify (broken until v1.52)
276
56d9de68 277{
278 no strict;
279 $try =
280 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);';
281 $ans = eval $try;
282 ok ($ans,"$class 4 5");
283}
f9a08e12 284
990fb837 285#############################################################################
286# is_one('-') (broken until v1.64)
287
288ok ($class->new(-1)->is_one(),0);
289ok ($class->new(-1)->is_one('-'),1);
290
27e7b8bb 291#############################################################################
292# bug 1/0.5 leaving 2e-0 instead of 2e0
293
294ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0');
295
03874afe 296###############################################################################
297# [perl #30609] bug with $x -= $x not beeing 0, but 2*$x
298
299$x = $class->new(3); $x -= $x; ok ($x, 0);
300$x = $class->new(-3); $x -= $x; ok ($x, 0);
301$x = $class->new(3); $x += $x; ok ($x, 6);
302$x = $class->new(-3); $x += $x; ok ($x, -6);
303
304$x = $class->new('NaN'); $x -= $x; ok ($x->is_nan(), 1);
305$x = $class->new('inf'); $x -= $x; ok ($x->is_nan(), 1);
306$x = $class->new('-inf'); $x -= $x; ok ($x->is_nan(), 1);
307
308$x = $class->new('NaN'); $x += $x; ok ($x->is_nan(), 1);
309$x = $class->new('inf'); $x += $x; ok ($x->is_inf(), 1);
310$x = $class->new('-inf'); $x += $x; ok ($x->is_inf('-'), 1);
311
312$x = $class->new('3.14'); $x -= $x; ok ($x, 0);
313$x = $class->new('-3.14'); $x -= $x; ok ($x, 0);
314$x = $class->new('3.14'); $x += $x; ok ($x, '6.28');
315$x = $class->new('-3.14'); $x += $x; ok ($x, '-6.28');
316
317$x = $class->new('3.14'); $x *= $x; ok ($x, '9.8596');
318$x = $class->new('-3.14'); $x *= $x; ok ($x, '9.8596');
319$x = $class->new('3.14'); $x /= $x; ok ($x, '1');
320$x = $class->new('-3.14'); $x /= $x; ok ($x, '1');
321$x = $class->new('3.14'); $x %= $x; ok ($x, '0');
322$x = $class->new('-3.14'); $x %= $x; ok ($x, '0');
323
ae161977 324###############################################################################
325# the following two were reported by "kenny" via hotmail.com:
326
327#perl -MMath::BigFloat -wle 'print Math::BigFloat->new(0)->bpow(".1")'
328#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
329
330$x = $class->new(0); $y = $class->new('0.1');
331ok ($x ** $y, 0, 'no warnings and zero result');
332
333#perl -MMath::BigFloat -lwe 'print Math::BigFloat->new(".222222222222222222222222222222222222222222")->bceil()'
334#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
335
336$x = $class->new(".222222222222222222222222222222222222222222");
337ok ($x->bceil(), 1, 'no warnings and one as result');
338
2d2b2744 339###############################################################################
340# test **=, <<=, >>=
341
342# ((2^148)-1)/17
343$x = $class->new(2); $x **= 148; $x++; $x->bdiv(17, 60)->bfloor(); $x->accuracy(undef);
344ok ($x,"20988936657440586486151264256610222593863921");
345ok ($x->length(),length "20988936657440586486151264256610222593863921");
346
347$x = $class->new('2');
348my $y = $class->new('18');
349ok ($x <<= $y, 2 << 18);
350ok ($x, 2 << 18);
351ok ($x >>= $y, 2);
352ok ($x, 2);
353
354$x = $class->new('2');
355$y = $class->new('18.2');
356$x <<= $y; # 2 * (2 ** 18.2);
357
358ok ($x->copy()->bfround(-9), '602248.763144685');
359ok ($x >>= $y, 2); # 2 * (2 ** 18.2) / (2 ** 18.2) => 2
360ok ($x, 2);
361
394e6ffb 3621; # all done
ee15d750 363
364###############################################################################
365# Perl 5.005 does not like ok ($x,undef)
366
367sub ok_undef
368 {
369 my $x = shift;
370
371 ok (1,1) and return if !defined $x;
372 ok ($x,'undef');
373 }
374
375__DATA__
b68b7ab1 376&bgcd
377inf:12:NaN
378-inf:12:NaN
37912:inf:NaN
38012:-inf:NaN
381inf:inf:NaN
382inf:-inf:NaN
383-inf:-inf:NaN
384abc:abc:NaN
385abc:+0:NaN
386+0:abc:NaN
387+0:+0:0
388+0:+1:1
389+1:+0:1
390+1:+1:1
391+2:+3:1
392+3:+2:1
393-3:+2:1
394-3:-2:1
395-144:-60:12
396144:-60:12
397144:60:12
398100:625:25
3994096:81:1
4001034:804:2
40127:90:56:1
40227:90:54:9
403&blcm
404abc:abc:NaN
405abc:+0:NaN
406+0:abc:NaN
407+0:+0:NaN
408+1:+0:0
409+0:+1:0
410+27:+90:270
411+1034:+804:415668
b3abae2a 412$div_scale = 40;
fdb4b05f 413&bpi
41477:3.1415926535897932384626433832795028841971693993751058209749445923078164062862
415+0:3.141592653589793238462643383279502884197
41611:3.1415926535
50109ad0 417&bnok
418+inf:10:inf
419NaN:NaN:NaN
420NaN:1:NaN
4211:NaN:NaN
4221:1:1
423# k > n
4241:2:0
4252:3:0
426# k < 0
4271:-2:0
428# 7 over 3 = 35
4297:3:35
4307:6:1
431100:90:17310309456440
b3abae2a 432&flog
990fb837 4330::NaN
434-1::NaN
435-2::NaN
436# base > 0, base != 1
4372:-1:NaN
4382:0:NaN
4392:1:NaN
440# log(1) is always 1, regardless of $base
4411::0
4421:1:0
4431:2:0
90d1b129 4442::0.6931471805599453094172321214581765680755
4452.718281828::0.9999999998311266953289851340574956564911
446$div_scale = 20;
4472.718281828::0.99999999983112669533
448$div_scale = 15;
449123::4.81218435537242
45010::2.30258509299405
4511000::6.90775527898214
452100::4.60517018598809
4532::0.693147180559945
4543.1415::1.14470039286086
45512345::9.42100640177928
4560.001::-6.90775527898214
457# bug until v1.71:
45810:10:1
459100:100:1
b3abae2a 460# reset for further tests
461$div_scale = 40;
990fb837 4621::0
394e6ffb 463&frsft
b3abae2a 464NaNfrsft:2:NaN
394e6ffb 4650:2:0
4661:1:0.5
4672:1:1
4684:1:2
469123:1:61.5
47032:3:4
471&flsft
b3abae2a 472NaNflsft:0:NaN
394e6ffb 4732:1:4
4744:3:32
4755:3:40
4761:2:4
4770:5:0
ee15d750 478&fnorm
4791:1
480-0:0
481fnormNaN:NaN
482+inf:inf
483-inf:-inf
484123:123
485-123.4567:-123.4567
027dc388 486# invalid inputs
4871__2:NaN
4881E1__2:NaN
48911__2E2:NaN
027dc388 490.2E-3.:NaN
2d2b2744 4911e3e4:NaN
492# strange, but valid
027dc388 493.2E2:20
2d2b2744 4941.E3:1000
495# some inputs that result in zero
4960e0:0
497+0e0:0
498+0e+0:0
499-0e+0:0
5000e-0:0
501-0e-0:0
502+0e-0:0
503000:0
50400e2:0
50500e02:0
506000e002:0
507000e1230:0
50800e-3:0
50900e+3:0
51000e-03:0
51100e+03:0
512-000:0
513-00e2:0
514-00e02:0
515-000e002:0
516-000e1230:0
517-00e-3:0
518-00e+3:0
519-00e-03:0
520-00e+03:0
ee15d750 521&as_number
5220:0
5231:1
5241.2:1
5252.345:2
526-2:-2
527-123.456:-123
528-200:-200
56d9de68 529# test for bug in brsft() not handling cases that return 0
5300.000641:0
5310.0006412:0
5320.00064123:0
5330.000641234:0
5340.0006412345:0
5350.00064123456:0
5360.000641234567:0
5370.0006412345678:0
5380.00064123456789:0
5390.1:0
5400.01:0
5410.001:0
5420.0001:0
5430.00001:0
5440.000001:0
5450.0000001:0
5460.00000001:0
5470.000000001:0
5480.0000000001:0
5490.00000000001:0
990fb837 5500.12345:0
5510.123456:0
5520.1234567:0
5530.12345678:0
5540.123456789:0
ee15d750 555&finf
5561:+:inf
5572:-:-inf
5583:abc:inf
56d9de68 559&as_hex
560+inf:inf
561-inf:-inf
562hexNaN:NaN
5630:0x0
5645:0x5
565-5:-0x5
566&as_bin
567+inf:inf
568-inf:-inf
569hexNaN:NaN
5700:0b0
5715:0b101
572-5:-0b101
ee15d750 573&numify
56d9de68 574# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output
ee15d750 5750:0e+1
576+1:1e+0
5771234:1234e+0
578NaN:NaN
579+inf:inf
580-inf:-inf
56d9de68 581-5:-5e+0
582100:1e+2
583-100:-1e+2
ee15d750 584&fnan
585abc:NaN
5862:NaN
587-2:NaN
5880:NaN
589&fone
5902:+:1
591-2:-:-1
592-2:+:1
5932:-:-1
5940::1
595-2::1
596abc::1
5972:abc:1
598&fsstr
599+inf:inf
600-inf:-inf
601abcfsstr:NaN
56d9de68 602-abcfsstr:NaN
ee15d750 6031234.567:1234567e-3
56d9de68 604123:123e+0
605-5:-5e+0
606-100:-1e+2
ee15d750 607&fstr
608+inf:::inf
609-inf:::-inf
610abcfstr:::NaN
6111234.567:9::1234.56700
6121234.567::-6:1234.567000
61312345:5::12345
6140.001234:6::0.00123400
6150.001234::-8:0.00123400
6160:4::0
6170::-4:0.0000
618&fnorm
619inf:inf
620+inf:inf
621-inf:-inf
622+infinity:NaN
623+-inf:NaN
624abc:NaN
625 1 a:NaN
6261bcd2:NaN
62711111b:NaN
628+1z:NaN
629-1z:NaN
aef458a0 6300e999:0
6310e-999:0
632-0e999:0
633-0e-999:0
ee15d750 6340:0
635+0:0
636+00:0
637+0_0_0:0
638000000_0000000_00000:0
639-0:0
640-0000:0
641+1:1
642+01:1
643+001:1
644+00000100000:100000
645123456789:123456789
646-1:-1
647-01:-1
648-001:-1
649-123456789:-123456789
650-00000100000:-100000
651123.456a:NaN
652123.456:123.456
6530.01:0.01
654.002:0.002
655+.2:0.2
656-0.0003:-0.0003
657-.0000000004:-0.0000000004
658123456E2:12345600
659123456E-2:1234.56
660-123456E2:-12345600
661-123456E-2:-1234.56
6621e1:10
6632e-11:0.00000000002
664# excercise _split
665 .02e-1:0.002
666 000001:1
667 -00001:-1
668 -1:-1
669 000.01:0.01
670 -000.0023:-0.0023
671 1.1e1:11
672-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
673-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
674&fpow
9b924220 675NaN:1:NaN
6761:NaN:NaN
677NaN:-1:NaN
678-1:NaN:NaN
679NaN:-21:NaN
680-21:NaN:NaN
681NaN:21:NaN
68221:NaN:NaN
6830:0:1
6840:1:0
6850:9:0
6860:-2:inf
ee15d750 6872:2:4
6881:2:1
6891:3:1
690-1:2:1
691-1:3:-1
692123.456:2:15241.383936
6932:-2:0.25
6942:-3:0.125
695128:-2:0.00006103515625
696abc:123.456:NaN
697123.456:abc:NaN
698+inf:123.45:inf
699-inf:123.45:-inf
700+inf:-123.45:inf
701-inf:-123.45:-inf
9b924220 702-2:2:4
703-2:3:-8
704-2:4:16
705-2:5:-32
706-3:2:9
707-3:3:-27
708-3:4:81
709-3:5:-243
79c55733 710# 2 ** 0.5 == sqrt(2)
711# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0)
7122:0.5:1.41421356237309504880168872420969807857
56b9c951 713#2:0.2:1.148698354997035006798626946777927589444
07d34614 714#6:1.5:14.6969384566990685891837044482353483518
56b9c951 715$div_scale = 20;
716#62.5:12.5:26447206647554886213592.3959144
717$div_scale = 40;
ee15d750 718&fneg
719fnegNaN:NaN
720+inf:-inf
721-inf:inf
722+0:0
723+1:-1
724-1:1
725+123456789:-123456789
726-123456789:123456789
727+123.456789:-123.456789
728-123456.789:123456.789
729&fabs
730fabsNaN:NaN
731+inf:inf
732-inf:inf
733+0:0
734+1:1
735-1:1
736+123456789:123456789
737-123456789:123456789
738+123.456789:123.456789
739-123456.789:123456.789
740&fround
741$round_mode = "trunc"
742+inf:5:inf
743-inf:5:-inf
7440:5:0
745NaNfround:5:NaN
746+10123456789:5:10123000000
747-10123456789:5:-10123000000
748+10123456789.123:5:10123000000
749-10123456789.123:5:-10123000000
750+10123456789:9:10123456700
751-10123456789:9:-10123456700
752+101234500:6:101234000
753-101234500:6:-101234000
754$round_mode = "zero"
755+20123456789:5:20123000000
756-20123456789:5:-20123000000
757+20123456789.123:5:20123000000
758-20123456789.123:5:-20123000000
759+20123456789:9:20123456800
760-20123456789:9:-20123456800
761+201234500:6:201234000
762-201234500:6:-201234000
763$round_mode = "+inf"
764+30123456789:5:30123000000
765-30123456789:5:-30123000000
766+30123456789.123:5:30123000000
767-30123456789.123:5:-30123000000
768+30123456789:9:30123456800
769-30123456789:9:-30123456800
770+301234500:6:301235000
771-301234500:6:-301234000
772$round_mode = "-inf"
773+40123456789:5:40123000000
774-40123456789:5:-40123000000
775+40123456789.123:5:40123000000
776-40123456789.123:5:-40123000000
777+40123456789:9:40123456800
778-40123456789:9:-40123456800
779+401234500:6:401234000
780-401234500:6:-401235000
781$round_mode = "odd"
782+50123456789:5:50123000000
783-50123456789:5:-50123000000
784+50123456789.123:5:50123000000
785-50123456789.123:5:-50123000000
786+50123456789:9:50123456800
787-50123456789:9:-50123456800
788+501234500:6:501235000
789-501234500:6:-501235000
790$round_mode = "even"
791+60123456789:5:60123000000
792-60123456789:5:-60123000000
793+60123456789:9:60123456800
794-60123456789:9:-60123456800
795+601234500:6:601234000
796-601234500:6:-601234000
797+60123456789.0123:5:60123000000
798-60123456789.0123:5:-60123000000
7b29e1e6 799$round_mode = "common"
800+60123456789:5:60123000000
801-60123456789:5:-60123000000
802+60123456789:6:60123500000
803-60123456789:6:-60123500000
804+60123456789:9:60123456800
805-60123456789:9:-60123456800
806+601234500:6:601235000
807-601234500:6:-601235000
808+601234400:6:601234000
809-601234400:6:-601234000
810+601234600:6:601235000
811-601234600:6:-601235000
812+601234300:6:601234000
813+60123456789.0123:5:60123000000
814-60123456789.0123:5:-60123000000
ee15d750 815&ffround
816$round_mode = "trunc"
817+inf:5:inf
818-inf:5:-inf
8190:5:0
820NaNffround:5:NaN
821+1.23:-1:1.2
822+1.234:-1:1.2
823+1.2345:-1:1.2
824+1.23:-2:1.23
825+1.234:-2:1.23
826+1.2345:-2:1.23
827+1.23:-3:1.230
828+1.234:-3:1.234
829+1.2345:-3:1.234
830-1.23:-1:-1.2
831+1.27:-1:1.2
832-1.27:-1:-1.2
833+1.25:-1:1.2
834-1.25:-1:-1.2
835+1.35:-1:1.3
836-1.35:-1:-1.3
837-0.0061234567890:-1:0.0
838-0.0061:-1:0.0
839-0.00612:-1:0.0
840-0.00612:-2:0.00
841-0.006:-1:0.0
842-0.006:-2:0.00
843-0.0006:-2:0.00
844-0.0006:-3:0.000
845-0.0065:-3:/-0\.006|-6e-03
846-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
847-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8480.05:0:0
8490.5:0:0
8500.51:0:0
8510.41:0:0
852$round_mode = "zero"
853+2.23:-1:/2.2(?:0{5}\d+)?
854-2.23:-1:/-2.2(?:0{5}\d+)?
855+2.27:-1:/2.(?:3|29{5}\d+)
856-2.27:-1:/-2.(?:3|29{5}\d+)
857+2.25:-1:/2.2(?:0{5}\d+)?
858-2.25:-1:/-2.2(?:0{5}\d+)?
859+2.35:-1:/2.(?:3|29{5}\d+)
860-2.35:-1:/-2.(?:3|29{5}\d+)
861-0.0065:-1:0.0
862-0.0065:-2:/-0\.01|-1e-02
863-0.0065:-3:/-0\.006|-6e-03
864-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
865-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8660.05:0:0
8670.5:0:0
8680.51:0:1
8690.41:0:0
870$round_mode = "+inf"
871+3.23:-1:/3.2(?:0{5}\d+)?
872-3.23:-1:/-3.2(?:0{5}\d+)?
873+3.27:-1:/3.(?:3|29{5}\d+)
874-3.27:-1:/-3.(?:3|29{5}\d+)
875+3.25:-1:/3.(?:3|29{5}\d+)
876-3.25:-1:/-3.2(?:0{5}\d+)?
877+3.35:-1:/3.(?:4|39{5}\d+)
878-3.35:-1:/-3.(?:3|29{5}\d+)
879-0.0065:-1:0.0
880-0.0065:-2:/-0\.01|-1e-02
881-0.0065:-3:/-0\.006|-6e-03
882-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
883-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8840.05:0:0
8850.5:0:1
8860.51:0:1
8870.41:0:0
888$round_mode = "-inf"
889+4.23:-1:/4.2(?:0{5}\d+)?
890-4.23:-1:/-4.2(?:0{5}\d+)?
891+4.27:-1:/4.(?:3|29{5}\d+)
892-4.27:-1:/-4.(?:3|29{5}\d+)
893+4.25:-1:/4.2(?:0{5}\d+)?
894-4.25:-1:/-4.(?:3|29{5}\d+)
895+4.35:-1:/4.(?:3|29{5}\d+)
896-4.35:-1:/-4.(?:4|39{5}\d+)
897-0.0065:-1:0.0
898-0.0065:-2:/-0\.01|-1e-02
899-0.0065:-3:/-0\.007|-7e-03
900-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
901-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9020.05:0:0
9030.5:0:0
9040.51:0:1
9050.41:0:0
906$round_mode = "odd"
907+5.23:-1:/5.2(?:0{5}\d+)?
908-5.23:-1:/-5.2(?:0{5}\d+)?
909+5.27:-1:/5.(?:3|29{5}\d+)
910-5.27:-1:/-5.(?:3|29{5}\d+)
911+5.25:-1:/5.(?:3|29{5}\d+)
912-5.25:-1:/-5.(?:3|29{5}\d+)
913+5.35:-1:/5.(?:3|29{5}\d+)
914-5.35:-1:/-5.(?:3|29{5}\d+)
915-0.0065:-1:0.0
916-0.0065:-2:/-0\.01|-1e-02
917-0.0065:-3:/-0\.007|-7e-03
918-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
919-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9200.05:0:0
9210.5:0:1
9220.51:0:1
9230.41:0:0
924$round_mode = "even"
925+6.23:-1:/6.2(?:0{5}\d+)?
926-6.23:-1:/-6.2(?:0{5}\d+)?
927+6.27:-1:/6.(?:3|29{5}\d+)
928-6.27:-1:/-6.(?:3|29{5}\d+)
929+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
930-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
931+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
932-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
933-0.0065:-1:0.0
934-0.0065:-2:/-0\.01|-1e-02
935-0.0065:-3:/-0\.006|-7e-03
936-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
937-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9380.05:0:0
9390.5:0:0
9400.51:0:1
9410.41:0:0
9420.01234567:-3:0.012
9430.01234567:-4:0.0123
9440.01234567:-5:0.01235
9450.01234567:-6:0.012346
9460.01234567:-7:0.0123457
9470.01234567:-8:0.01234567
9480.01234567:-9:0.012345670
9490.01234567:-12:0.012345670000
950&fcmp
951fcmpNaN:fcmpNaN:
952fcmpNaN:+0:
953+0:fcmpNaN:
954+0:+0:0
955-1:+0:-1
956+0:-1:1
957+1:+0:1
958+0:+1:-1
959-1:+1:-1
960+1:-1:1
961-1:-1:0
962+1:+1:0
963-1.1:0:-1
964+0:-1.1:1
965+1.1:+0:1
966+0:+1.1:-1
967+123:+123:0
968+123:+12:1
969+12:+123:-1
970-123:-123:0
971-123:-12:-1
972-12:-123:1
973+123:+124:-1
974+124:+123:1
975-123:-124:1
976-124:-123:-1
9770:0.01:-1
9780:0.0001:-1
9790:-0.0001:1
9800:-0.1:1
9810.1:0:1
9820.00001:0:1
983-0.0001:0:-1
984-0.1:0:-1
9850:0.0001234:-1
9860:-0.0001234:1
9870.0001234:0:1
988-0.0001234:0:-1
9890.0001:0.0005:-1
9900.0005:0.0001:1
9910.005:0.0001:1
9920.001:0.0005:1
9930.000001:0.0005:-1
9940.00000123:0.0005:-1
9950.00512:0.0001:1
9960.005:0.000112:1
9970.00123:0.0005:1
9981.5:2:-1
9992:1.5:1
10001.54321:234:-1
1001234:1.54321:1
1002# infinity
1003-inf:5432112345:-1
1004+inf:5432112345:1
1005-inf:-5432112345:-1
1006+inf:-5432112345:1
1007-inf:54321.12345:-1
1008+inf:54321.12345:1
1009-inf:-54321.12345:-1
1010+inf:-54321.12345:1
1011+inf:+inf:0
1012-inf:-inf:0
1013+inf:-inf:1
1014-inf:+inf:-1
1015# return undef
1016+inf:NaN:
1017NaN:inf:
1018-inf:NaN:
1019NaN:-inf:
1020&facmp
1021fcmpNaN:fcmpNaN:
1022fcmpNaN:+0:
1023+0:fcmpNaN:
1024+0:+0:0
1025-1:+0:1
1026+0:-1:-1
1027+1:+0:1
1028+0:+1:-1
1029-1:+1:0
1030+1:-1:0
1031-1:-1:0
1032+1:+1:0
1033-1.1:0:1
1034+0:-1.1:-1
1035+1.1:+0:1
1036+0:+1.1:-1
1037+123:+123:0
1038+123:+12:1
1039+12:+123:-1
1040-123:-123:0
1041-123:-12:1
1042-12:-123:-1
1043+123:+124:-1
1044+124:+123:1
1045-123:-124:-1
1046-124:-123:1
10470:0.01:-1
10480:0.0001:-1
10490:-0.0001:-1
10500:-0.1:-1
10510.1:0:1
10520.00001:0:1
1053-0.0001:0:1
1054-0.1:0:1
10550:0.0001234:-1
10560:-0.0001234:-1
10570.0001234:0:1
1058-0.0001234:0:1
10590.0001:0.0005:-1
10600.0005:0.0001:1
10610.005:0.0001:1
10620.001:0.0005:1
10630.000001:0.0005:-1
10640.00000123:0.0005:-1
10650.00512:0.0001:1
10660.005:0.000112:1
10670.00123:0.0005:1
10681.5:2:-1
10692:1.5:1
10701.54321:234:-1
1071234:1.54321:1
1072# infinity
1073-inf:5432112345:1
1074+inf:5432112345:1
1075-inf:-5432112345:1
1076+inf:-5432112345:1
1077-inf:54321.12345:1
1078+inf:54321.12345:1
1079-inf:-54321.12345:1
1080+inf:-54321.12345:1
1081+inf:+inf:0
1082-inf:-inf:0
1083+inf:-inf:0
1084-inf:+inf:0
48b581a2 10855:inf:-1
1086-1:inf:-1
10875:-inf:-1
1088-1:-inf:-1
ee15d750 1089# return undef
1090+inf:facmpNaN:
1091facmpNaN:inf:
1092-inf:facmpNaN:
1093facmpNaN:-inf:
1094&fdec
1095fdecNaN:NaN
1096+inf:inf
1097-inf:-inf
1098+0:-1
1099+1:0
1100-1:-2
11011.23:0.23
1102-1.23:-2.23
e745a66c 1103100:99
1104101:100
1105-100:-101
1106-99:-100
1107-98:-99
110899:98
ee15d750 1109&finc
1110fincNaN:NaN
1111+inf:inf
1112-inf:-inf
1113+0:1
1114+1:2
1115-1:0
11161.23:2.23
1117-1.23:-0.23
e745a66c 1118100:101
1119-100:-99
1120-99:-98
1121-101:-100
112299:100
ee15d750 1123&fadd
1124abc:abc:NaN
1125abc:+0:NaN
1126+0:abc:NaN
13a12e00 1127+inf:-inf:NaN
1128-inf:+inf:NaN
ee15d750 1129+inf:+inf:inf
1130-inf:-inf:-inf
1131baddNaN:+inf:NaN
1132baddNaN:+inf:NaN
1133+inf:baddNaN:NaN
1134-inf:baddNaN:NaN
1135+0:+0:0
1136+1:+0:1
1137+0:+1:1
1138+1:+1:2
1139-1:+0:-1
1140+0:-1:-1
1141-1:-1:-2
1142-1:+1:0
1143+1:-1:0
1144+9:+1:10
1145+99:+1:100
1146+999:+1:1000
1147+9999:+1:10000
1148+99999:+1:100000
1149+999999:+1:1000000
1150+9999999:+1:10000000
1151+99999999:+1:100000000
1152+999999999:+1:1000000000
1153+9999999999:+1:10000000000
1154+99999999999:+1:100000000000
1155+10:-1:9
1156+100:-1:99
1157+1000:-1:999
1158+10000:-1:9999
1159+100000:-1:99999
1160+1000000:-1:999999
1161+10000000:-1:9999999
1162+100000000:-1:99999999
1163+1000000000:-1:999999999
1164+10000000000:-1:9999999999
1165+123456789:+987654321:1111111110
1166-123456789:+987654321:864197532
1167-123456789:-987654321:-1111111110
1168+123456789:-987654321:-864197532
11690.001234:0.0001234:0.0013574
1170&fsub
1171abc:abc:NaN
1172abc:+0:NaN
1173+0:abc:NaN
1174+inf:-inf:inf
1175-inf:+inf:-inf
13a12e00 1176+inf:+inf:NaN
1177-inf:-inf:NaN
ee15d750 1178baddNaN:+inf:NaN
1179baddNaN:+inf:NaN
1180+inf:baddNaN:NaN
1181-inf:baddNaN:NaN
1182+0:+0:0
1183+1:+0:1
1184+0:+1:-1
1185+1:+1:0
1186-1:+0:-1
1187+0:-1:1
1188-1:-1:0
1189-1:+1:-2
1190+1:-1:2
1191+9:+1:8
1192+99:+1:98
1193+999:+1:998
1194+9999:+1:9998
1195+99999:+1:99998
1196+999999:+1:999998
1197+9999999:+1:9999998
1198+99999999:+1:99999998
1199+999999999:+1:999999998
1200+9999999999:+1:9999999998
1201+99999999999:+1:99999999998
1202+10:-1:11
1203+100:-1:101
1204+1000:-1:1001
1205+10000:-1:10001
1206+100000:-1:100001
1207+1000000:-1:1000001
1208+10000000:-1:10000001
1209+100000000:-1:100000001
1210+1000000000:-1:1000000001
1211+10000000000:-1:10000000001
1212+123456789:+987654321:-864197532
1213-123456789:+987654321:-1111111110
1214-123456789:-987654321:864197532
1215+123456789:-987654321:1111111110
80365507 1216&bmuladd
1217abc:abc:0:NaN
1218abc:+0:0:NaN
1219+0:abc:0:NaN
1220+0:0:abc:NaN
1221NaNmul:+inf:0:NaN
1222NaNmul:-inf:0:NaN
1223-inf:NaNmul:0:NaN
1224+inf:NaNmul:0:NaN
1225+inf:+inf:0:inf
1226+inf:-inf:0:-inf
1227-inf:+inf:0:-inf
1228-inf:-inf:0:inf
1229+0:+0:0:0
1230+0:+1:0:0
1231+1:+0:0:0
1232+0:-1:0:0
1233-1:+0:0:0
1234123456789123456789:0:0:0
12350:123456789123456789:0:0
1236-1:-1:0:1
1237-1:-1:0:1
1238-1:+1:0:-1
1239+1:-1:0:-1
1240+1:+1:0:1
1241+2:+3:0:6
1242-2:+3:0:-6
1243+2:-3:0:-6
1244-2:-3:0:6
1245111:111:0:12321
124610101:10101:0:102030201
12471001001:1001001:0:1002003002001
1248100010001:100010001:0:10002000300020001
124910000100001:10000100001:0:100002000030000200001
125011111111111:9:0:99999999999
125122222222222:9:0:199999999998
125233333333333:9:0:299999999997
125344444444444:9:0:399999999996
125455555555555:9:0:499999999995
125566666666666:9:0:599999999994
125677777777777:9:0:699999999993
125788888888888:9:0:799999999992
125899999999999:9:0:899999999991
125911111111111:9:1:100000000000
126022222222222:9:1:199999999999
126133333333333:9:1:299999999998
126244444444444:9:1:399999999997
126355555555555:9:1:499999999996
126466666666666:9:1:599999999995
126577777777777:9:1:699999999994
126688888888888:9:1:799999999993
126799999999999:9:1:899999999992
1268-3:-4:-5:7
12693:-4:-5:-17
1270-3:4:-5:-17
12713:4:-5:7
1272-3:4:5:-7
12733:-4:5:-7
12749999999999999999999:10000000000000000000:1234567890:99999999999999999990000000001234567890
12753.2:5.7:8.9:27.14
1276-3.2:5.197:6.05:-10.5804
1277&bmodpow
12783:4:8:1
12793:4:7:4
12803:4:7:4
128177777:777:123456789:99995084
12823.2:6.2:5.2:2.970579856718063040273642739529400818
ee15d750 1283&fmul
1284abc:abc:NaN
1285abc:+0:NaN
1286+0:abc:NaN
1287+inf:NaNmul:NaN
1288+inf:NaNmul:NaN
1289NaNmul:+inf:NaN
1290NaNmul:-inf:NaN
1291+inf:+inf:inf
1292+inf:-inf:-inf
1293+inf:-inf:-inf
1294+inf:+inf:inf
1295+inf:123.34:inf
1296+inf:-123.34:-inf
1297-inf:123.34:-inf
1298-inf:-123.34:inf
1299123.34:+inf:inf
1300-123.34:+inf:-inf
1301123.34:-inf:-inf
1302-123.34:-inf:inf
1303+0:+0:0
1304+0:+1:0
1305+1:+0:0
1306+0:-1:0
1307-1:+0:0
1308+123456789123456789:+0:0
1309+0:+123456789123456789:0
1310-1:-1:1
1311-1:+1:-1
1312+1:-1:-1
1313+1:+1:1
1314+2:+3:6
1315-2:+3:-6
1316+2:-3:-6
1317-2:-3:6
1318+111:+111:12321
1319+10101:+10101:102030201
1320+1001001:+1001001:1002003002001
1321+100010001:+100010001:10002000300020001
1322+10000100001:+10000100001:100002000030000200001
1323+11111111111:+9:99999999999
1324+22222222222:+9:199999999998
1325+33333333333:+9:299999999997
1326+44444444444:+9:399999999996
1327+55555555555:+9:499999999995
1328+66666666666:+9:599999999994
1329+77777777777:+9:699999999993
1330+88888888888:+9:799999999992
1331+99999999999:+9:899999999991
13326:120:720
133310:10000:100000
b3abae2a 1334&fdiv-list
13350:0:NaN,NaN
13360:1:0,0
13379:4:2.25,1
13389:5:1.8,4
233f7bc0 1339# bug in v1.74 with bdiv in list context, when $y is 1 or -1
13402.1:-1:-2.1,0
13412.1:1:2.1,0
1342-2.1:-1:2.1,0
1343-2.1:1:-2.1,0
ee15d750 1344&fdiv
1345$div_scale = 40; $round_mode = 'even'
1346abc:abc:NaN
1347abc:+1:abc:NaN
1348+1:abc:NaN
1349-1:abc:NaN
13500:abc:NaN
1351+0:+0:NaN
1352+0:+1:0
1353+1:+0:inf
1354+3214:+0:inf
1355+0:-1:0
1356-1:+0:-inf
1357-3214:+0:-inf
1358+1:+1:1
1359-1:-1:1
1360+1:-1:-1
1361-1:+1:-1
1362+1:+2:0.5
1363+2:+1:2
1364123:+inf:0
1365123:-inf:0
1366+10:+5:2
1367+100:+4:25
1368+1000:+8:125
1369+10000:+16:625
1370+10000:-16:-625
1371+999999999999:+9:111111111111
1372+999999999999:+99:10101010101
1373+999999999999:+999:1001001001
1374+999999999999:+9999:100010001
1375+999999999999999:+99999:10000100001
1376+1000000000:+9:111111111.1111111111111111111111111111111
1377+2000000000:+9:222222222.2222222222222222222222222222222
1378+3000000000:+9:333333333.3333333333333333333333333333333
1379+4000000000:+9:444444444.4444444444444444444444444444444
1380+5000000000:+9:555555555.5555555555555555555555555555556
1381+6000000000:+9:666666666.6666666666666666666666666666667
1382+7000000000:+9:777777777.7777777777777777777777777777778
1383+8000000000:+9:888888888.8888888888888888888888888888889
1384+9000000000:+9:1000000000
1385+35500000:+113:314159.2920353982300884955752212389380531
1386+71000000:+226:314159.2920353982300884955752212389380531
1387+106500000:+339:314159.2920353982300884955752212389380531
1388+1000000000:+3:333333333.3333333333333333333333333333333
13892:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 1390123456:1:123456
ee15d750 1391$div_scale = 20
1392+1000000000:+9:111111111.11111111111
1393+2000000000:+9:222222222.22222222222
1394+3000000000:+9:333333333.33333333333
1395+4000000000:+9:444444444.44444444444
1396+5000000000:+9:555555555.55555555556
1397+6000000000:+9:666666666.66666666667
1398+7000000000:+9:777777777.77777777778
1399+8000000000:+9:888888888.88888888889
1400+9000000000:+9:1000000000
14011:10:0.1
14021:100:0.01
14031:1000:0.001
14041:10000:0.0001
14051:504:0.001984126984126984127
14062:1.987654321:1.0062111801179738436
394e6ffb 1407123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 1408# the next two cases are the "old" behaviour, but are now (>v0.01) different
1409#+35500000:+113:314159.292035398230088
1410#+71000000:+226:314159.292035398230088
1411+35500000:+113:314159.29203539823009
1412+71000000:+226:314159.29203539823009
1413+106500000:+339:314159.29203539823009
1414+1000000000:+3:333333333.33333333333
1415$div_scale = 1
1416# round to accuracy 1 after bdiv
1417+124:+3:40
394e6ffb 1418123456789.1234:1:100000000
ee15d750 1419# reset scale for further tests
1420$div_scale = 40
1421&fmod
61f5c3f5 1422+9:4:1
1423+9:5:4
1424+9000:56:40
1425+56:9000:56
1426# inf handling, see table in doc
14270:inf:0
14280:-inf:0
14295:inf:5
14305:-inf:5
1431-5:inf:-5
1432-5:-inf:-5
1433inf:5:0
1434-inf:5:0
1435inf:-5:0
1436-inf:-5:0
14375:5:0
1438-5:-5:0
b3abae2a 1439inf:inf:NaN
1440-inf:-inf:NaN
1441-inf:inf:NaN
1442inf:-inf:NaN
61f5c3f5 14438:0:8
1444inf:0:inf
1445# exceptions to reminder rule
1446-inf:0:-inf
1447-8:0:-8
14480:0:NaN
1449abc:abc:NaN
1450abc:1:abc:NaN
14511:abc:NaN
14520:0:NaN
14530:1:0
14541:0:1
14550:-1:0
1456-1:0:-1
14571:1:0
1458-1:-1:0
14591:-1:0
1460-1:1:0
14611:2:1
14622:1:0
14631000000000:9:1
14642000000000:9:2
14653000000000:9:3
14664000000000:9:4
14675000000000:9:5
14686000000000:9:6
14697000000000:9:7
14708000000000:9:8
14719000000000:9:0
147235500000:113:33
147371000000:226:66
1474106500000:339:99
14751000000000:3:1
147610:5:0
1477100:4:0
14781000:8:0
147910000:16:0
1480999999999999:9:0
1481999999999999:99:0
1482999999999999:999:0
1483999999999999:9999:0
1484999999999999999:99999:0
1485-9:+5:1
1486+9:-5:-1
1487-9:-5:-4
1488-5:3:1
1489-2:3:1
14904:3:1
14911:3:1
1492-5:-3:-2
1493-2:-3:-2
14944:-3:-2
14951:-3:-2
14964095:4095:0
1497100041000510123:3:0
1498152403346:12345:4321
149987654321:87654321:0
1500# now some floating point tests
1501123:2.5:0.5
15021230:2.5:0
1503123.4:2.5:0.9
1504123e1:25:5
7596a890 1505-2.1:1:0.9
15062.1:1:0.1
1507-2.1:-1:-0.1
15082.1:-1:-0.9
233f7bc0 1509-3:1:0
15103:1:0
1511-3:-1:0
15123:-1:0
b3abae2a 1513&ffac
1514Nanfac:NaN
1515-1:NaN
b282a552 1516+inf:inf
091c87b1 1517-inf:NaN
b3abae2a 15180:1
15191:1
15202:2
15213:6
15224:24
15235:120
15246:720
152510:3628800
152611:39916800
152712:479001600
990fb837 1528&froot
1529# sqrt()
1530+0:2:0
1531+1:2:1
1532-1:2:NaN
1533# -$x ** (1/2) => -$y, but not in froot()
1534-123.456:2:NaN
1535+inf:2:inf
1536-inf:2:NaN
15372:2:1.41421356237309504880168872420969807857
1538-2:2:NaN
15394:2:2
15409:2:3
154116:2:4
1542100:2:10
1543123.456:2:11.11107555549866648462149404118219234119
154415241.38393:2:123.4559999756998444766131352122991626468
15451.44:2:1.2
154612:2:3.464101615137754587054892683011744733886
15470.49:2:0.7
15480.0049:2:0.07
1549# invalid ones
15501:NaN:NaN
1551-1:NaN:NaN
15520:NaN:NaN
1553-inf:NaN:NaN
1554+inf:NaN:NaN
1555NaN:0:NaN
1556NaN:2:NaN
1557NaN:inf:NaN
1558NaN:inf:NaN
155912:-inf:NaN
156012:inf:NaN
1561+0:0:NaN
1562+1:0:NaN
1563-1:0:NaN
1564-2:0:NaN
1565-123.45:0:NaN
1566+inf:0:NaN
156712:1:12
1568-12:1:NaN
15698:-1:NaN
1570-8:-1:NaN
1571# cubic root
15728:3:2
1573-8:3:NaN
1574# fourths root
157516:4:2
157681:4:3
3a427a11 1577# see t/bigroot() for more tests
ee15d750 1578&fsqrt
1579+0:0
1580-1:NaN
1581-2:NaN
1582-16:NaN
1583-123.45:NaN
1584nanfsqrt:NaN
1585+inf:inf
1586-inf:NaN
394e6ffb 15871:1
15882:1.41421356237309504880168872420969807857
15894:2
15909:3
159116:4
1592100:10
1593123.456:11.11107555549866648462149404118219234119
159415241.38393:123.4559999756998444766131352122991626468
15951.44:1.2
1596# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
15971.44E10:120000
15982e10:141421.356237309504880168872420969807857
b3abae2a 1599144e20:120000000000
61f5c3f5 1600# proved to be an endless loop under 7-9
160112:3.464101615137754587054892683011744733886
990fb837 16020.49:0.7
16030.0049:0.07
027dc388 1604&is_nan
1605123:0
1606abc:1
1607NaN:1
1608-123:0
1609&is_inf
1610+inf::1
1611-inf::1
1612abc::0
16131::0
1614NaN::0
1615-1::0
1616+inf:-:0
1617+inf:+:1
1618-inf:-:1
1619-inf:+:0
1620# it must be exactly /^[+-]inf$/
1621+infinity::0
1622-infinity::0
ee15d750 1623&is_odd
1624abc:0
16250:0
1626-1:1
1627-3:1
16281:1
16293:1
16301000001:1
16311000002:0
1632+inf:0
1633-inf:0
1634123.45:0
1635-123.45:0
16362:0
b3abae2a 1637&is_int
1638NaNis_int:0
16390:1
16401:1
16412:1
1642-2:1
1643-1:1
1644-inf:0
1645+inf:0
1646123.4567:0
1647-0.1:0
1648-0.002:0
ee15d750 1649&is_even
1650abc:0
16510:1
1652-1:0
1653-3:0
16541:0
16553:0
16561000001:0
16571000002:1
16582:1
1659+inf:0
1660-inf:0
1661123.456:0
1662-123.456:0
b3abae2a 16630.01:0
1664-0.01:0
1665120:1
16661200:1
1667-1200:1
ee15d750 1668&is_positive
b68b7ab1 16690:0
ee15d750 16701:1
1671-1:0
1672-123:0
1673NaN:0
1674-inf:0
1675+inf:1
1676&is_negative
16770:0
16781:0
1679-1:1
1680-123:1
1681NaN:0
1682-inf:1
1683+inf:0
1684&parts
16850:0 1
16861:1 0
1687123:123 0
1688-123:-123 0
1689-1200:-12 2
1690NaNparts:NaN NaN
1691+inf:inf inf
1692-inf:-inf inf
1693&exponent
16940:1
16951:0
1696123:0
1697-123:0
1698-1200:2
1699+inf:inf
1700-inf:inf
1701NaNexponent:NaN
1702&mantissa
17030:0
17041:1
1705123:123
1706-123:-123
1707-1200:-12
1708+inf:inf
1709-inf:-inf
1710NaNmantissa:NaN
1711&length
1712123:3
1713-123:3
17140:1
17151:1
171612345678901234567890:20
1717&is_zero
1718NaNzero:0
1719+inf:0
1720-inf:0
17210:1
1722-1:0
17231:0
1724&is_one
1725NaNone:0
1726+inf:0
1727-inf:0
17280:0
17292:0
17301:1
1731-1:0
1732-2:0
027dc388 1733&ffloor
ee15d750 17340:0
1735abc:NaN
1736+inf:inf
1737-inf:-inf
17381:1
1739-51:-51
1740-51.2:-52
174112.2:12
990fb837 17420.12345:0
17430.123456:0
17440.1234567:0
17450.12345678:0
17460.123456789:0
027dc388 1747&fceil
ee15d750 17480:0
1749abc:NaN
1750+inf:inf
1751-inf:-inf
17521:1
1753-51:-51
1754-51.2:-51
175512.2:13