That's C, not perl.
[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();";
ee15d750 66 } elsif ($f eq "finc") {
67 $try .= '++$x;';
68 } elsif ($f eq "fdec") {
69 $try .= '--$x;';
70 }elsif ($f eq "fround") {
71 $try .= "$setup; \$x->fround($args[1]);";
72 } elsif ($f eq "ffround") {
73 $try .= "$setup; \$x->ffround($args[1]);";
74 } elsif ($f eq "fsqrt") {
75 $try .= "$setup; \$x->fsqrt();";
b3abae2a 76 } elsif ($f eq "ffac") {
77 $try .= "$setup; \$x->ffac();";
990fb837 78 } elsif ($f eq "flog") {
90d1b129 79 if (defined $args[1] && $args[1] ne '')
990fb837 80 {
81 $try .= "\$y = $class->new($args[1]);";
82 $try .= "$setup; \$x->flog(\$y);";
83 }
84 else
85 {
86 $try .= "$setup; \$x->flog();";
87 }
ee15d750 88 }
89 else
90 {
990fb837 91 $try .= "\$y = $class->new(\"$args[1]\");";
b68b7ab1 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") {
ee15d750 113 $try .= '$x <=> $y;';
114 } elsif ($f eq "facmp") {
115 $try .= '$x->facmp($y);';
116 } elsif ($f eq "fpow") {
117 $try .= '$x ** $y;';
990fb837 118 } elsif ($f eq "froot") {
119 $try .= "$setup; \$x->froot(\$y);";
ee15d750 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;";
b3abae2a 128 } elsif ($f eq "fdiv-list") {
129 $try .= "$setup; join(',',\$x->fdiv(\$y));";
394e6ffb 130 } elsif ($f eq "frsft") {
131 $try .= '$x >> $y;';
132 } elsif ($f eq "flsft") {
133 $try .= '$x << $y;';
ee15d750 134 } elsif ($f eq "fmod") {
135 $try .= '$x % $y;';
136 } else { warn "Unknown op '$f'"; }
137 }
e745a66c 138 # print "# Trying: '$try'\n";
ee15d750 139 $ans1 = eval $try;
b68b7ab1 140 print "# Error: $@\n" if $@;
ee15d750 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);
162 if (ref($ans1) eq "$class")
163 {
027dc388 164 # float numbers are normalized (for now), so mantissa shouldn't have
165 # trailing zeros
ee15d750 166 #print $ans1->_trailing_zeros(),"\n";
167 print "# Has trailing zeros after '$try'\n"
9b924220 168 if !ok ($CL->_zeros( $ans1->{_m}), 0);
ee15d750 169 }
170 }
171 } # end pattern or string
172 }
173 } # end while
174
394e6ffb 175# check whether $class->new( Math::BigInt->new()) destroys it
176# ($y == 12 in this case)
ee15d750 177$x = Math::BigInt->new(1200); $y = $class->new($x);
178ok ($y,1200); ok ($x,1200);
179
180###############################################################################
f9a08e12 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
189my $monster = '1e1234567890123456789012345678901234567890';
190
9b924220 191# new and exponent
56d9de68 192ok ($class->new($monster)->bsstr(),
193 '1e+1234567890123456789012345678901234567890');
9b924220 194ok ($class->new($monster)->exponent(),
195 '1234567890123456789012345678901234567890');
f9a08e12 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
9b924220 204# mantissa
205$monster = '1234567890123456789012345678901234567890e2';
206ok ($class->new($monster)->mantissa(),
207 '123456789012345678901234567890123456789');
208
f9a08e12 209###############################################################################
b3abae2a 210# zero,inf,one,nan
ee15d750 211
394e6ffb 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});
56b9c951 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');
61f5c3f5 229
56d9de68 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
61f5c3f5 239###############################################################################
240# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
241# correctly modifies $x
242
61f5c3f5 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
56d9de68 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#############################################################################
13a12e00 262# can we call objectify (broken until v1.52)
263
56d9de68 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}
f9a08e12 271
990fb837 272#############################################################################
273# is_one('-') (broken until v1.64)
274
275ok ($class->new(-1)->is_one(),0);
276ok ($class->new(-1)->is_one('-'),1);
277
27e7b8bb 278#############################################################################
279# bug 1/0.5 leaving 2e-0 instead of 2e0
280
281ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0');
282
03874afe 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
ae161977 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
2d2b2744 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
394e6ffb 3491; # all done
ee15d750 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__
b68b7ab1 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
b3abae2a 399$div_scale = 40;
400&flog
990fb837 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
90d1b129 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
b3abae2a 428# reset for further tests
429$div_scale = 40;
990fb837 4301::0
394e6ffb 431&frsft
b3abae2a 432NaNfrsft:2:NaN
394e6ffb 4330:2:0
4341:1:0.5
4352:1:1
4364:1:2
437123:1:61.5
43832:3:4
439&flsft
b3abae2a 440NaNflsft:0:NaN
394e6ffb 4412:1:4
4424:3:32
4435:3:40
4441:2:4
4450:5:0
ee15d750 446&fnorm
4471:1
448-0:0
449fnormNaN:NaN
450+inf:inf
451-inf:-inf
452123:123
453-123.4567:-123.4567
027dc388 454# invalid inputs
4551__2:NaN
4561E1__2:NaN
45711__2E2:NaN
027dc388 458.2E-3.:NaN
2d2b2744 4591e3e4:NaN
460# strange, but valid
027dc388 461.2E2:20
2d2b2744 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
ee15d750 489&as_number
4900:0
4911:1
4921.2:1
4932.345:2
494-2:-2
495-123.456:-123
496-200:-200
56d9de68 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
990fb837 5180.12345:0
5190.123456:0
5200.1234567:0
5210.12345678:0
5220.123456789:0
ee15d750 523&finf
5241:+:inf
5252:-:-inf
5263:abc:inf
56d9de68 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
ee15d750 541&numify
56d9de68 542# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output
ee15d750 5430:0e+1
544+1:1e+0
5451234:1234e+0
546NaN:NaN
547+inf:inf
548-inf:-inf
56d9de68 549-5:-5e+0
550100:1e+2
551-100:-1e+2
ee15d750 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
56d9de68 570-abcfsstr:NaN
ee15d750 5711234.567:1234567e-3
56d9de68 572123:123e+0
573-5:-5e+0
574-100:-1e+2
ee15d750 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
aef458a0 5980e999:0
5990e-999:0
600-0e999:0
601-0e-999:0
ee15d750 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
9b924220 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
ee15d750 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
9b924220 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
79c55733 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
56b9c951 681#2:0.2:1.148698354997035006798626946777927589444
07d34614 682#6:1.5:14.6969384566990685891837044482353483518
56b9c951 683$div_scale = 20;
684#62.5:12.5:26447206647554886213592.3959144
685$div_scale = 40;
ee15d750 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
767&ffround
768$round_mode = "trunc"
769+inf:5:inf
770-inf:5:-inf
7710:5:0
772NaNffround:5:NaN
773+1.23:-1:1.2
774+1.234:-1:1.2
775+1.2345:-1:1.2
776+1.23:-2:1.23
777+1.234:-2:1.23
778+1.2345:-2:1.23
779+1.23:-3:1.230
780+1.234:-3:1.234
781+1.2345:-3:1.234
782-1.23:-1:-1.2
783+1.27:-1:1.2
784-1.27:-1:-1.2
785+1.25:-1:1.2
786-1.25:-1:-1.2
787+1.35:-1:1.3
788-1.35:-1:-1.3
789-0.0061234567890:-1:0.0
790-0.0061:-1:0.0
791-0.00612:-1:0.0
792-0.00612:-2:0.00
793-0.006:-1:0.0
794-0.006:-2:0.00
795-0.0006:-2:0.00
796-0.0006:-3:0.000
797-0.0065:-3:/-0\.006|-6e-03
798-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
799-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8000.05:0:0
8010.5:0:0
8020.51:0:0
8030.41:0:0
804$round_mode = "zero"
805+2.23:-1:/2.2(?:0{5}\d+)?
806-2.23:-1:/-2.2(?:0{5}\d+)?
807+2.27:-1:/2.(?:3|29{5}\d+)
808-2.27:-1:/-2.(?:3|29{5}\d+)
809+2.25:-1:/2.2(?:0{5}\d+)?
810-2.25:-1:/-2.2(?:0{5}\d+)?
811+2.35:-1:/2.(?:3|29{5}\d+)
812-2.35:-1:/-2.(?:3|29{5}\d+)
813-0.0065:-1:0.0
814-0.0065:-2:/-0\.01|-1e-02
815-0.0065:-3:/-0\.006|-6e-03
816-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
817-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8180.05:0:0
8190.5:0:0
8200.51:0:1
8210.41:0:0
822$round_mode = "+inf"
823+3.23:-1:/3.2(?:0{5}\d+)?
824-3.23:-1:/-3.2(?:0{5}\d+)?
825+3.27:-1:/3.(?:3|29{5}\d+)
826-3.27:-1:/-3.(?:3|29{5}\d+)
827+3.25:-1:/3.(?:3|29{5}\d+)
828-3.25:-1:/-3.2(?:0{5}\d+)?
829+3.35:-1:/3.(?:4|39{5}\d+)
830-3.35:-1:/-3.(?:3|29{5}\d+)
831-0.0065:-1:0.0
832-0.0065:-2:/-0\.01|-1e-02
833-0.0065:-3:/-0\.006|-6e-03
834-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
835-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8360.05:0:0
8370.5:0:1
8380.51:0:1
8390.41:0:0
840$round_mode = "-inf"
841+4.23:-1:/4.2(?:0{5}\d+)?
842-4.23:-1:/-4.2(?:0{5}\d+)?
843+4.27:-1:/4.(?:3|29{5}\d+)
844-4.27:-1:/-4.(?:3|29{5}\d+)
845+4.25:-1:/4.2(?:0{5}\d+)?
846-4.25:-1:/-4.(?:3|29{5}\d+)
847+4.35:-1:/4.(?:3|29{5}\d+)
848-4.35:-1:/-4.(?:4|39{5}\d+)
849-0.0065:-1:0.0
850-0.0065:-2:/-0\.01|-1e-02
851-0.0065:-3:/-0\.007|-7e-03
852-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
853-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8540.05:0:0
8550.5:0:0
8560.51:0:1
8570.41:0:0
858$round_mode = "odd"
859+5.23:-1:/5.2(?:0{5}\d+)?
860-5.23:-1:/-5.2(?:0{5}\d+)?
861+5.27:-1:/5.(?:3|29{5}\d+)
862-5.27:-1:/-5.(?:3|29{5}\d+)
863+5.25:-1:/5.(?:3|29{5}\d+)
864-5.25:-1:/-5.(?:3|29{5}\d+)
865+5.35:-1:/5.(?:3|29{5}\d+)
866-5.35:-1:/-5.(?:3|29{5}\d+)
867-0.0065:-1:0.0
868-0.0065:-2:/-0\.01|-1e-02
869-0.0065:-3:/-0\.007|-7e-03
870-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
871-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8720.05:0:0
8730.5:0:1
8740.51:0:1
8750.41:0:0
876$round_mode = "even"
877+6.23:-1:/6.2(?:0{5}\d+)?
878-6.23:-1:/-6.2(?:0{5}\d+)?
879+6.27:-1:/6.(?:3|29{5}\d+)
880-6.27:-1:/-6.(?:3|29{5}\d+)
881+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
882-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
883+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
884-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
885-0.0065:-1:0.0
886-0.0065:-2:/-0\.01|-1e-02
887-0.0065:-3:/-0\.006|-7e-03
888-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
889-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
8900.05:0:0
8910.5:0:0
8920.51:0:1
8930.41:0:0
8940.01234567:-3:0.012
8950.01234567:-4:0.0123
8960.01234567:-5:0.01235
8970.01234567:-6:0.012346
8980.01234567:-7:0.0123457
8990.01234567:-8:0.01234567
9000.01234567:-9:0.012345670
9010.01234567:-12:0.012345670000
902&fcmp
903fcmpNaN:fcmpNaN:
904fcmpNaN:+0:
905+0:fcmpNaN:
906+0:+0:0
907-1:+0:-1
908+0:-1:1
909+1:+0:1
910+0:+1:-1
911-1:+1:-1
912+1:-1:1
913-1:-1:0
914+1:+1:0
915-1.1:0:-1
916+0:-1.1:1
917+1.1:+0:1
918+0:+1.1:-1
919+123:+123:0
920+123:+12:1
921+12:+123:-1
922-123:-123:0
923-123:-12:-1
924-12:-123:1
925+123:+124:-1
926+124:+123:1
927-123:-124:1
928-124:-123:-1
9290:0.01:-1
9300:0.0001:-1
9310:-0.0001:1
9320:-0.1:1
9330.1:0:1
9340.00001:0:1
935-0.0001:0:-1
936-0.1:0:-1
9370:0.0001234:-1
9380:-0.0001234:1
9390.0001234:0:1
940-0.0001234:0:-1
9410.0001:0.0005:-1
9420.0005:0.0001:1
9430.005:0.0001:1
9440.001:0.0005:1
9450.000001:0.0005:-1
9460.00000123:0.0005:-1
9470.00512:0.0001:1
9480.005:0.000112:1
9490.00123:0.0005:1
9501.5:2:-1
9512:1.5:1
9521.54321:234:-1
953234:1.54321:1
954# infinity
955-inf:5432112345:-1
956+inf:5432112345:1
957-inf:-5432112345:-1
958+inf:-5432112345:1
959-inf:54321.12345:-1
960+inf:54321.12345:1
961-inf:-54321.12345:-1
962+inf:-54321.12345:1
963+inf:+inf:0
964-inf:-inf:0
965+inf:-inf:1
966-inf:+inf:-1
967# return undef
968+inf:NaN:
969NaN:inf:
970-inf:NaN:
971NaN:-inf:
972&facmp
973fcmpNaN:fcmpNaN:
974fcmpNaN:+0:
975+0:fcmpNaN:
976+0:+0:0
977-1:+0:1
978+0:-1:-1
979+1:+0:1
980+0:+1:-1
981-1:+1:0
982+1:-1:0
983-1:-1:0
984+1:+1:0
985-1.1:0:1
986+0:-1.1:-1
987+1.1:+0:1
988+0:+1.1:-1
989+123:+123:0
990+123:+12:1
991+12:+123:-1
992-123:-123:0
993-123:-12:1
994-12:-123:-1
995+123:+124:-1
996+124:+123:1
997-123:-124:-1
998-124:-123:1
9990:0.01:-1
10000:0.0001:-1
10010:-0.0001:-1
10020:-0.1:-1
10030.1:0:1
10040.00001:0:1
1005-0.0001:0:1
1006-0.1:0:1
10070:0.0001234:-1
10080:-0.0001234:-1
10090.0001234:0:1
1010-0.0001234:0:1
10110.0001:0.0005:-1
10120.0005:0.0001:1
10130.005:0.0001:1
10140.001:0.0005:1
10150.000001:0.0005:-1
10160.00000123:0.0005:-1
10170.00512:0.0001:1
10180.005:0.000112:1
10190.00123:0.0005:1
10201.5:2:-1
10212:1.5:1
10221.54321:234:-1
1023234:1.54321:1
1024# infinity
1025-inf:5432112345:1
1026+inf:5432112345:1
1027-inf:-5432112345:1
1028+inf:-5432112345:1
1029-inf:54321.12345:1
1030+inf:54321.12345:1
1031-inf:-54321.12345:1
1032+inf:-54321.12345:1
1033+inf:+inf:0
1034-inf:-inf:0
1035+inf:-inf:0
1036-inf:+inf:0
48b581a2 10375:inf:-1
1038-1:inf:-1
10395:-inf:-1
1040-1:-inf:-1
ee15d750 1041# return undef
1042+inf:facmpNaN:
1043facmpNaN:inf:
1044-inf:facmpNaN:
1045facmpNaN:-inf:
1046&fdec
1047fdecNaN:NaN
1048+inf:inf
1049-inf:-inf
1050+0:-1
1051+1:0
1052-1:-2
10531.23:0.23
1054-1.23:-2.23
e745a66c 1055100:99
1056101:100
1057-100:-101
1058-99:-100
1059-98:-99
106099:98
ee15d750 1061&finc
1062fincNaN:NaN
1063+inf:inf
1064-inf:-inf
1065+0:1
1066+1:2
1067-1:0
10681.23:2.23
1069-1.23:-0.23
e745a66c 1070100:101
1071-100:-99
1072-99:-98
1073-101:-100
107499:100
ee15d750 1075&fadd
1076abc:abc:NaN
1077abc:+0:NaN
1078+0:abc:NaN
13a12e00 1079+inf:-inf:NaN
1080-inf:+inf:NaN
ee15d750 1081+inf:+inf:inf
1082-inf:-inf:-inf
1083baddNaN:+inf:NaN
1084baddNaN:+inf:NaN
1085+inf:baddNaN:NaN
1086-inf:baddNaN:NaN
1087+0:+0:0
1088+1:+0:1
1089+0:+1:1
1090+1:+1:2
1091-1:+0:-1
1092+0:-1:-1
1093-1:-1:-2
1094-1:+1:0
1095+1:-1:0
1096+9:+1:10
1097+99:+1:100
1098+999:+1:1000
1099+9999:+1:10000
1100+99999:+1:100000
1101+999999:+1:1000000
1102+9999999:+1:10000000
1103+99999999:+1:100000000
1104+999999999:+1:1000000000
1105+9999999999:+1:10000000000
1106+99999999999:+1:100000000000
1107+10:-1:9
1108+100:-1:99
1109+1000:-1:999
1110+10000:-1:9999
1111+100000:-1:99999
1112+1000000:-1:999999
1113+10000000:-1:9999999
1114+100000000:-1:99999999
1115+1000000000:-1:999999999
1116+10000000000:-1:9999999999
1117+123456789:+987654321:1111111110
1118-123456789:+987654321:864197532
1119-123456789:-987654321:-1111111110
1120+123456789:-987654321:-864197532
11210.001234:0.0001234:0.0013574
1122&fsub
1123abc:abc:NaN
1124abc:+0:NaN
1125+0:abc:NaN
1126+inf:-inf:inf
1127-inf:+inf:-inf
13a12e00 1128+inf:+inf:NaN
1129-inf:-inf:NaN
ee15d750 1130baddNaN:+inf:NaN
1131baddNaN:+inf:NaN
1132+inf:baddNaN:NaN
1133-inf:baddNaN:NaN
1134+0:+0:0
1135+1:+0:1
1136+0:+1:-1
1137+1:+1:0
1138-1:+0:-1
1139+0:-1:1
1140-1:-1:0
1141-1:+1:-2
1142+1:-1:2
1143+9:+1:8
1144+99:+1:98
1145+999:+1:998
1146+9999:+1:9998
1147+99999:+1:99998
1148+999999:+1:999998
1149+9999999:+1:9999998
1150+99999999:+1:99999998
1151+999999999:+1:999999998
1152+9999999999:+1:9999999998
1153+99999999999:+1:99999999998
1154+10:-1:11
1155+100:-1:101
1156+1000:-1:1001
1157+10000:-1:10001
1158+100000:-1:100001
1159+1000000:-1:1000001
1160+10000000:-1:10000001
1161+100000000:-1:100000001
1162+1000000000:-1:1000000001
1163+10000000000:-1:10000000001
1164+123456789:+987654321:-864197532
1165-123456789:+987654321:-1111111110
1166-123456789:-987654321:864197532
1167+123456789:-987654321:1111111110
1168&fmul
1169abc:abc:NaN
1170abc:+0:NaN
1171+0:abc:NaN
1172+inf:NaNmul:NaN
1173+inf:NaNmul:NaN
1174NaNmul:+inf:NaN
1175NaNmul:-inf:NaN
1176+inf:+inf:inf
1177+inf:-inf:-inf
1178+inf:-inf:-inf
1179+inf:+inf:inf
1180+inf:123.34:inf
1181+inf:-123.34:-inf
1182-inf:123.34:-inf
1183-inf:-123.34:inf
1184123.34:+inf:inf
1185-123.34:+inf:-inf
1186123.34:-inf:-inf
1187-123.34:-inf:inf
1188+0:+0:0
1189+0:+1:0
1190+1:+0:0
1191+0:-1:0
1192-1:+0:0
1193+123456789123456789:+0:0
1194+0:+123456789123456789:0
1195-1:-1:1
1196-1:+1:-1
1197+1:-1:-1
1198+1:+1:1
1199+2:+3:6
1200-2:+3:-6
1201+2:-3:-6
1202-2:-3:6
1203+111:+111:12321
1204+10101:+10101:102030201
1205+1001001:+1001001:1002003002001
1206+100010001:+100010001:10002000300020001
1207+10000100001:+10000100001:100002000030000200001
1208+11111111111:+9:99999999999
1209+22222222222:+9:199999999998
1210+33333333333:+9:299999999997
1211+44444444444:+9:399999999996
1212+55555555555:+9:499999999995
1213+66666666666:+9:599999999994
1214+77777777777:+9:699999999993
1215+88888888888:+9:799999999992
1216+99999999999:+9:899999999991
12176:120:720
121810:10000:100000
b3abae2a 1219&fdiv-list
12200:0:NaN,NaN
12210:1:0,0
12229:4:2.25,1
12239:5:1.8,4
ee15d750 1224&fdiv
1225$div_scale = 40; $round_mode = 'even'
1226abc:abc:NaN
1227abc:+1:abc:NaN
1228+1:abc:NaN
1229-1:abc:NaN
12300:abc:NaN
1231+0:+0:NaN
1232+0:+1:0
1233+1:+0:inf
1234+3214:+0:inf
1235+0:-1:0
1236-1:+0:-inf
1237-3214:+0:-inf
1238+1:+1:1
1239-1:-1:1
1240+1:-1:-1
1241-1:+1:-1
1242+1:+2:0.5
1243+2:+1:2
1244123:+inf:0
1245123:-inf:0
1246+10:+5:2
1247+100:+4:25
1248+1000:+8:125
1249+10000:+16:625
1250+10000:-16:-625
1251+999999999999:+9:111111111111
1252+999999999999:+99:10101010101
1253+999999999999:+999:1001001001
1254+999999999999:+9999:100010001
1255+999999999999999:+99999:10000100001
1256+1000000000:+9:111111111.1111111111111111111111111111111
1257+2000000000:+9:222222222.2222222222222222222222222222222
1258+3000000000:+9:333333333.3333333333333333333333333333333
1259+4000000000:+9:444444444.4444444444444444444444444444444
1260+5000000000:+9:555555555.5555555555555555555555555555556
1261+6000000000:+9:666666666.6666666666666666666666666666667
1262+7000000000:+9:777777777.7777777777777777777777777777778
1263+8000000000:+9:888888888.8888888888888888888888888888889
1264+9000000000:+9:1000000000
1265+35500000:+113:314159.2920353982300884955752212389380531
1266+71000000:+226:314159.2920353982300884955752212389380531
1267+106500000:+339:314159.2920353982300884955752212389380531
1268+1000000000:+3:333333333.3333333333333333333333333333333
12692:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 1270123456:1:123456
ee15d750 1271$div_scale = 20
1272+1000000000:+9:111111111.11111111111
1273+2000000000:+9:222222222.22222222222
1274+3000000000:+9:333333333.33333333333
1275+4000000000:+9:444444444.44444444444
1276+5000000000:+9:555555555.55555555556
1277+6000000000:+9:666666666.66666666667
1278+7000000000:+9:777777777.77777777778
1279+8000000000:+9:888888888.88888888889
1280+9000000000:+9:1000000000
12811:10:0.1
12821:100:0.01
12831:1000:0.001
12841:10000:0.0001
12851:504:0.001984126984126984127
12862:1.987654321:1.0062111801179738436
394e6ffb 1287123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 1288# the next two cases are the "old" behaviour, but are now (>v0.01) different
1289#+35500000:+113:314159.292035398230088
1290#+71000000:+226:314159.292035398230088
1291+35500000:+113:314159.29203539823009
1292+71000000:+226:314159.29203539823009
1293+106500000:+339:314159.29203539823009
1294+1000000000:+3:333333333.33333333333
1295$div_scale = 1
1296# round to accuracy 1 after bdiv
1297+124:+3:40
394e6ffb 1298123456789.1234:1:100000000
ee15d750 1299# reset scale for further tests
1300$div_scale = 40
1301&fmod
61f5c3f5 1302+9:4:1
1303+9:5:4
1304+9000:56:40
1305+56:9000:56
1306# inf handling, see table in doc
13070:inf:0
13080:-inf:0
13095:inf:5
13105:-inf:5
1311-5:inf:-5
1312-5:-inf:-5
1313inf:5:0
1314-inf:5:0
1315inf:-5:0
1316-inf:-5:0
13175:5:0
1318-5:-5:0
b3abae2a 1319inf:inf:NaN
1320-inf:-inf:NaN
1321-inf:inf:NaN
1322inf:-inf:NaN
61f5c3f5 13238:0:8
1324inf:0:inf
1325# exceptions to reminder rule
1326-inf:0:-inf
1327-8:0:-8
13280:0:NaN
1329abc:abc:NaN
1330abc:1:abc:NaN
13311:abc:NaN
13320:0:NaN
13330:1:0
13341:0:1
13350:-1:0
1336-1:0:-1
13371:1:0
1338-1:-1:0
13391:-1:0
1340-1:1:0
13411:2:1
13422:1:0
13431000000000:9:1
13442000000000:9:2
13453000000000:9:3
13464000000000:9:4
13475000000000:9:5
13486000000000:9:6
13497000000000:9:7
13508000000000:9:8
13519000000000:9:0
135235500000:113:33
135371000000:226:66
1354106500000:339:99
13551000000000:3:1
135610:5:0
1357100:4:0
13581000:8:0
135910000:16:0
1360999999999999:9:0
1361999999999999:99:0
1362999999999999:999:0
1363999999999999:9999:0
1364999999999999999:99999:0
1365-9:+5:1
1366+9:-5:-1
1367-9:-5:-4
1368-5:3:1
1369-2:3:1
13704:3:1
13711:3:1
1372-5:-3:-2
1373-2:-3:-2
13744:-3:-2
13751:-3:-2
13764095:4095:0
1377100041000510123:3:0
1378152403346:12345:4321
137987654321:87654321:0
1380# now some floating point tests
1381123:2.5:0.5
13821230:2.5:0
1383123.4:2.5:0.9
1384123e1:25:5
b3abae2a 1385&ffac
1386Nanfac:NaN
1387-1:NaN
b282a552 1388+inf:inf
091c87b1 1389-inf:NaN
b3abae2a 13900:1
13911:1
13922:2
13933:6
13944:24
13955:120
13966:720
139710:3628800
139811:39916800
139912:479001600
990fb837 1400&froot
1401# sqrt()
1402+0:2:0
1403+1:2:1
1404-1:2:NaN
1405# -$x ** (1/2) => -$y, but not in froot()
1406-123.456:2:NaN
1407+inf:2:inf
1408-inf:2:NaN
14092:2:1.41421356237309504880168872420969807857
1410-2:2:NaN
14114:2:2
14129:2:3
141316:2:4
1414100:2:10
1415123.456:2:11.11107555549866648462149404118219234119
141615241.38393:2:123.4559999756998444766131352122991626468
14171.44:2:1.2
141812:2:3.464101615137754587054892683011744733886
14190.49:2:0.7
14200.0049:2:0.07
1421# invalid ones
14221:NaN:NaN
1423-1:NaN:NaN
14240:NaN:NaN
1425-inf:NaN:NaN
1426+inf:NaN:NaN
1427NaN:0:NaN
1428NaN:2:NaN
1429NaN:inf:NaN
1430NaN:inf:NaN
143112:-inf:NaN
143212:inf:NaN
1433+0:0:NaN
1434+1:0:NaN
1435-1:0:NaN
1436-2:0:NaN
1437-123.45:0:NaN
1438+inf:0:NaN
143912:1:12
1440-12:1:NaN
14418:-1:NaN
1442-8:-1:NaN
1443# cubic root
14448:3:2
1445-8:3:NaN
1446# fourths root
144716:4:2
144881:4:3
3a427a11 1449# see t/bigroot() for more tests
ee15d750 1450&fsqrt
1451+0:0
1452-1:NaN
1453-2:NaN
1454-16:NaN
1455-123.45:NaN
1456nanfsqrt:NaN
1457+inf:inf
1458-inf:NaN
394e6ffb 14591:1
14602:1.41421356237309504880168872420969807857
14614:2
14629:3
146316:4
1464100:10
1465123.456:11.11107555549866648462149404118219234119
146615241.38393:123.4559999756998444766131352122991626468
14671.44:1.2
1468# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
14691.44E10:120000
14702e10:141421.356237309504880168872420969807857
b3abae2a 1471144e20:120000000000
61f5c3f5 1472# proved to be an endless loop under 7-9
147312:3.464101615137754587054892683011744733886
990fb837 14740.49:0.7
14750.0049:0.07
027dc388 1476&is_nan
1477123:0
1478abc:1
1479NaN:1
1480-123:0
1481&is_inf
1482+inf::1
1483-inf::1
1484abc::0
14851::0
1486NaN::0
1487-1::0
1488+inf:-:0
1489+inf:+:1
1490-inf:-:1
1491-inf:+:0
1492# it must be exactly /^[+-]inf$/
1493+infinity::0
1494-infinity::0
ee15d750 1495&is_odd
1496abc:0
14970:0
1498-1:1
1499-3:1
15001:1
15013:1
15021000001:1
15031000002:0
1504+inf:0
1505-inf:0
1506123.45:0
1507-123.45:0
15082:0
b3abae2a 1509&is_int
1510NaNis_int:0
15110:1
15121:1
15132:1
1514-2:1
1515-1:1
1516-inf:0
1517+inf:0
1518123.4567:0
1519-0.1:0
1520-0.002:0
ee15d750 1521&is_even
1522abc:0
15230:1
1524-1:0
1525-3:0
15261:0
15273:0
15281000001:0
15291000002:1
15302:1
1531+inf:0
1532-inf:0
1533123.456:0
1534-123.456:0
b3abae2a 15350.01:0
1536-0.01:0
1537120:1
15381200:1
1539-1200:1
ee15d750 1540&is_positive
b68b7ab1 15410:0
ee15d750 15421:1
1543-1:0
1544-123:0
1545NaN:0
1546-inf:0
1547+inf:1
1548&is_negative
15490:0
15501:0
1551-1:1
1552-123:1
1553NaN:0
1554-inf:1
1555+inf:0
1556&parts
15570:0 1
15581:1 0
1559123:123 0
1560-123:-123 0
1561-1200:-12 2
1562NaNparts:NaN NaN
1563+inf:inf inf
1564-inf:-inf inf
1565&exponent
15660:1
15671:0
1568123:0
1569-123:0
1570-1200:2
1571+inf:inf
1572-inf:inf
1573NaNexponent:NaN
1574&mantissa
15750:0
15761:1
1577123:123
1578-123:-123
1579-1200:-12
1580+inf:inf
1581-inf:-inf
1582NaNmantissa:NaN
1583&length
1584123:3
1585-123:3
15860:1
15871:1
158812345678901234567890:20
1589&is_zero
1590NaNzero:0
1591+inf:0
1592-inf:0
15930:1
1594-1:0
15951:0
1596&is_one
1597NaNone:0
1598+inf:0
1599-inf:0
16000:0
16012:0
16021:1
1603-1:0
1604-2:0
027dc388 1605&ffloor
ee15d750 16060:0
1607abc:NaN
1608+inf:inf
1609-inf:-inf
16101:1
1611-51:-51
1612-51.2:-52
161312.2:12
990fb837 16140.12345:0
16150.123456:0
16160.1234567:0
16170.12345678:0
16180.123456789:0
027dc388 1619&fceil
ee15d750 16200:0
1621abc:NaN
1622+inf:inf
1623-inf:-inf
16241:1
1625-51:-51
1626-51.2:-51
162712.2:13