Upgrage to bignum-0.21 and Math-BigRat-0.19
[p5sagit/p5-mst-13.2.git] / lib / Math / BigRat / t / bigfltpm.inc
CommitLineData
184f15d5 1#include this file into another test for subclass testing...
2
3ok ($class->config()->{lib},$CL);
4
9b924220 5use strict;
6
bd49aa09 7my $z;
8
184f15d5 9while (<DATA>)
10 {
a4e2b1c6 11 chomp;
184f15d5 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 }
bd49aa09 35 $try = "\$x = $class->new(\"$args[0]\");";
184f15d5 36 if ($f eq "fnorm")
37 {
38 $try .= "\$x;";
39 } elsif ($f eq "finf") {
9b924220 40 $try .= "\$x->finf('$args[1]');";
184f15d5 41 } elsif ($f eq "is_inf") {
42 $try .= "\$x->is_inf('$args[1]');";
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]);";
9b924220 47 $try .= '$x->fstr();';
184f15d5 48 } elsif ($f eq "parts") {
49 # ->bstr() to see if an object is returned
50 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
51 $try .= '"$a $b";';
52 } elsif ($f eq "exponent") {
53 # ->bstr() to see if an object is returned
54 $try .= '$x->exponent()->bstr();';
55 } elsif ($f eq "mantissa") {
56 # ->bstr() to see if an object is returned
57 $try .= '$x->mantissa()->bstr();';
9b924220 58 } elsif ($f =~ /^(numify|length|as_number|as_hex|as_bin)$/) {
59 $try .= "\$x->$f();";
184f15d5 60 # some unary ops (test the fxxx form, since that is done by AUTOLOAD)
61 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
9b924220 62 $try .= "\$x->f$1();";
184f15d5 63 # some is_xxx test function
64 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) {
65 $try .= "\$x->$f();";
184f15d5 66 } elsif ($f eq "finc") {
67 $try .= '++$x;';
68 } elsif ($f eq "fdec") {
69 $try .= '--$x;';
70 }elsif ($f eq "fround") {
9b924220 71 $try .= "$setup; \$x->fround($args[1]);";
184f15d5 72 } elsif ($f eq "ffround") {
9b924220 73 $try .= "$setup; \$x->ffround($args[1]);";
184f15d5 74 } elsif ($f eq "fsqrt") {
9b924220 75 $try .= "$setup; \$x->fsqrt();";
184f15d5 76 } elsif ($f eq "ffac") {
9b924220 77 $try .= "$setup; \$x->ffac();";
78 } elsif ($f eq "flog") {
bd49aa09 79 if (defined $args[1] && $args[1] ne '')
9b924220 80 {
81 $try .= "\$y = $class->new($args[1]);";
82 $try .= "$setup; \$x->flog(\$y);";
83 }
84 else
85 {
86 $try .= "$setup; \$x->flog();";
87 }
184f15d5 88 }
89 else
90 {
9b924220 91 $try .= "\$y = $class->new(\"$args[1]\");";
bd49aa09 92
93 if ($f eq "bgcd")
94 {
95 if (defined $args[2])
96 {
97 $try .= " \$z = $class->new(\"$args[2]\"); ";
98 }
99 $try .= "$class\::bgcd(\$x, \$y";
100 $try .= ", \$z" if (defined $args[2]);
101 $try .= " );";
102 }
103 elsif ($f eq "blcm")
104 {
105 if (defined $args[2])
106 {
107 $try .= " \$z = $class->new(\"$args[2]\"); ";
108 }
109 $try .= "$class\::blcm(\$x, \$y";
110 $try .= ", \$z" if (defined $args[2]);
111 $try .= " );";
112 } elsif ($f eq "fcmp") {
113 $try .= '$x->fcmp($y);';
184f15d5 114 } elsif ($f eq "facmp") {
9b924220 115 $try .= '$x->facmp($y);';
184f15d5 116 } elsif ($f eq "fpow") {
117 $try .= '$x ** $y;';
9b924220 118 } elsif ($f eq "froot") {
119 $try .= "$setup; \$x->froot(\$y);";
184f15d5 120 } elsif ($f eq "fadd") {
121 $try .= '$x + $y;';
122 } elsif ($f eq "fsub") {
123 $try .= '$x - $y;';
124 } elsif ($f eq "fmul") {
125 $try .= '$x * $y;';
126 } elsif ($f eq "fdiv") {
127 $try .= "$setup; \$x / \$y;";
128 } elsif ($f eq "fdiv-list") {
9b924220 129 $try .= "$setup; join(',',\$x->fdiv(\$y));";
184f15d5 130 } elsif ($f eq "frsft") {
131 $try .= '$x >> $y;';
132 } elsif ($f eq "flsft") {
133 $try .= '$x << $y;';
134 } elsif ($f eq "fmod") {
135 $try .= '$x % $y;';
136 } else { warn "Unknown op '$f'"; }
137 }
bd49aa09 138 # print "# Trying: '$try'\n";
184f15d5 139 $ans1 = eval $try;
bd49aa09 140 print "# Error: $@\n" if $@;
184f15d5 141 if ($ans =~ m|^/(.*)$|)
142 {
143 my $pat = $1;
144 if ($ans1 =~ /$pat/)
145 {
146 ok (1,1);
147 }
148 else
149 {
150 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
151 }
152 }
153 else
154 {
155 if ($ans eq "")
156 {
157 ok_undef ($ans1);
158 }
159 else
160 {
161 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
9b924220 162 if (ref($ans1) eq "$class")
163 {
164 # float numbers are normalized (for now), so mantissa shouldn't have
165 # trailing zeros
166 #print $ans1->_trailing_zeros(),"\n";
167 print "# Has trailing zeros after '$try'\n"
bd49aa09 168 if !ok ($CL->_zeros( $ans1->{_m}), 0);
9b924220 169 }
184f15d5 170 }
171 } # end pattern or string
172 }
173 } # end while
174
175# check whether $class->new( Math::BigInt->new()) destroys it
176# ($y == 12 in this case)
177$x = Math::BigInt->new(1200); $y = $class->new($x);
178ok ($y,1200); ok ($x,1200);
179
180###############################################################################
9b924220 181# Really huge, big, ultra-mega-biggy-monster exponents
182# Technically, the exponents should not be limited (they are BigInts), but
183# practically there are a few places were they are limited to a Perl scalar.
184# This is sometimes for speed, sometimes because otherwise the number wouldn't
185# fit into your memory (just think of 1e123456789012345678901234567890 + 1!)
186# anyway. We don't test everything here, but let's make sure it just basically
187# works.
188
bd49aa09 189my $monster = '1e1234567890123456789012345678901234567890';
190
191# new and exponent
192ok ($class->new($monster)->bsstr(),
193 '1e+1234567890123456789012345678901234567890');
194ok ($class->new($monster)->exponent(),
195 '1234567890123456789012345678901234567890');
196# cmp
197ok ($class->new($monster) > 0,1);
198
199# sub/mul
200ok ($class->new($monster)->bsub( $monster),0);
201ok ($class->new($monster)->bmul(2)->bsstr(),
202 '2e+1234567890123456789012345678901234567890');
203
204# mantissa
205$monster = '1234567890123456789012345678901234567890e2';
206ok ($class->new($monster)->mantissa(),
207 '123456789012345678901234567890123456789');
9b924220 208
209###############################################################################
184f15d5 210# zero,inf,one,nan
211
212$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
213$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
214$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
215$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
9b924220 216
217###############################################################################
218# bone/binf etc as plain calls (Lite failed them)
219
220ok ($class->fzero(),0);
221ok ($class->fone(),1);
222ok ($class->fone('+'),1);
223ok ($class->fone('-'),-1);
224ok ($class->fnan(),'NaN');
225ok ($class->finf(),'inf');
226ok ($class->finf('+'),'inf');
227ok ($class->finf('-'),'-inf');
228ok ($class->finf('-inf'),'-inf');
184f15d5 229
9b924220 230$class->accuracy(undef); $class->precision(undef); # reset
231
232###############################################################################
233# bug in bsstr()/numify() showed up in after-rounding in bdiv()
234
235$x = $class->new('0.008'); $y = $class->new(2);
236$x->bdiv(3,$y);
237ok ($x,'0.0027');
238
184f15d5 239###############################################################################
240# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
241# correctly modifies $x
242
184f15d5 243
244$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
245
246$class->precision(undef);
247$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
248
249$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
250
9b924220 251{
252 no strict 'refs';
253 # A and P set => NaN
254 ${${class}.'::accuracy'} = 4; $x = $class->new(12);
255 $x->fsqrt(3); ok ($x,'NaN');
256 # supplied arg overrides set global
257 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
258 $class->accuracy(undef); $class->precision(undef); # reset for further tests
259}
260
261#############################################################################
262# can we call objectify (broken until v1.52)
263
264{
265 no strict;
266 $try =
267 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);';
268 $ans = eval $try;
269 ok ($ans,"$class 4 5");
270}
184f15d5 271
9b924220 272#############################################################################
273# is_one('-') (broken until v1.64)
274
275ok ($class->new(-1)->is_one(),0);
276ok ($class->new(-1)->is_one('-'),1);
184f15d5 277
bd49aa09 278#############################################################################
279# bug 1/0.5 leaving 2e-0 instead of 2e0
280
281ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0');
282
283###############################################################################
284# [perl #30609] bug with $x -= $x not beeing 0, but 2*$x
285
286$x = $class->new(3); $x -= $x; ok ($x, 0);
287$x = $class->new(-3); $x -= $x; ok ($x, 0);
288$x = $class->new(3); $x += $x; ok ($x, 6);
289$x = $class->new(-3); $x += $x; ok ($x, -6);
290
291$x = $class->new('NaN'); $x -= $x; ok ($x->is_nan(), 1);
292$x = $class->new('inf'); $x -= $x; ok ($x->is_nan(), 1);
293$x = $class->new('-inf'); $x -= $x; ok ($x->is_nan(), 1);
294
295$x = $class->new('NaN'); $x += $x; ok ($x->is_nan(), 1);
296$x = $class->new('inf'); $x += $x; ok ($x->is_inf(), 1);
297$x = $class->new('-inf'); $x += $x; ok ($x->is_inf('-'), 1);
298
299$x = $class->new('3.14'); $x -= $x; ok ($x, 0);
300$x = $class->new('-3.14'); $x -= $x; ok ($x, 0);
301$x = $class->new('3.14'); $x += $x; ok ($x, '6.28');
302$x = $class->new('-3.14'); $x += $x; ok ($x, '-6.28');
303
304$x = $class->new('3.14'); $x *= $x; ok ($x, '9.8596');
305$x = $class->new('-3.14'); $x *= $x; ok ($x, '9.8596');
306$x = $class->new('3.14'); $x /= $x; ok ($x, '1');
307$x = $class->new('-3.14'); $x /= $x; ok ($x, '1');
308$x = $class->new('3.14'); $x %= $x; ok ($x, '0');
309$x = $class->new('-3.14'); $x %= $x; ok ($x, '0');
310
311###############################################################################
312# the following two were reported by "kenny" via hotmail.com:
313
314#perl -MMath::BigFloat -wle 'print Math::BigFloat->new(0)->bpow(".1")'
315#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
316
317$x = $class->new(0); $y = $class->new('0.1');
318ok ($x ** $y, 0, 'no warnings and zero result');
319
320#perl -MMath::BigFloat -lwe 'print Math::BigFloat->new(".222222222222222222222222222222222222222222")->bceil()'
321#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851.
322
323$x = $class->new(".222222222222222222222222222222222222222222");
324ok ($x->bceil(), 1, 'no warnings and one as result');
325
326###############################################################################
327# test **=, <<=, >>=
328
329# ((2^148)-1)/17
330$x = $class->new(2); $x **= 148; $x++; $x->bdiv(17, 60)->bfloor(); $x->accuracy(undef);
331ok ($x,"20988936657440586486151264256610222593863921");
332ok ($x->length(),length "20988936657440586486151264256610222593863921");
333
334$x = $class->new('2');
335my $y = $class->new('18');
336ok ($x <<= $y, 2 << 18);
337ok ($x, 2 << 18);
338ok ($x >>= $y, 2);
339ok ($x, 2);
340
341$x = $class->new('2');
342$y = $class->new('18.2');
343$x <<= $y; # 2 * (2 ** 18.2);
344
345ok ($x->copy()->bfround(-9), '602248.763144685');
346ok ($x >>= $y, 2); # 2 * (2 ** 18.2) / (2 ** 18.2) => 2
347ok ($x, 2);
348
184f15d5 3491; # all done
350
351###############################################################################
352# Perl 5.005 does not like ok ($x,undef)
353
354sub ok_undef
355 {
356 my $x = shift;
357
358 ok (1,1) and return if !defined $x;
359 ok ($x,'undef');
360 }
361
362__DATA__
bd49aa09 363&bgcd
364inf:12:NaN
365-inf:12:NaN
36612:inf:NaN
36712:-inf:NaN
368inf:inf:NaN
369inf:-inf:NaN
370-inf:-inf:NaN
371abc:abc:NaN
372abc:+0:NaN
373+0:abc:NaN
374+0:+0:0
375+0:+1:1
376+1:+0:1
377+1:+1:1
378+2:+3:1
379+3:+2:1
380-3:+2:1
381-3:-2:1
382-144:-60:12
383144:-60:12
384144:60:12
385100:625:25
3864096:81:1
3871034:804:2
38827:90:56:1
38927:90:54:9
390&blcm
391abc:abc:NaN
392abc:+0:NaN
393+0:abc:NaN
394+0:+0:NaN
395+1:+0:0
396+0:+1:0
397+27:+90:270
398+1034:+804:415668
184f15d5 399$div_scale = 40;
400&flog
9b924220 4010::NaN
402-1::NaN
403-2::NaN
404# base > 0, base != 1
4052:-1:NaN
4062:0:NaN
4072:1:NaN
408# log(1) is always 1, regardless of $base
4091::0
4101:1:0
4111:2:0
bd49aa09 4122::0.6931471805599453094172321214581765680755
4132.718281828::0.9999999998311266953289851340574956564911
414$div_scale = 20;
4152.718281828::0.99999999983112669533
416$div_scale = 15;
417123::4.81218435537242
41810::2.30258509299405
4191000::6.90775527898214
420100::4.60517018598809
4212::0.693147180559945
4223.1415::1.14470039286086
42312345::9.42100640177928
4240.001::-6.90775527898214
425# bug until v1.71:
42610:10:1
427100:100:1
184f15d5 428# reset for further tests
429$div_scale = 40;
9b924220 4301::0
184f15d5 431&frsft
432NaNfrsft:2:NaN
4330:2:0
4341:1:0.5
4352:1:1
4364:1:2
437123:1:61.5
43832:3:4
439&flsft
440NaNflsft:0:NaN
4412:1:4
4424:3:32
4435:3:40
4441:2:4
4450:5:0
446&fnorm
4471:1
448-0:0
449fnormNaN:NaN
450+inf:inf
451-inf:-inf
452123:123
453-123.4567:-123.4567
454# invalid inputs
4551__2:NaN
4561E1__2:NaN
45711__2E2:NaN
184f15d5 458.2E-3.:NaN
bd49aa09 4591e3e4:NaN
460# strange, but valid
184f15d5 461.2E2:20
bd49aa09 4621.E3:1000
463# some inputs that result in zero
4640e0:0
465+0e0:0
466+0e+0:0
467-0e+0:0
4680e-0:0
469-0e-0:0
470+0e-0:0
471000:0
47200e2:0
47300e02:0
474000e002:0
475000e1230:0
47600e-3:0
47700e+3:0
47800e-03:0
47900e+03:0
480-000:0
481-00e2:0
482-00e02:0
483-000e002:0
484-000e1230:0
485-00e-3:0
486-00e+3:0
487-00e-03:0
488-00e+03:0
184f15d5 489&as_number
4900:0
4911:1
4921.2:1
4932.345:2
494-2:-2
495-123.456:-123
496-200:-200
9b924220 497# test for bug in brsft() not handling cases that return 0
4980.000641:0
4990.0006412:0
5000.00064123:0
5010.000641234:0
5020.0006412345:0
5030.00064123456:0
5040.000641234567:0
5050.0006412345678:0
5060.00064123456789:0
5070.1:0
5080.01:0
5090.001:0
5100.0001:0
5110.00001:0
5120.000001:0
5130.0000001:0
5140.00000001:0
5150.000000001:0
5160.0000000001:0
5170.00000000001:0
5180.12345:0
5190.123456:0
5200.1234567:0
5210.12345678:0
5220.123456789:0
184f15d5 523&finf
5241:+:inf
5252:-:-inf
5263:abc:inf
9b924220 527&as_hex
528+inf:inf
529-inf:-inf
530hexNaN:NaN
5310:0x0
5325:0x5
533-5:-0x5
534&as_bin
535+inf:inf
536-inf:-inf
537hexNaN:NaN
5380:0b0
5395:0b101
540-5:-0b101
184f15d5 541&numify
9b924220 542# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output
184f15d5 5430:0e+1
544+1:1e+0
5451234:1234e+0
546NaN:NaN
547+inf:inf
548-inf:-inf
9b924220 549-5:-5e+0
550100:1e+2
551-100:-1e+2
184f15d5 552&fnan
553abc:NaN
5542:NaN
555-2:NaN
5560:NaN
557&fone
5582:+:1
559-2:-:-1
560-2:+:1
5612:-:-1
5620::1
563-2::1
564abc::1
5652:abc:1
566&fsstr
567+inf:inf
568-inf:-inf
569abcfsstr:NaN
9b924220 570-abcfsstr:NaN
184f15d5 5711234.567:1234567e-3
9b924220 572123:123e+0
573-5:-5e+0
574-100:-1e+2
184f15d5 575&fstr
576+inf:::inf
577-inf:::-inf
578abcfstr:::NaN
5791234.567:9::1234.56700
5801234.567::-6:1234.567000
58112345:5::12345
5820.001234:6::0.00123400
5830.001234::-8:0.00123400
5840:4::0
5850::-4:0.0000
586&fnorm
587inf:inf
588+inf:inf
589-inf:-inf
590+infinity:NaN
591+-inf:NaN
592abc:NaN
593 1 a:NaN
5941bcd2:NaN
59511111b:NaN
596+1z:NaN
597-1z:NaN
9b924220 5980e999:0
5990e-999:0
600-0e999:0
601-0e-999:0
184f15d5 6020:0
603+0:0
604+00:0
605+0_0_0:0
606000000_0000000_00000:0
607-0:0
608-0000:0
609+1:1
610+01:1
611+001:1
612+00000100000:100000
613123456789:123456789
614-1:-1
615-01:-1
616-001:-1
617-123456789:-123456789
618-00000100000:-100000
619123.456a:NaN
620123.456:123.456
6210.01:0.01
622.002:0.002
623+.2:0.2
624-0.0003:-0.0003
625-.0000000004:-0.0000000004
626123456E2:12345600
627123456E-2:1234.56
628-123456E2:-12345600
629-123456E-2:-1234.56
6301e1:10
6312e-11:0.00000000002
632# excercise _split
633 .02e-1:0.002
634 000001:1
635 -00001:-1
636 -1:-1
637 000.01:0.01
638 -000.0023:-0.0023
639 1.1e1:11
640-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
641-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
642&fpow
bd49aa09 643NaN:1:NaN
6441:NaN:NaN
645NaN:-1:NaN
646-1:NaN:NaN
647NaN:-21:NaN
648-21:NaN:NaN
649NaN:21:NaN
65021:NaN:NaN
6510:0:1
6520:1:0
6530:9:0
6540:-2:inf
184f15d5 6552:2:4
6561:2:1
6571:3:1
658-1:2:1
659-1:3:-1
660123.456:2:15241.383936
6612:-2:0.25
6622:-3:0.125
663128:-2:0.00006103515625
664abc:123.456:NaN
665123.456:abc:NaN
666+inf:123.45:inf
667-inf:123.45:-inf
668+inf:-123.45:inf
669-inf:-123.45:-inf
bd49aa09 670-2:2:4
671-2:3:-8
672-2:4:16
673-2:5:-32
674-3:2:9
675-3:3:-27
676-3:4:81
677-3:5:-243
9b924220 678# 2 ** 0.5 == sqrt(2)
679# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0)
6802:0.5:1.41421356237309504880168872420969807857
681#2:0.2:1.148698354997035006798626946777927589444
682#6:1.5:14.6969384566990685891837044482353483518
683$div_scale = 20;
684#62.5:12.5:26447206647554886213592.3959144
685$div_scale = 40;
184f15d5 686&fneg
687fnegNaN:NaN
688+inf:-inf
689-inf:inf
690+0:0
691+1:-1
692-1:1
693+123456789:-123456789
694-123456789:123456789
695+123.456789:-123.456789
696-123456.789:123456.789
697&fabs
698fabsNaN:NaN
699+inf:inf
700-inf:inf
701+0:0
702+1:1
703-1:1
704+123456789:123456789
705-123456789:123456789
706+123.456789:123.456789
707-123456.789:123456.789
708&fround
709$round_mode = "trunc"
710+inf:5:inf
711-inf:5:-inf
7120:5:0
713NaNfround:5:NaN
714+10123456789:5:10123000000
715-10123456789:5:-10123000000
716+10123456789.123:5:10123000000
717-10123456789.123:5:-10123000000
718+10123456789:9:10123456700
719-10123456789:9:-10123456700
720+101234500:6:101234000
721-101234500:6:-101234000
722$round_mode = "zero"
723+20123456789:5:20123000000
724-20123456789:5:-20123000000
725+20123456789.123:5:20123000000
726-20123456789.123:5:-20123000000
727+20123456789:9:20123456800
728-20123456789:9:-20123456800
729+201234500:6:201234000
730-201234500:6:-201234000
731$round_mode = "+inf"
732+30123456789:5:30123000000
733-30123456789:5:-30123000000
734+30123456789.123:5:30123000000
735-30123456789.123:5:-30123000000
736+30123456789:9:30123456800
737-30123456789:9:-30123456800
738+301234500:6:301235000
739-301234500:6:-301234000
740$round_mode = "-inf"
741+40123456789:5:40123000000
742-40123456789:5:-40123000000
743+40123456789.123:5:40123000000
744-40123456789.123:5:-40123000000
745+40123456789:9:40123456800
746-40123456789:9:-40123456800
747+401234500:6:401234000
748-401234500:6:-401235000
749$round_mode = "odd"
750+50123456789:5:50123000000
751-50123456789:5:-50123000000
752+50123456789.123:5:50123000000
753-50123456789.123:5:-50123000000
754+50123456789:9:50123456800
755-50123456789:9:-50123456800
756+501234500:6:501235000
757-501234500:6:-501235000
758$round_mode = "even"
759+60123456789:5:60123000000
760-60123456789:5:-60123000000
761+60123456789:9:60123456800
762-60123456789:9:-60123456800
763+601234500:6:601234000
764-601234500:6:-601234000
765+60123456789.0123:5:60123000000
766-60123456789.0123:5:-60123000000
bd49aa09 767$round_mode = "common"
768+60123456789:5:60123000000
769-60123456789:5:-60123000000
770+60123456789:6:60123500000
771-60123456789:6:-60123500000
772+60123456789:9:60123456800
773-60123456789:9:-60123456800
774+601234500:6:601235000
775-601234500:6:-601235000
776+601234400:6:601234000
777-601234400:6:-601234000
778+601234600:6:601235000
779-601234600:6:-601235000
780+601234300:6:601234000
781+60123456789.0123:5:60123000000
782-60123456789.0123:5:-60123000000
184f15d5 783&ffround
784$round_mode = "trunc"
785+inf:5:inf
786-inf:5:-inf
7870:5:0
788NaNffround:5:NaN
789+1.23:-1:1.2
790+1.234:-1:1.2
791+1.2345:-1:1.2
792+1.23:-2:1.23
793+1.234:-2:1.23
794+1.2345:-2:1.23
795+1.23:-3:1.230
796+1.234:-3:1.234
797+1.2345:-3:1.234
798-1.23:-1:-1.2
799+1.27:-1:1.2
800-1.27:-1:-1.2
801+1.25:-1:1.2
802-1.25:-1:-1.2
803+1.35:-1:1.3
804-1.35:-1:-1.3
805-0.0061234567890:-1:0.0
806-0.0061:-1:0.0
807-0.00612:-1:0.0
808-0.00612:-2:0.00
809-0.006:-1:0.0
810-0.006:-2:0.00
811-0.0006:-2:0.00
812-0.0006:-3:0.000
813-0.0065:-3:/-0\.006|-6e-03
814-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
815-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8160.05:0:0
8170.5:0:0
8180.51:0:0
8190.41:0:0
820$round_mode = "zero"
821+2.23:-1:/2.2(?:0{5}\d+)?
822-2.23:-1:/-2.2(?:0{5}\d+)?
823+2.27:-1:/2.(?:3|29{5}\d+)
824-2.27:-1:/-2.(?:3|29{5}\d+)
825+2.25:-1:/2.2(?:0{5}\d+)?
826-2.25:-1:/-2.2(?:0{5}\d+)?
827+2.35:-1:/2.(?:3|29{5}\d+)
828-2.35:-1:/-2.(?:3|29{5}\d+)
829-0.0065:-1:0.0
830-0.0065:-2:/-0\.01|-1e-02
831-0.0065:-3:/-0\.006|-6e-03
832-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
833-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8340.05:0:0
8350.5:0:0
8360.51:0:1
8370.41:0:0
838$round_mode = "+inf"
839+3.23:-1:/3.2(?:0{5}\d+)?
840-3.23:-1:/-3.2(?:0{5}\d+)?
841+3.27:-1:/3.(?:3|29{5}\d+)
842-3.27:-1:/-3.(?:3|29{5}\d+)
843+3.25:-1:/3.(?:3|29{5}\d+)
844-3.25:-1:/-3.2(?:0{5}\d+)?
845+3.35:-1:/3.(?:4|39{5}\d+)
846-3.35:-1:/-3.(?:3|29{5}\d+)
847-0.0065:-1:0.0
848-0.0065:-2:/-0\.01|-1e-02
849-0.0065:-3:/-0\.006|-6e-03
850-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
851-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8520.05:0:0
8530.5:0:1
8540.51:0:1
8550.41:0:0
856$round_mode = "-inf"
857+4.23:-1:/4.2(?:0{5}\d+)?
858-4.23:-1:/-4.2(?:0{5}\d+)?
859+4.27:-1:/4.(?:3|29{5}\d+)
860-4.27:-1:/-4.(?:3|29{5}\d+)
861+4.25:-1:/4.2(?:0{5}\d+)?
862-4.25:-1:/-4.(?:3|29{5}\d+)
863+4.35:-1:/4.(?:3|29{5}\d+)
864-4.35:-1:/-4.(?:4|39{5}\d+)
865-0.0065:-1:0.0
866-0.0065:-2:/-0\.01|-1e-02
867-0.0065:-3:/-0\.007|-7e-03
868-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
869-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8700.05:0:0
8710.5:0:0
8720.51:0:1
8730.41:0:0
874$round_mode = "odd"
875+5.23:-1:/5.2(?:0{5}\d+)?
876-5.23:-1:/-5.2(?:0{5}\d+)?
877+5.27:-1:/5.(?:3|29{5}\d+)
878-5.27:-1:/-5.(?:3|29{5}\d+)
879+5.25:-1:/5.(?:3|29{5}\d+)
880-5.25:-1:/-5.(?:3|29{5}\d+)
881+5.35:-1:/5.(?:3|29{5}\d+)
882-5.35:-1:/-5.(?:3|29{5}\d+)
883-0.0065:-1:0.0
884-0.0065:-2:/-0\.01|-1e-02
885-0.0065:-3:/-0\.007|-7e-03
886-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
887-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8880.05:0:0
8890.5:0:1
8900.51:0:1
8910.41:0:0
892$round_mode = "even"
893+6.23:-1:/6.2(?:0{5}\d+)?
894-6.23:-1:/-6.2(?:0{5}\d+)?
895+6.27:-1:/6.(?:3|29{5}\d+)
896-6.27:-1:/-6.(?:3|29{5}\d+)
897+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
898-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
899+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
900-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
901-0.0065:-1:0.0
902-0.0065:-2:/-0\.01|-1e-02
903-0.0065:-3:/-0\.006|-7e-03
904-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
905-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
9060.05:0:0
9070.5:0:0
9080.51:0:1
9090.41:0:0
9100.01234567:-3:0.012
9110.01234567:-4:0.0123
9120.01234567:-5:0.01235
9130.01234567:-6:0.012346
9140.01234567:-7:0.0123457
9150.01234567:-8:0.01234567
9160.01234567:-9:0.012345670
9170.01234567:-12:0.012345670000
918&fcmp
919fcmpNaN:fcmpNaN:
920fcmpNaN:+0:
921+0:fcmpNaN:
922+0:+0:0
923-1:+0:-1
924+0:-1:1
925+1:+0:1
926+0:+1:-1
927-1:+1:-1
928+1:-1:1
929-1:-1:0
930+1:+1:0
931-1.1:0:-1
932+0:-1.1:1
933+1.1:+0:1
934+0:+1.1:-1
935+123:+123:0
936+123:+12:1
937+12:+123:-1
938-123:-123:0
939-123:-12:-1
940-12:-123:1
941+123:+124:-1
942+124:+123:1
943-123:-124:1
944-124:-123:-1
9450:0.01:-1
9460:0.0001:-1
9470:-0.0001:1
9480:-0.1:1
9490.1:0:1
9500.00001:0:1
951-0.0001:0:-1
952-0.1:0:-1
9530:0.0001234:-1
9540:-0.0001234:1
9550.0001234:0:1
956-0.0001234:0:-1
9570.0001:0.0005:-1
9580.0005:0.0001:1
9590.005:0.0001:1
9600.001:0.0005:1
9610.000001:0.0005:-1
9620.00000123:0.0005:-1
9630.00512:0.0001:1
9640.005:0.000112:1
9650.00123:0.0005:1
9661.5:2:-1
9672:1.5:1
9681.54321:234:-1
969234:1.54321:1
970# infinity
971-inf:5432112345:-1
972+inf:5432112345:1
973-inf:-5432112345:-1
974+inf:-5432112345:1
975-inf:54321.12345:-1
976+inf:54321.12345:1
977-inf:-54321.12345:-1
978+inf:-54321.12345:1
979+inf:+inf:0
980-inf:-inf:0
981+inf:-inf:1
982-inf:+inf:-1
983# return undef
984+inf:NaN:
985NaN:inf:
986-inf:NaN:
987NaN:-inf:
988&facmp
989fcmpNaN:fcmpNaN:
990fcmpNaN:+0:
991+0:fcmpNaN:
992+0:+0:0
993-1:+0:1
994+0:-1:-1
995+1:+0:1
996+0:+1:-1
997-1:+1:0
998+1:-1:0
999-1:-1:0
1000+1:+1:0
1001-1.1:0:1
1002+0:-1.1:-1
1003+1.1:+0:1
1004+0:+1.1:-1
1005+123:+123:0
1006+123:+12:1
1007+12:+123:-1
1008-123:-123:0
1009-123:-12:1
1010-12:-123:-1
1011+123:+124:-1
1012+124:+123:1
1013-123:-124:-1
1014-124:-123:1
10150:0.01:-1
10160:0.0001:-1
10170:-0.0001:-1
10180:-0.1:-1
10190.1:0:1
10200.00001:0:1
1021-0.0001:0:1
1022-0.1:0:1
10230:0.0001234:-1
10240:-0.0001234:-1
10250.0001234:0:1
1026-0.0001234:0:1
10270.0001:0.0005:-1
10280.0005:0.0001:1
10290.005:0.0001:1
10300.001:0.0005:1
10310.000001:0.0005:-1
10320.00000123:0.0005:-1
10330.00512:0.0001:1
10340.005:0.000112:1
10350.00123:0.0005:1
10361.5:2:-1
10372:1.5:1
10381.54321:234:-1
1039234:1.54321:1
1040# infinity
1041-inf:5432112345:1
1042+inf:5432112345:1
1043-inf:-5432112345:1
1044+inf:-5432112345:1
1045-inf:54321.12345:1
1046+inf:54321.12345:1
1047-inf:-54321.12345:1
1048+inf:-54321.12345:1
1049+inf:+inf:0
1050-inf:-inf:0
1051+inf:-inf:0
1052-inf:+inf:0
10535:inf:-1
1054-1:inf:-1
10555:-inf:-1
1056-1:-inf:-1
1057# return undef
1058+inf:facmpNaN:
1059facmpNaN:inf:
1060-inf:facmpNaN:
1061facmpNaN:-inf:
1062&fdec
1063fdecNaN:NaN
1064+inf:inf
1065-inf:-inf
1066+0:-1
1067+1:0
1068-1:-2
10691.23:0.23
1070-1.23:-2.23
1071100:99
1072101:100
1073-100:-101
1074-99:-100
1075-98:-99
107699:98
1077&finc
1078fincNaN:NaN
1079+inf:inf
1080-inf:-inf
1081+0:1
1082+1:2
1083-1:0
10841.23:2.23
1085-1.23:-0.23
1086100:101
1087-100:-99
1088-99:-98
1089-101:-100
109099:100
1091&fadd
1092abc:abc:NaN
1093abc:+0:NaN
1094+0:abc:NaN
9b924220 1095+inf:-inf:NaN
1096-inf:+inf:NaN
184f15d5 1097+inf:+inf:inf
1098-inf:-inf:-inf
1099baddNaN:+inf:NaN
1100baddNaN:+inf:NaN
1101+inf:baddNaN:NaN
1102-inf:baddNaN:NaN
1103+0:+0:0
1104+1:+0:1
1105+0:+1:1
1106+1:+1:2
1107-1:+0:-1
1108+0:-1:-1
1109-1:-1:-2
1110-1:+1:0
1111+1:-1:0
1112+9:+1:10
1113+99:+1:100
1114+999:+1:1000
1115+9999:+1:10000
1116+99999:+1:100000
1117+999999:+1:1000000
1118+9999999:+1:10000000
1119+99999999:+1:100000000
1120+999999999:+1:1000000000
1121+9999999999:+1:10000000000
1122+99999999999:+1:100000000000
1123+10:-1:9
1124+100:-1:99
1125+1000:-1:999
1126+10000:-1:9999
1127+100000:-1:99999
1128+1000000:-1:999999
1129+10000000:-1:9999999
1130+100000000:-1:99999999
1131+1000000000:-1:999999999
1132+10000000000:-1:9999999999
1133+123456789:+987654321:1111111110
1134-123456789:+987654321:864197532
1135-123456789:-987654321:-1111111110
1136+123456789:-987654321:-864197532
11370.001234:0.0001234:0.0013574
1138&fsub
1139abc:abc:NaN
1140abc:+0:NaN
1141+0:abc:NaN
1142+inf:-inf:inf
1143-inf:+inf:-inf
9b924220 1144+inf:+inf:NaN
1145-inf:-inf:NaN
184f15d5 1146baddNaN:+inf:NaN
1147baddNaN:+inf:NaN
1148+inf:baddNaN:NaN
1149-inf:baddNaN:NaN
1150+0:+0:0
1151+1:+0:1
1152+0:+1:-1
1153+1:+1:0
1154-1:+0:-1
1155+0:-1:1
1156-1:-1:0
1157-1:+1:-2
1158+1:-1:2
1159+9:+1:8
1160+99:+1:98
1161+999:+1:998
1162+9999:+1:9998
1163+99999:+1:99998
1164+999999:+1:999998
1165+9999999:+1:9999998
1166+99999999:+1:99999998
1167+999999999:+1:999999998
1168+9999999999:+1:9999999998
1169+99999999999:+1:99999999998
1170+10:-1:11
1171+100:-1:101
1172+1000:-1:1001
1173+10000:-1:10001
1174+100000:-1:100001
1175+1000000:-1:1000001
1176+10000000:-1:10000001
1177+100000000:-1:100000001
1178+1000000000:-1:1000000001
1179+10000000000:-1:10000000001
1180+123456789:+987654321:-864197532
1181-123456789:+987654321:-1111111110
1182-123456789:-987654321:864197532
1183+123456789:-987654321:1111111110
1184&fmul
1185abc:abc:NaN
1186abc:+0:NaN
1187+0:abc:NaN
1188+inf:NaNmul:NaN
1189+inf:NaNmul:NaN
1190NaNmul:+inf:NaN
1191NaNmul:-inf:NaN
1192+inf:+inf:inf
1193+inf:-inf:-inf
1194+inf:-inf:-inf
1195+inf:+inf:inf
1196+inf:123.34:inf
1197+inf:-123.34:-inf
1198-inf:123.34:-inf
1199-inf:-123.34:inf
1200123.34:+inf:inf
1201-123.34:+inf:-inf
1202123.34:-inf:-inf
1203-123.34:-inf:inf
1204+0:+0:0
1205+0:+1:0
1206+1:+0:0
1207+0:-1:0
1208-1:+0:0
1209+123456789123456789:+0:0
1210+0:+123456789123456789:0
1211-1:-1:1
1212-1:+1:-1
1213+1:-1:-1
1214+1:+1:1
1215+2:+3:6
1216-2:+3:-6
1217+2:-3:-6
1218-2:-3:6
1219+111:+111:12321
1220+10101:+10101:102030201
1221+1001001:+1001001:1002003002001
1222+100010001:+100010001:10002000300020001
1223+10000100001:+10000100001:100002000030000200001
1224+11111111111:+9:99999999999
1225+22222222222:+9:199999999998
1226+33333333333:+9:299999999997
1227+44444444444:+9:399999999996
1228+55555555555:+9:499999999995
1229+66666666666:+9:599999999994
1230+77777777777:+9:699999999993
1231+88888888888:+9:799999999992
1232+99999999999:+9:899999999991
12336:120:720
123410:10000:100000
1235&fdiv-list
12360:0:NaN,NaN
12370:1:0,0
12389:4:2.25,1
12399:5:1.8,4
bd49aa09 1240# bug in v1.74 with bdiv in list context, when $y is 1 or -1
12412.1:-1:-2.1,0
12422.1:1:2.1,0
1243-2.1:-1:2.1,0
1244-2.1:1:-2.1,0
184f15d5 1245&fdiv
1246$div_scale = 40; $round_mode = 'even'
1247abc:abc:NaN
1248abc:+1:abc:NaN
1249+1:abc:NaN
1250-1:abc:NaN
12510:abc:NaN
1252+0:+0:NaN
1253+0:+1:0
1254+1:+0:inf
1255+3214:+0:inf
1256+0:-1:0
1257-1:+0:-inf
1258-3214:+0:-inf
1259+1:+1:1
1260-1:-1:1
1261+1:-1:-1
1262-1:+1:-1
1263+1:+2:0.5
1264+2:+1:2
1265123:+inf:0
1266123:-inf:0
1267+10:+5:2
1268+100:+4:25
1269+1000:+8:125
1270+10000:+16:625
1271+10000:-16:-625
1272+999999999999:+9:111111111111
1273+999999999999:+99:10101010101
1274+999999999999:+999:1001001001
1275+999999999999:+9999:100010001
1276+999999999999999:+99999:10000100001
1277+1000000000:+9:111111111.1111111111111111111111111111111
1278+2000000000:+9:222222222.2222222222222222222222222222222
1279+3000000000:+9:333333333.3333333333333333333333333333333
1280+4000000000:+9:444444444.4444444444444444444444444444444
1281+5000000000:+9:555555555.5555555555555555555555555555556
1282+6000000000:+9:666666666.6666666666666666666666666666667
1283+7000000000:+9:777777777.7777777777777777777777777777778
1284+8000000000:+9:888888888.8888888888888888888888888888889
1285+9000000000:+9:1000000000
1286+35500000:+113:314159.2920353982300884955752212389380531
1287+71000000:+226:314159.2920353982300884955752212389380531
1288+106500000:+339:314159.2920353982300884955752212389380531
1289+1000000000:+3:333333333.3333333333333333333333333333333
12902:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
1291123456:1:123456
1292$div_scale = 20
1293+1000000000:+9:111111111.11111111111
1294+2000000000:+9:222222222.22222222222
1295+3000000000:+9:333333333.33333333333
1296+4000000000:+9:444444444.44444444444
1297+5000000000:+9:555555555.55555555556
1298+6000000000:+9:666666666.66666666667
1299+7000000000:+9:777777777.77777777778
1300+8000000000:+9:888888888.88888888889
1301+9000000000:+9:1000000000
13021:10:0.1
13031:100:0.01
13041:1000:0.001
13051:10000:0.0001
13061:504:0.001984126984126984127
13072:1.987654321:1.0062111801179738436
1308123456789.123456789123456789123456789:1:123456789.12345678912
1309# the next two cases are the "old" behaviour, but are now (>v0.01) different
1310#+35500000:+113:314159.292035398230088
1311#+71000000:+226:314159.292035398230088
1312+35500000:+113:314159.29203539823009
1313+71000000:+226:314159.29203539823009
1314+106500000:+339:314159.29203539823009
1315+1000000000:+3:333333333.33333333333
1316$div_scale = 1
1317# round to accuracy 1 after bdiv
1318+124:+3:40
1319123456789.1234:1:100000000
1320# reset scale for further tests
1321$div_scale = 40
1322&fmod
1323+9:4:1
1324+9:5:4
1325+9000:56:40
1326+56:9000:56
1327# inf handling, see table in doc
13280:inf:0
13290:-inf:0
13305:inf:5
13315:-inf:5
1332-5:inf:-5
1333-5:-inf:-5
1334inf:5:0
1335-inf:5:0
1336inf:-5:0
1337-inf:-5:0
13385:5:0
1339-5:-5:0
1340inf:inf:NaN
1341-inf:-inf:NaN
1342-inf:inf:NaN
1343inf:-inf:NaN
13448:0:8
1345inf:0:inf
1346# exceptions to reminder rule
1347-inf:0:-inf
1348-8:0:-8
13490:0:NaN
1350abc:abc:NaN
1351abc:1:abc:NaN
13521:abc:NaN
13530:0:NaN
13540:1:0
13551:0:1
13560:-1:0
1357-1:0:-1
13581:1:0
1359-1:-1:0
13601:-1:0
1361-1:1:0
13621:2:1
13632:1:0
13641000000000:9:1
13652000000000:9:2
13663000000000:9:3
13674000000000:9:4
13685000000000:9:5
13696000000000:9:6
13707000000000:9:7
13718000000000:9:8
13729000000000:9:0
137335500000:113:33
137471000000:226:66
1375106500000:339:99
13761000000000:3:1
137710:5:0
1378100:4:0
13791000:8:0
138010000:16:0
1381999999999999:9:0
1382999999999999:99:0
1383999999999999:999:0
1384999999999999:9999:0
1385999999999999999:99999:0
1386-9:+5:1
1387+9:-5:-1
1388-9:-5:-4
1389-5:3:1
1390-2:3:1
13914:3:1
13921:3:1
1393-5:-3:-2
1394-2:-3:-2
13954:-3:-2
13961:-3:-2
13974095:4095:0
1398100041000510123:3:0
1399152403346:12345:4321
140087654321:87654321:0
1401# now some floating point tests
9b924220 1402123:2.5:0.5
14031230:2.5:0
1404123.4:2.5:0.9
1405123e1:25:5
bd49aa09 1406-2.1:1:0.9
14072.1:1:0.1
1408-2.1:-1:-0.1
14092.1:-1:-0.9
1410-3:1:0
14113:1:0
1412-3:-1:0
14133:-1:0
184f15d5 1414&ffac
1415Nanfac:NaN
1416-1:NaN
9b924220 1417+inf:inf
1418-inf:NaN
184f15d5 14190:1
14201:1
14212:2
14223:6
14234:24
14245:120
14256:720
142610:3628800
142711:39916800
142812:479001600
9b924220 1429&froot
1430# sqrt()
1431+0:2:0
1432+1:2:1
1433-1:2:NaN
1434# -$x ** (1/2) => -$y, but not in froot()
1435-123.456:2:NaN
1436+inf:2:inf
1437-inf:2:NaN
14382:2:1.41421356237309504880168872420969807857
1439-2:2:NaN
14404:2:2
14419:2:3
144216:2:4
1443100:2:10
1444123.456:2:11.11107555549866648462149404118219234119
144515241.38393:2:123.4559999756998444766131352122991626468
14461.44:2:1.2
144712:2:3.464101615137754587054892683011744733886
14480.49:2:0.7
14490.0049:2:0.07
1450# invalid ones
14511:NaN:NaN
1452-1:NaN:NaN
14530:NaN:NaN
1454-inf:NaN:NaN
1455+inf:NaN:NaN
1456NaN:0:NaN
1457NaN:2:NaN
1458NaN:inf:NaN
1459NaN:inf:NaN
146012:-inf:NaN
146112:inf:NaN
1462+0:0:NaN
1463+1:0:NaN
1464-1:0:NaN
1465-2:0:NaN
1466-123.45:0:NaN
1467+inf:0:NaN
146812:1:12
1469-12:1:NaN
14708:-1:NaN
1471-8:-1:NaN
1472# cubic root
14738:3:2
1474-8:3:NaN
1475# fourths root
147616:4:2
147781:4:3
1478# see t/bigroot() for more tests
184f15d5 1479&fsqrt
1480+0:0
1481-1:NaN
1482-2:NaN
1483-16:NaN
1484-123.45:NaN
1485nanfsqrt:NaN
1486+inf:inf
1487-inf:NaN
14881:1
14892:1.41421356237309504880168872420969807857
14904:2
14919:3
149216:4
1493100:10
1494123.456:11.11107555549866648462149404118219234119
149515241.38393:123.4559999756998444766131352122991626468
14961.44:1.2
1497# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
14981.44E10:120000
14992e10:141421.356237309504880168872420969807857
1500144e20:120000000000
1501# proved to be an endless loop under 7-9
150212:3.464101615137754587054892683011744733886
9b924220 15030.49:0.7
15040.0049:0.07
184f15d5 1505&is_nan
1506123:0
1507abc:1
1508NaN:1
1509-123:0
1510&is_inf
1511+inf::1
1512-inf::1
1513abc::0
15141::0
1515NaN::0
1516-1::0
1517+inf:-:0
1518+inf:+:1
1519-inf:-:1
1520-inf:+:0
1521# it must be exactly /^[+-]inf$/
1522+infinity::0
1523-infinity::0
1524&is_odd
1525abc:0
15260:0
1527-1:1
1528-3:1
15291:1
15303:1
15311000001:1
15321000002:0
1533+inf:0
1534-inf:0
1535123.45:0
1536-123.45:0
15372:0
1538&is_int
1539NaNis_int:0
15400:1
15411:1
15422:1
1543-2:1
1544-1:1
1545-inf:0
1546+inf:0
1547123.4567:0
1548-0.1:0
1549-0.002:0
1550&is_even
1551abc:0
15520:1
1553-1:0
1554-3:0
15551:0
15563:0
15571000001:0
15581000002:1
15592:1
1560+inf:0
1561-inf:0
1562123.456:0
1563-123.456:0
15640.01:0
1565-0.01:0
1566120:1
15671200:1
1568-1200:1
1569&is_positive
bd49aa09 15700:0
184f15d5 15711:1
1572-1:0
1573-123:0
1574NaN:0
1575-inf:0
1576+inf:1
1577&is_negative
15780:0
15791:0
1580-1:1
1581-123:1
1582NaN:0
1583-inf:1
1584+inf:0
1585&parts
15860:0 1
15871:1 0
1588123:123 0
1589-123:-123 0
1590-1200:-12 2
1591NaNparts:NaN NaN
1592+inf:inf inf
1593-inf:-inf inf
1594&exponent
15950:1
15961:0
1597123:0
1598-123:0
1599-1200:2
1600+inf:inf
1601-inf:inf
1602NaNexponent:NaN
1603&mantissa
16040:0
16051:1
1606123:123
1607-123:-123
1608-1200:-12
1609+inf:inf
1610-inf:-inf
1611NaNmantissa:NaN
1612&length
1613123:3
1614-123:3
16150:1
16161:1
161712345678901234567890:20
1618&is_zero
1619NaNzero:0
1620+inf:0
1621-inf:0
16220:1
1623-1:0
16241:0
1625&is_one
1626NaNone:0
1627+inf:0
1628-inf:0
16290:0
16302:0
16311:1
1632-1:0
1633-2:0
1634&ffloor
16350:0
1636abc:NaN
1637+inf:inf
1638-inf:-inf
16391:1
1640-51:-51
1641-51.2:-52
164212.2:12
9b924220 16430.12345:0
16440.123456:0
16450.1234567:0
16460.12345678:0
16470.123456789:0
184f15d5 1648&fceil
16490:0
1650abc:NaN
1651+inf:inf
1652-inf:-inf
16531:1
1654-51:-51
1655-51.2:-51
165612.2:13