fix: output from different pids
[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
ee15d750 7while (<DATA>)
8 {
d614cd8b 9 chomp;
ee15d750 10 $_ =~ s/#.*$//; # remove comments
11 $_ =~ s/\s+$//; # trailing spaces
12 next if /^$/; # skip empty lines & comments
13 if (s/^&//)
14 {
15 $f = $_;
16 }
17 elsif (/^\$/)
18 {
19 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
20 #print "\$setup== $setup\n";
21 }
22 else
23 {
24 if (m|^(.*?):(/.+)$|)
25 {
26 $ans = $2;
27 @args = split(/:/,$1,99);
28 }
29 else
30 {
31 @args = split(/:/,$_,99); $ans = pop(@args);
32 }
990fb837 33 $try = "\$x = $class->new('$args[0]');";
ee15d750 34 if ($f eq "fnorm")
35 {
36 $try .= "\$x;";
37 } elsif ($f eq "finf") {
38 $try .= "\$x->finf('$args[1]');";
027dc388 39 } elsif ($f eq "is_inf") {
40 $try .= "\$x->is_inf('$args[1]');";
ee15d750 41 } elsif ($f eq "fone") {
42 $try .= "\$x->bone('$args[1]');";
43 } elsif ($f eq "fstr") {
44 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
45 $try .= '$x->fstr();';
ee15d750 46 } elsif ($f eq "parts") {
48b581a2 47 # ->bstr() to see if an object is returned
ee15d750 48 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
49 $try .= '"$a $b";';
ee15d750 50 } elsif ($f eq "exponent") {
48b581a2 51 # ->bstr() to see if an object is returned
ee15d750 52 $try .= '$x->exponent()->bstr();';
53 } elsif ($f eq "mantissa") {
48b581a2 54 # ->bstr() to see if an object is returned
ee15d750 55 $try .= '$x->mantissa()->bstr();';
56d9de68 56 } elsif ($f =~ /^(numify|length|as_number|as_hex|as_bin)$/) {
57 $try .= "\$x->$f();";
b3abae2a 58 # some unary ops (test the fxxx form, since that is done by AUTOLOAD)
027dc388 59 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
394e6ffb 60 $try .= "\$x->f$1();";
027dc388 61 # some is_xxx test function
b3abae2a 62 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) {
027dc388 63 $try .= "\$x->$f();";
ee15d750 64 } elsif ($f eq "finc") {
65 $try .= '++$x;';
66 } elsif ($f eq "fdec") {
67 $try .= '--$x;';
68 }elsif ($f eq "fround") {
69 $try .= "$setup; \$x->fround($args[1]);";
70 } elsif ($f eq "ffround") {
71 $try .= "$setup; \$x->ffround($args[1]);";
72 } elsif ($f eq "fsqrt") {
73 $try .= "$setup; \$x->fsqrt();";
b3abae2a 74 } elsif ($f eq "ffac") {
75 $try .= "$setup; \$x->ffac();";
990fb837 76 } elsif ($f eq "flog") {
77 if ($args[1] ne '')
78 {
79 $try .= "\$y = $class->new($args[1]);";
80 $try .= "$setup; \$x->flog(\$y);";
81 }
82 else
83 {
84 $try .= "$setup; \$x->flog();";
85 }
ee15d750 86 }
87 else
88 {
990fb837 89 $try .= "\$y = $class->new(\"$args[1]\");";
ee15d750 90 if ($f eq "fcmp") {
91 $try .= '$x <=> $y;';
92 } elsif ($f eq "facmp") {
93 $try .= '$x->facmp($y);';
94 } elsif ($f eq "fpow") {
95 $try .= '$x ** $y;';
990fb837 96 } elsif ($f eq "froot") {
97 $try .= "$setup; \$x->froot(\$y);";
ee15d750 98 } elsif ($f eq "fadd") {
99 $try .= '$x + $y;';
100 } elsif ($f eq "fsub") {
101 $try .= '$x - $y;';
102 } elsif ($f eq "fmul") {
103 $try .= '$x * $y;';
104 } elsif ($f eq "fdiv") {
105 $try .= "$setup; \$x / \$y;";
b3abae2a 106 } elsif ($f eq "fdiv-list") {
107 $try .= "$setup; join(',',\$x->fdiv(\$y));";
394e6ffb 108 } elsif ($f eq "frsft") {
109 $try .= '$x >> $y;';
110 } elsif ($f eq "flsft") {
111 $try .= '$x << $y;';
ee15d750 112 } elsif ($f eq "fmod") {
113 $try .= '$x % $y;';
114 } else { warn "Unknown op '$f'"; }
115 }
e745a66c 116 # print "# Trying: '$try'\n";
ee15d750 117 $ans1 = eval $try;
118 if ($ans =~ m|^/(.*)$|)
119 {
120 my $pat = $1;
121 if ($ans1 =~ /$pat/)
122 {
123 ok (1,1);
124 }
125 else
126 {
127 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
128 }
129 }
130 else
131 {
132 if ($ans eq "")
133 {
134 ok_undef ($ans1);
135 }
136 else
137 {
138 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
139 if (ref($ans1) eq "$class")
140 {
027dc388 141 # float numbers are normalized (for now), so mantissa shouldn't have
142 # trailing zeros
ee15d750 143 #print $ans1->_trailing_zeros(),"\n";
144 print "# Has trailing zeros after '$try'\n"
145 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
146 }
147 }
148 } # end pattern or string
149 }
150 } # end while
151
394e6ffb 152# check whether $class->new( Math::BigInt->new()) destroys it
153# ($y == 12 in this case)
ee15d750 154$x = Math::BigInt->new(1200); $y = $class->new($x);
155ok ($y,1200); ok ($x,1200);
156
157###############################################################################
f9a08e12 158# Really huge, big, ultra-mega-biggy-monster exponents
159# Technically, the exponents should not be limited (they are BigInts), but
160# practically there are a few places were they are limited to a Perl scalar.
161# This is sometimes for speed, sometimes because otherwise the number wouldn't
162# fit into your memory (just think of 1e123456789012345678901234567890 + 1!)
163# anyway. We don't test everything here, but let's make sure it just basically
164# works.
165
166my $monster = '1e1234567890123456789012345678901234567890';
167
168# new
56d9de68 169ok ($class->new($monster)->bsstr(),
170 '1e+1234567890123456789012345678901234567890');
f9a08e12 171# cmp
172ok ($class->new($monster) > 0,1);
173
174# sub/mul
175ok ($class->new($monster)->bsub( $monster),0);
176ok ($class->new($monster)->bmul(2)->bsstr(),
177 '2e+1234567890123456789012345678901234567890');
178
179###############################################################################
b3abae2a 180# zero,inf,one,nan
ee15d750 181
394e6ffb 182$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
183$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
184$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
185$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
56b9c951 186
187###############################################################################
188# bone/binf etc as plain calls (Lite failed them)
189
190ok ($class->fzero(),0);
191ok ($class->fone(),1);
192ok ($class->fone('+'),1);
193ok ($class->fone('-'),-1);
194ok ($class->fnan(),'NaN');
195ok ($class->finf(),'inf');
196ok ($class->finf('+'),'inf');
197ok ($class->finf('-'),'-inf');
198ok ($class->finf('-inf'),'-inf');
61f5c3f5 199
56d9de68 200$class->accuracy(undef); $class->precision(undef); # reset
201
202###############################################################################
203# bug in bsstr()/numify() showed up in after-rounding in bdiv()
204
205$x = $class->new('0.008'); $y = $class->new(2);
206$x->bdiv(3,$y);
207ok ($x,'0.0027');
208
61f5c3f5 209###############################################################################
210# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
211# correctly modifies $x
212
61f5c3f5 213
214$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
215
216$class->precision(undef);
217$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
218
219$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
220
56d9de68 221{
222 no strict 'refs';
223 # A and P set => NaN
224 ${${class}.'::accuracy'} = 4; $x = $class->new(12);
225 $x->fsqrt(3); ok ($x,'NaN');
226 # supplied arg overrides set global
227 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
228 $class->accuracy(undef); $class->precision(undef); # reset for further tests
229}
230
231#############################################################################
13a12e00 232# can we call objectify (broken until v1.52)
233
56d9de68 234{
235 no strict;
236 $try =
237 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);';
238 $ans = eval $try;
239 ok ($ans,"$class 4 5");
240}
f9a08e12 241
990fb837 242#############################################################################
243# is_one('-') (broken until v1.64)
244
245ok ($class->new(-1)->is_one(),0);
246ok ($class->new(-1)->is_one('-'),1);
247
394e6ffb 2481; # all done
ee15d750 249
250###############################################################################
251# Perl 5.005 does not like ok ($x,undef)
252
253sub ok_undef
254 {
255 my $x = shift;
256
257 ok (1,1) and return if !defined $x;
258 ok ($x,'undef');
259 }
260
261__DATA__
b3abae2a 262$div_scale = 40;
263&flog
990fb837 2640::NaN
265-1::NaN
266-2::NaN
267# base > 0, base != 1
2682:-1:NaN
2692:0:NaN
2702:1:NaN
271# log(1) is always 1, regardless of $base
2721::0
2731:1:0
2741:2:0
b3abae2a 275# this is too slow for the testsuite
79c55733 276#2:0.6931471805599453094172321214581765680755
b3abae2a 277#2.718281828:0.9999999998311266953289851340574956564911
278#$div_scale = 20;
279#2.718281828:0.99999999983112669533
990fb837 280# too slow, too
b3abae2a 281#123:4.8112184355
79c55733 282$div_scale = 14;
b3abae2a 283#10:0:2.302585092994
61f5c3f5 284#1000:0:6.90775527898214
285#100:0:4.60517018598809
990fb837 2862::0.69314718055995
61f5c3f5 287#3.1415:0:1.14470039286086
990fb837 288# too slow
61f5c3f5 289#12345:0:9.42100640177928
290#0.001:0:-6.90775527898214
b3abae2a 291# reset for further tests
292$div_scale = 40;
990fb837 2931::0
394e6ffb 294&frsft
b3abae2a 295NaNfrsft:2:NaN
394e6ffb 2960:2:0
2971:1:0.5
2982:1:1
2994:1:2
300123:1:61.5
30132:3:4
302&flsft
b3abae2a 303NaNflsft:0:NaN
394e6ffb 3042:1:4
3054:3:32
3065:3:40
3071:2:4
3080:5:0
ee15d750 309&fnorm
3101:1
311-0:0
312fnormNaN:NaN
313+inf:inf
314-inf:-inf
315123:123
316-123.4567:-123.4567
027dc388 317# invalid inputs
3181__2:NaN
3191E1__2:NaN
32011__2E2:NaN
321#1.E3:NaN
322.2E-3.:NaN
323#1e3e4:NaN
324.2E2:20
ee15d750 325&as_number
3260:0
3271:1
3281.2:1
3292.345:2
330-2:-2
331-123.456:-123
332-200:-200
56d9de68 333# test for bug in brsft() not handling cases that return 0
3340.000641:0
3350.0006412:0
3360.00064123:0
3370.000641234:0
3380.0006412345:0
3390.00064123456:0
3400.000641234567:0
3410.0006412345678:0
3420.00064123456789:0
3430.1:0
3440.01:0
3450.001:0
3460.0001:0
3470.00001:0
3480.000001:0
3490.0000001:0
3500.00000001:0
3510.000000001:0
3520.0000000001:0
3530.00000000001:0
990fb837 3540.12345:0
3550.123456:0
3560.1234567:0
3570.12345678:0
3580.123456789:0
ee15d750 359&finf
3601:+:inf
3612:-:-inf
3623:abc:inf
56d9de68 363&as_hex
364+inf:inf
365-inf:-inf
366hexNaN:NaN
3670:0x0
3685:0x5
369-5:-0x5
370&as_bin
371+inf:inf
372-inf:-inf
373hexNaN:NaN
3740:0b0
3755:0b101
376-5:-0b101
ee15d750 377&numify
56d9de68 378# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output
ee15d750 3790:0e+1
380+1:1e+0
3811234:1234e+0
382NaN:NaN
383+inf:inf
384-inf:-inf
56d9de68 385-5:-5e+0
386100:1e+2
387-100:-1e+2
ee15d750 388&fnan
389abc:NaN
3902:NaN
391-2:NaN
3920:NaN
393&fone
3942:+:1
395-2:-:-1
396-2:+:1
3972:-:-1
3980::1
399-2::1
400abc::1
4012:abc:1
402&fsstr
403+inf:inf
404-inf:-inf
405abcfsstr:NaN
56d9de68 406-abcfsstr:NaN
ee15d750 4071234.567:1234567e-3
56d9de68 408123:123e+0
409-5:-5e+0
410-100:-1e+2
ee15d750 411&fstr
412+inf:::inf
413-inf:::-inf
414abcfstr:::NaN
4151234.567:9::1234.56700
4161234.567::-6:1234.567000
41712345:5::12345
4180.001234:6::0.00123400
4190.001234::-8:0.00123400
4200:4::0
4210::-4:0.0000
422&fnorm
423inf:inf
424+inf:inf
425-inf:-inf
426+infinity:NaN
427+-inf:NaN
428abc:NaN
429 1 a:NaN
4301bcd2:NaN
43111111b:NaN
432+1z:NaN
433-1z:NaN
4340:0
435+0:0
436+00:0
437+0_0_0:0
438000000_0000000_00000:0
439-0:0
440-0000:0
441+1:1
442+01:1
443+001:1
444+00000100000:100000
445123456789:123456789
446-1:-1
447-01:-1
448-001:-1
449-123456789:-123456789
450-00000100000:-100000
451123.456a:NaN
452123.456:123.456
4530.01:0.01
454.002:0.002
455+.2:0.2
456-0.0003:-0.0003
457-.0000000004:-0.0000000004
458123456E2:12345600
459123456E-2:1234.56
460-123456E2:-12345600
461-123456E-2:-1234.56
4621e1:10
4632e-11:0.00000000002
464# excercise _split
465 .02e-1:0.002
466 000001:1
467 -00001:-1
468 -1:-1
469 000.01:0.01
470 -000.0023:-0.0023
471 1.1e1:11
472-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
473-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
474&fpow
4752:2:4
4761:2:1
4771:3:1
478-1:2:1
479-1:3:-1
480123.456:2:15241.383936
4812:-2:0.25
4822:-3:0.125
483128:-2:0.00006103515625
484abc:123.456:NaN
485123.456:abc:NaN
486+inf:123.45:inf
487-inf:123.45:-inf
488+inf:-123.45:inf
489-inf:-123.45:-inf
79c55733 490# 2 ** 0.5 == sqrt(2)
491# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0)
4922:0.5:1.41421356237309504880168872420969807857
56b9c951 493#2:0.2:1.148698354997035006798626946777927589444
07d34614 494#6:1.5:14.6969384566990685891837044482353483518
56b9c951 495$div_scale = 20;
496#62.5:12.5:26447206647554886213592.3959144
497$div_scale = 40;
ee15d750 498&fneg
499fnegNaN:NaN
500+inf:-inf
501-inf:inf
502+0:0
503+1:-1
504-1:1
505+123456789:-123456789
506-123456789:123456789
507+123.456789:-123.456789
508-123456.789:123456.789
509&fabs
510fabsNaN:NaN
511+inf:inf
512-inf:inf
513+0:0
514+1:1
515-1:1
516+123456789:123456789
517-123456789:123456789
518+123.456789:123.456789
519-123456.789:123456.789
520&fround
521$round_mode = "trunc"
522+inf:5:inf
523-inf:5:-inf
5240:5:0
525NaNfround:5:NaN
526+10123456789:5:10123000000
527-10123456789:5:-10123000000
528+10123456789.123:5:10123000000
529-10123456789.123:5:-10123000000
530+10123456789:9:10123456700
531-10123456789:9:-10123456700
532+101234500:6:101234000
533-101234500:6:-101234000
534$round_mode = "zero"
535+20123456789:5:20123000000
536-20123456789:5:-20123000000
537+20123456789.123:5:20123000000
538-20123456789.123:5:-20123000000
539+20123456789:9:20123456800
540-20123456789:9:-20123456800
541+201234500:6:201234000
542-201234500:6:-201234000
543$round_mode = "+inf"
544+30123456789:5:30123000000
545-30123456789:5:-30123000000
546+30123456789.123:5:30123000000
547-30123456789.123:5:-30123000000
548+30123456789:9:30123456800
549-30123456789:9:-30123456800
550+301234500:6:301235000
551-301234500:6:-301234000
552$round_mode = "-inf"
553+40123456789:5:40123000000
554-40123456789:5:-40123000000
555+40123456789.123:5:40123000000
556-40123456789.123:5:-40123000000
557+40123456789:9:40123456800
558-40123456789:9:-40123456800
559+401234500:6:401234000
560-401234500:6:-401235000
561$round_mode = "odd"
562+50123456789:5:50123000000
563-50123456789:5:-50123000000
564+50123456789.123:5:50123000000
565-50123456789.123:5:-50123000000
566+50123456789:9:50123456800
567-50123456789:9:-50123456800
568+501234500:6:501235000
569-501234500:6:-501235000
570$round_mode = "even"
571+60123456789:5:60123000000
572-60123456789:5:-60123000000
573+60123456789:9:60123456800
574-60123456789:9:-60123456800
575+601234500:6:601234000
576-601234500:6:-601234000
577+60123456789.0123:5:60123000000
578-60123456789.0123:5:-60123000000
579&ffround
580$round_mode = "trunc"
581+inf:5:inf
582-inf:5:-inf
5830:5:0
584NaNffround:5:NaN
585+1.23:-1:1.2
586+1.234:-1:1.2
587+1.2345:-1:1.2
588+1.23:-2:1.23
589+1.234:-2:1.23
590+1.2345:-2:1.23
591+1.23:-3:1.230
592+1.234:-3:1.234
593+1.2345:-3:1.234
594-1.23:-1:-1.2
595+1.27:-1:1.2
596-1.27:-1:-1.2
597+1.25:-1:1.2
598-1.25:-1:-1.2
599+1.35:-1:1.3
600-1.35:-1:-1.3
601-0.0061234567890:-1:0.0
602-0.0061:-1:0.0
603-0.00612:-1:0.0
604-0.00612:-2:0.00
605-0.006:-1:0.0
606-0.006:-2:0.00
607-0.0006:-2:0.00
608-0.0006:-3:0.000
609-0.0065:-3:/-0\.006|-6e-03
610-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
611-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
6120.05:0:0
6130.5:0:0
6140.51:0:0
6150.41:0:0
616$round_mode = "zero"
617+2.23:-1:/2.2(?:0{5}\d+)?
618-2.23:-1:/-2.2(?:0{5}\d+)?
619+2.27:-1:/2.(?:3|29{5}\d+)
620-2.27:-1:/-2.(?:3|29{5}\d+)
621+2.25:-1:/2.2(?:0{5}\d+)?
622-2.25:-1:/-2.2(?:0{5}\d+)?
623+2.35:-1:/2.(?:3|29{5}\d+)
624-2.35:-1:/-2.(?:3|29{5}\d+)
625-0.0065:-1:0.0
626-0.0065:-2:/-0\.01|-1e-02
627-0.0065:-3:/-0\.006|-6e-03
628-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
629-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
6300.05:0:0
6310.5:0:0
6320.51:0:1
6330.41:0:0
634$round_mode = "+inf"
635+3.23:-1:/3.2(?:0{5}\d+)?
636-3.23:-1:/-3.2(?:0{5}\d+)?
637+3.27:-1:/3.(?:3|29{5}\d+)
638-3.27:-1:/-3.(?:3|29{5}\d+)
639+3.25:-1:/3.(?:3|29{5}\d+)
640-3.25:-1:/-3.2(?:0{5}\d+)?
641+3.35:-1:/3.(?:4|39{5}\d+)
642-3.35:-1:/-3.(?:3|29{5}\d+)
643-0.0065:-1:0.0
644-0.0065:-2:/-0\.01|-1e-02
645-0.0065:-3:/-0\.006|-6e-03
646-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
647-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
6480.05:0:0
6490.5:0:1
6500.51:0:1
6510.41:0:0
652$round_mode = "-inf"
653+4.23:-1:/4.2(?:0{5}\d+)?
654-4.23:-1:/-4.2(?:0{5}\d+)?
655+4.27:-1:/4.(?:3|29{5}\d+)
656-4.27:-1:/-4.(?:3|29{5}\d+)
657+4.25:-1:/4.2(?:0{5}\d+)?
658-4.25:-1:/-4.(?:3|29{5}\d+)
659+4.35:-1:/4.(?:3|29{5}\d+)
660-4.35:-1:/-4.(?:4|39{5}\d+)
661-0.0065:-1:0.0
662-0.0065:-2:/-0\.01|-1e-02
663-0.0065:-3:/-0\.007|-7e-03
664-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
665-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
6660.05:0:0
6670.5:0:0
6680.51:0:1
6690.41:0:0
670$round_mode = "odd"
671+5.23:-1:/5.2(?:0{5}\d+)?
672-5.23:-1:/-5.2(?:0{5}\d+)?
673+5.27:-1:/5.(?:3|29{5}\d+)
674-5.27:-1:/-5.(?:3|29{5}\d+)
675+5.25:-1:/5.(?:3|29{5}\d+)
676-5.25:-1:/-5.(?:3|29{5}\d+)
677+5.35:-1:/5.(?:3|29{5}\d+)
678-5.35:-1:/-5.(?:3|29{5}\d+)
679-0.0065:-1:0.0
680-0.0065:-2:/-0\.01|-1e-02
681-0.0065:-3:/-0\.007|-7e-03
682-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
683-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
6840.05:0:0
6850.5:0:1
6860.51:0:1
6870.41:0:0
688$round_mode = "even"
689+6.23:-1:/6.2(?:0{5}\d+)?
690-6.23:-1:/-6.2(?:0{5}\d+)?
691+6.27:-1:/6.(?:3|29{5}\d+)
692-6.27:-1:/-6.(?:3|29{5}\d+)
693+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
694-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
695+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
696-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
697-0.0065:-1:0.0
698-0.0065:-2:/-0\.01|-1e-02
699-0.0065:-3:/-0\.006|-7e-03
700-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
701-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
7020.05:0:0
7030.5:0:0
7040.51:0:1
7050.41:0:0
7060.01234567:-3:0.012
7070.01234567:-4:0.0123
7080.01234567:-5:0.01235
7090.01234567:-6:0.012346
7100.01234567:-7:0.0123457
7110.01234567:-8:0.01234567
7120.01234567:-9:0.012345670
7130.01234567:-12:0.012345670000
714&fcmp
715fcmpNaN:fcmpNaN:
716fcmpNaN:+0:
717+0:fcmpNaN:
718+0:+0:0
719-1:+0:-1
720+0:-1:1
721+1:+0:1
722+0:+1:-1
723-1:+1:-1
724+1:-1:1
725-1:-1:0
726+1:+1:0
727-1.1:0:-1
728+0:-1.1:1
729+1.1:+0:1
730+0:+1.1:-1
731+123:+123:0
732+123:+12:1
733+12:+123:-1
734-123:-123:0
735-123:-12:-1
736-12:-123:1
737+123:+124:-1
738+124:+123:1
739-123:-124:1
740-124:-123:-1
7410:0.01:-1
7420:0.0001:-1
7430:-0.0001:1
7440:-0.1:1
7450.1:0:1
7460.00001:0:1
747-0.0001:0:-1
748-0.1:0:-1
7490:0.0001234:-1
7500:-0.0001234:1
7510.0001234:0:1
752-0.0001234:0:-1
7530.0001:0.0005:-1
7540.0005:0.0001:1
7550.005:0.0001:1
7560.001:0.0005:1
7570.000001:0.0005:-1
7580.00000123:0.0005:-1
7590.00512:0.0001:1
7600.005:0.000112:1
7610.00123:0.0005:1
7621.5:2:-1
7632:1.5:1
7641.54321:234:-1
765234:1.54321:1
766# infinity
767-inf:5432112345:-1
768+inf:5432112345:1
769-inf:-5432112345:-1
770+inf:-5432112345:1
771-inf:54321.12345:-1
772+inf:54321.12345:1
773-inf:-54321.12345:-1
774+inf:-54321.12345:1
775+inf:+inf:0
776-inf:-inf:0
777+inf:-inf:1
778-inf:+inf:-1
779# return undef
780+inf:NaN:
781NaN:inf:
782-inf:NaN:
783NaN:-inf:
784&facmp
785fcmpNaN:fcmpNaN:
786fcmpNaN:+0:
787+0:fcmpNaN:
788+0:+0:0
789-1:+0:1
790+0:-1:-1
791+1:+0:1
792+0:+1:-1
793-1:+1:0
794+1:-1:0
795-1:-1:0
796+1:+1:0
797-1.1:0:1
798+0:-1.1:-1
799+1.1:+0:1
800+0:+1.1:-1
801+123:+123:0
802+123:+12:1
803+12:+123:-1
804-123:-123:0
805-123:-12:1
806-12:-123:-1
807+123:+124:-1
808+124:+123:1
809-123:-124:-1
810-124:-123:1
8110:0.01:-1
8120:0.0001:-1
8130:-0.0001:-1
8140:-0.1:-1
8150.1:0:1
8160.00001:0:1
817-0.0001:0:1
818-0.1:0:1
8190:0.0001234:-1
8200:-0.0001234:-1
8210.0001234:0:1
822-0.0001234:0:1
8230.0001:0.0005:-1
8240.0005:0.0001:1
8250.005:0.0001:1
8260.001:0.0005:1
8270.000001:0.0005:-1
8280.00000123:0.0005:-1
8290.00512:0.0001:1
8300.005:0.000112:1
8310.00123:0.0005:1
8321.5:2:-1
8332:1.5:1
8341.54321:234:-1
835234:1.54321:1
836# infinity
837-inf:5432112345:1
838+inf:5432112345:1
839-inf:-5432112345:1
840+inf:-5432112345:1
841-inf:54321.12345:1
842+inf:54321.12345:1
843-inf:-54321.12345:1
844+inf:-54321.12345:1
845+inf:+inf:0
846-inf:-inf:0
847+inf:-inf:0
848-inf:+inf:0
48b581a2 8495:inf:-1
850-1:inf:-1
8515:-inf:-1
852-1:-inf:-1
ee15d750 853# return undef
854+inf:facmpNaN:
855facmpNaN:inf:
856-inf:facmpNaN:
857facmpNaN:-inf:
858&fdec
859fdecNaN:NaN
860+inf:inf
861-inf:-inf
862+0:-1
863+1:0
864-1:-2
8651.23:0.23
866-1.23:-2.23
e745a66c 867100:99
868101:100
869-100:-101
870-99:-100
871-98:-99
87299:98
ee15d750 873&finc
874fincNaN:NaN
875+inf:inf
876-inf:-inf
877+0:1
878+1:2
879-1:0
8801.23:2.23
881-1.23:-0.23
e745a66c 882100:101
883-100:-99
884-99:-98
885-101:-100
88699:100
ee15d750 887&fadd
888abc:abc:NaN
889abc:+0:NaN
890+0:abc:NaN
13a12e00 891+inf:-inf:NaN
892-inf:+inf:NaN
ee15d750 893+inf:+inf:inf
894-inf:-inf:-inf
895baddNaN:+inf:NaN
896baddNaN:+inf:NaN
897+inf:baddNaN:NaN
898-inf:baddNaN:NaN
899+0:+0:0
900+1:+0:1
901+0:+1:1
902+1:+1:2
903-1:+0:-1
904+0:-1:-1
905-1:-1:-2
906-1:+1:0
907+1:-1:0
908+9:+1:10
909+99:+1:100
910+999:+1:1000
911+9999:+1:10000
912+99999:+1:100000
913+999999:+1:1000000
914+9999999:+1:10000000
915+99999999:+1:100000000
916+999999999:+1:1000000000
917+9999999999:+1:10000000000
918+99999999999:+1:100000000000
919+10:-1:9
920+100:-1:99
921+1000:-1:999
922+10000:-1:9999
923+100000:-1:99999
924+1000000:-1:999999
925+10000000:-1:9999999
926+100000000:-1:99999999
927+1000000000:-1:999999999
928+10000000000:-1:9999999999
929+123456789:+987654321:1111111110
930-123456789:+987654321:864197532
931-123456789:-987654321:-1111111110
932+123456789:-987654321:-864197532
9330.001234:0.0001234:0.0013574
934&fsub
935abc:abc:NaN
936abc:+0:NaN
937+0:abc:NaN
938+inf:-inf:inf
939-inf:+inf:-inf
13a12e00 940+inf:+inf:NaN
941-inf:-inf:NaN
ee15d750 942baddNaN:+inf:NaN
943baddNaN:+inf:NaN
944+inf:baddNaN:NaN
945-inf:baddNaN:NaN
946+0:+0:0
947+1:+0:1
948+0:+1:-1
949+1:+1:0
950-1:+0:-1
951+0:-1:1
952-1:-1:0
953-1:+1:-2
954+1:-1:2
955+9:+1:8
956+99:+1:98
957+999:+1:998
958+9999:+1:9998
959+99999:+1:99998
960+999999:+1:999998
961+9999999:+1:9999998
962+99999999:+1:99999998
963+999999999:+1:999999998
964+9999999999:+1:9999999998
965+99999999999:+1:99999999998
966+10:-1:11
967+100:-1:101
968+1000:-1:1001
969+10000:-1:10001
970+100000:-1:100001
971+1000000:-1:1000001
972+10000000:-1:10000001
973+100000000:-1:100000001
974+1000000000:-1:1000000001
975+10000000000:-1:10000000001
976+123456789:+987654321:-864197532
977-123456789:+987654321:-1111111110
978-123456789:-987654321:864197532
979+123456789:-987654321:1111111110
980&fmul
981abc:abc:NaN
982abc:+0:NaN
983+0:abc:NaN
984+inf:NaNmul:NaN
985+inf:NaNmul:NaN
986NaNmul:+inf:NaN
987NaNmul:-inf:NaN
988+inf:+inf:inf
989+inf:-inf:-inf
990+inf:-inf:-inf
991+inf:+inf:inf
992+inf:123.34:inf
993+inf:-123.34:-inf
994-inf:123.34:-inf
995-inf:-123.34:inf
996123.34:+inf:inf
997-123.34:+inf:-inf
998123.34:-inf:-inf
999-123.34:-inf:inf
1000+0:+0:0
1001+0:+1:0
1002+1:+0:0
1003+0:-1:0
1004-1:+0:0
1005+123456789123456789:+0:0
1006+0:+123456789123456789:0
1007-1:-1:1
1008-1:+1:-1
1009+1:-1:-1
1010+1:+1:1
1011+2:+3:6
1012-2:+3:-6
1013+2:-3:-6
1014-2:-3:6
1015+111:+111:12321
1016+10101:+10101:102030201
1017+1001001:+1001001:1002003002001
1018+100010001:+100010001:10002000300020001
1019+10000100001:+10000100001:100002000030000200001
1020+11111111111:+9:99999999999
1021+22222222222:+9:199999999998
1022+33333333333:+9:299999999997
1023+44444444444:+9:399999999996
1024+55555555555:+9:499999999995
1025+66666666666:+9:599999999994
1026+77777777777:+9:699999999993
1027+88888888888:+9:799999999992
1028+99999999999:+9:899999999991
10296:120:720
103010:10000:100000
b3abae2a 1031&fdiv-list
10320:0:NaN,NaN
10330:1:0,0
10349:4:2.25,1
10359:5:1.8,4
ee15d750 1036&fdiv
1037$div_scale = 40; $round_mode = 'even'
1038abc:abc:NaN
1039abc:+1:abc:NaN
1040+1:abc:NaN
1041-1:abc:NaN
10420:abc:NaN
1043+0:+0:NaN
1044+0:+1:0
1045+1:+0:inf
1046+3214:+0:inf
1047+0:-1:0
1048-1:+0:-inf
1049-3214:+0:-inf
1050+1:+1:1
1051-1:-1:1
1052+1:-1:-1
1053-1:+1:-1
1054+1:+2:0.5
1055+2:+1:2
1056123:+inf:0
1057123:-inf:0
1058+10:+5:2
1059+100:+4:25
1060+1000:+8:125
1061+10000:+16:625
1062+10000:-16:-625
1063+999999999999:+9:111111111111
1064+999999999999:+99:10101010101
1065+999999999999:+999:1001001001
1066+999999999999:+9999:100010001
1067+999999999999999:+99999:10000100001
1068+1000000000:+9:111111111.1111111111111111111111111111111
1069+2000000000:+9:222222222.2222222222222222222222222222222
1070+3000000000:+9:333333333.3333333333333333333333333333333
1071+4000000000:+9:444444444.4444444444444444444444444444444
1072+5000000000:+9:555555555.5555555555555555555555555555556
1073+6000000000:+9:666666666.6666666666666666666666666666667
1074+7000000000:+9:777777777.7777777777777777777777777777778
1075+8000000000:+9:888888888.8888888888888888888888888888889
1076+9000000000:+9:1000000000
1077+35500000:+113:314159.2920353982300884955752212389380531
1078+71000000:+226:314159.2920353982300884955752212389380531
1079+106500000:+339:314159.2920353982300884955752212389380531
1080+1000000000:+3:333333333.3333333333333333333333333333333
10812:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 1082123456:1:123456
ee15d750 1083$div_scale = 20
1084+1000000000:+9:111111111.11111111111
1085+2000000000:+9:222222222.22222222222
1086+3000000000:+9:333333333.33333333333
1087+4000000000:+9:444444444.44444444444
1088+5000000000:+9:555555555.55555555556
1089+6000000000:+9:666666666.66666666667
1090+7000000000:+9:777777777.77777777778
1091+8000000000:+9:888888888.88888888889
1092+9000000000:+9:1000000000
10931:10:0.1
10941:100:0.01
10951:1000:0.001
10961:10000:0.0001
10971:504:0.001984126984126984127
10982:1.987654321:1.0062111801179738436
394e6ffb 1099123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 1100# the next two cases are the "old" behaviour, but are now (>v0.01) different
1101#+35500000:+113:314159.292035398230088
1102#+71000000:+226:314159.292035398230088
1103+35500000:+113:314159.29203539823009
1104+71000000:+226:314159.29203539823009
1105+106500000:+339:314159.29203539823009
1106+1000000000:+3:333333333.33333333333
1107$div_scale = 1
1108# round to accuracy 1 after bdiv
1109+124:+3:40
394e6ffb 1110123456789.1234:1:100000000
ee15d750 1111# reset scale for further tests
1112$div_scale = 40
1113&fmod
61f5c3f5 1114+9:4:1
1115+9:5:4
1116+9000:56:40
1117+56:9000:56
1118# inf handling, see table in doc
11190:inf:0
11200:-inf:0
11215:inf:5
11225:-inf:5
1123-5:inf:-5
1124-5:-inf:-5
1125inf:5:0
1126-inf:5:0
1127inf:-5:0
1128-inf:-5:0
11295:5:0
1130-5:-5:0
b3abae2a 1131inf:inf:NaN
1132-inf:-inf:NaN
1133-inf:inf:NaN
1134inf:-inf:NaN
61f5c3f5 11358:0:8
1136inf:0:inf
1137# exceptions to reminder rule
1138-inf:0:-inf
1139-8:0:-8
11400:0:NaN
1141abc:abc:NaN
1142abc:1:abc:NaN
11431:abc:NaN
11440:0:NaN
11450:1:0
11461:0:1
11470:-1:0
1148-1:0:-1
11491:1:0
1150-1:-1:0
11511:-1:0
1152-1:1:0
11531:2:1
11542:1:0
11551000000000:9:1
11562000000000:9:2
11573000000000:9:3
11584000000000:9:4
11595000000000:9:5
11606000000000:9:6
11617000000000:9:7
11628000000000:9:8
11639000000000:9:0
116435500000:113:33
116571000000:226:66
1166106500000:339:99
11671000000000:3:1
116810:5:0
1169100:4:0
11701000:8:0
117110000:16:0
1172999999999999:9:0
1173999999999999:99:0
1174999999999999:999:0
1175999999999999:9999:0
1176999999999999999:99999:0
1177-9:+5:1
1178+9:-5:-1
1179-9:-5:-4
1180-5:3:1
1181-2:3:1
11824:3:1
11831:3:1
1184-5:-3:-2
1185-2:-3:-2
11864:-3:-2
11871:-3:-2
11884095:4095:0
1189100041000510123:3:0
1190152403346:12345:4321
119187654321:87654321:0
1192# now some floating point tests
1193123:2.5:0.5
11941230:2.5:0
1195123.4:2.5:0.9
1196123e1:25:5
b3abae2a 1197&ffac
1198Nanfac:NaN
1199-1:NaN
12000:1
12011:1
12022:2
12033:6
12044:24
12055:120
12066:720
120710:3628800
120811:39916800
120912:479001600
990fb837 1210&froot
1211# sqrt()
1212+0:2:0
1213+1:2:1
1214-1:2:NaN
1215# -$x ** (1/2) => -$y, but not in froot()
1216-123.456:2:NaN
1217+inf:2:inf
1218-inf:2:NaN
12192:2:1.41421356237309504880168872420969807857
1220-2:2:NaN
12214:2:2
12229:2:3
122316:2:4
1224100:2:10
1225123.456:2:11.11107555549866648462149404118219234119
122615241.38393:2:123.4559999756998444766131352122991626468
12271.44:2:1.2
122812:2:3.464101615137754587054892683011744733886
12290.49:2:0.7
12300.0049:2:0.07
1231# invalid ones
12321:NaN:NaN
1233-1:NaN:NaN
12340:NaN:NaN
1235-inf:NaN:NaN
1236+inf:NaN:NaN
1237NaN:0:NaN
1238NaN:2:NaN
1239NaN:inf:NaN
1240NaN:inf:NaN
124112:-inf:NaN
124212:inf:NaN
1243+0:0:NaN
1244+1:0:NaN
1245-1:0:NaN
1246-2:0:NaN
1247-123.45:0:NaN
1248+inf:0:NaN
124912:1:12
1250-12:1:NaN
12518:-1:NaN
1252-8:-1:NaN
1253# cubic root
12548:3:2
1255-8:3:NaN
1256# fourths root
125716:4:2
125881:4:3
ee15d750 1259&fsqrt
1260+0:0
1261-1:NaN
1262-2:NaN
1263-16:NaN
1264-123.45:NaN
1265nanfsqrt:NaN
1266+inf:inf
1267-inf:NaN
394e6ffb 12681:1
12692:1.41421356237309504880168872420969807857
12704:2
12719:3
127216:4
1273100:10
1274123.456:11.11107555549866648462149404118219234119
127515241.38393:123.4559999756998444766131352122991626468
12761.44:1.2
1277# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
12781.44E10:120000
12792e10:141421.356237309504880168872420969807857
b3abae2a 1280144e20:120000000000
61f5c3f5 1281# proved to be an endless loop under 7-9
128212:3.464101615137754587054892683011744733886
990fb837 12830.49:0.7
12840.0049:0.07
027dc388 1285&is_nan
1286123:0
1287abc:1
1288NaN:1
1289-123:0
1290&is_inf
1291+inf::1
1292-inf::1
1293abc::0
12941::0
1295NaN::0
1296-1::0
1297+inf:-:0
1298+inf:+:1
1299-inf:-:1
1300-inf:+:0
1301# it must be exactly /^[+-]inf$/
1302+infinity::0
1303-infinity::0
ee15d750 1304&is_odd
1305abc:0
13060:0
1307-1:1
1308-3:1
13091:1
13103:1
13111000001:1
13121000002:0
1313+inf:0
1314-inf:0
1315123.45:0
1316-123.45:0
13172:0
b3abae2a 1318&is_int
1319NaNis_int:0
13200:1
13211:1
13222:1
1323-2:1
1324-1:1
1325-inf:0
1326+inf:0
1327123.4567:0
1328-0.1:0
1329-0.002:0
ee15d750 1330&is_even
1331abc:0
13320:1
1333-1:0
1334-3:0
13351:0
13363:0
13371000001:0
13381000002:1
13392:1
1340+inf:0
1341-inf:0
1342123.456:0
1343-123.456:0
b3abae2a 13440.01:0
1345-0.01:0
1346120:1
13471200:1
1348-1200:1
ee15d750 1349&is_positive
13500:1
13511:1
1352-1:0
1353-123:0
1354NaN:0
1355-inf:0
1356+inf:1
1357&is_negative
13580:0
13591:0
1360-1:1
1361-123:1
1362NaN:0
1363-inf:1
1364+inf:0
1365&parts
13660:0 1
13671:1 0
1368123:123 0
1369-123:-123 0
1370-1200:-12 2
1371NaNparts:NaN NaN
1372+inf:inf inf
1373-inf:-inf inf
1374&exponent
13750:1
13761:0
1377123:0
1378-123:0
1379-1200:2
1380+inf:inf
1381-inf:inf
1382NaNexponent:NaN
1383&mantissa
13840:0
13851:1
1386123:123
1387-123:-123
1388-1200:-12
1389+inf:inf
1390-inf:-inf
1391NaNmantissa:NaN
1392&length
1393123:3
1394-123:3
13950:1
13961:1
139712345678901234567890:20
1398&is_zero
1399NaNzero:0
1400+inf:0
1401-inf:0
14020:1
1403-1:0
14041:0
1405&is_one
1406NaNone:0
1407+inf:0
1408-inf:0
14090:0
14102:0
14111:1
1412-1:0
1413-2:0
027dc388 1414&ffloor
ee15d750 14150:0
1416abc:NaN
1417+inf:inf
1418-inf:-inf
14191:1
1420-51:-51
1421-51.2:-52
142212.2:12
990fb837 14230.12345:0
14240.123456:0
14250.1234567:0
14260.12345678:0
14270.123456789:0
027dc388 1428&fceil
ee15d750 14290:0
1430abc:NaN
1431+inf:inf
1432-inf:-inf
14331:1
1434-51:-51
1435-51.2:-51
143612.2:13