cleanup's
[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
ee15d750 5while (<DATA>)
6 {
d614cd8b 7 chomp;
ee15d750 8 $_ =~ s/#.*$//; # remove comments
9 $_ =~ s/\s+$//; # trailing spaces
10 next if /^$/; # skip empty lines & comments
11 if (s/^&//)
12 {
13 $f = $_;
14 }
15 elsif (/^\$/)
16 {
17 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
18 #print "\$setup== $setup\n";
19 }
20 else
21 {
22 if (m|^(.*?):(/.+)$|)
23 {
24 $ans = $2;
25 @args = split(/:/,$1,99);
26 }
27 else
28 {
29 @args = split(/:/,$_,99); $ans = pop(@args);
30 }
31 $try = "\$x = new $class \"$args[0]\";";
32 if ($f eq "fnorm")
33 {
34 $try .= "\$x;";
35 } elsif ($f eq "finf") {
36 $try .= "\$x->finf('$args[1]');";
027dc388 37 } elsif ($f eq "is_inf") {
38 $try .= "\$x->is_inf('$args[1]');";
ee15d750 39 } elsif ($f eq "fone") {
40 $try .= "\$x->bone('$args[1]');";
41 } elsif ($f eq "fstr") {
42 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
43 $try .= '$x->fstr();';
ee15d750 44 } elsif ($f eq "parts") {
48b581a2 45 # ->bstr() to see if an object is returned
ee15d750 46 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
47 $try .= '"$a $b";';
ee15d750 48 } elsif ($f eq "exponent") {
48b581a2 49 # ->bstr() to see if an object is returned
ee15d750 50 $try .= '$x->exponent()->bstr();';
51 } elsif ($f eq "mantissa") {
48b581a2 52 # ->bstr() to see if an object is returned
ee15d750 53 $try .= '$x->mantissa()->bstr();';
027dc388 54 } elsif ($f eq "numify") {
55 $try .= "\$x->numify();";
56 } elsif ($f eq "length") {
57 $try .= "\$x->length();";
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 "as_number") {
65 $try .= '$x->as_number();';
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 "flog") {
77 $try .= "$setup; \$x->flog();";
78 } elsif ($f eq "ffac") {
79 $try .= "$setup; \$x->ffac();";
ee15d750 80 }
81 else
82 {
83 $try .= "\$y = new $class \"$args[1]\";";
84 if ($f eq "fcmp") {
85 $try .= '$x <=> $y;';
86 } elsif ($f eq "facmp") {
87 $try .= '$x->facmp($y);';
88 } elsif ($f eq "fpow") {
89 $try .= '$x ** $y;';
90 } elsif ($f eq "fadd") {
91 $try .= '$x + $y;';
92 } elsif ($f eq "fsub") {
93 $try .= '$x - $y;';
94 } elsif ($f eq "fmul") {
95 $try .= '$x * $y;';
96 } elsif ($f eq "fdiv") {
97 $try .= "$setup; \$x / \$y;";
b3abae2a 98 } elsif ($f eq "fdiv-list") {
99 $try .= "$setup; join(',',\$x->fdiv(\$y));";
394e6ffb 100 } elsif ($f eq "frsft") {
101 $try .= '$x >> $y;';
102 } elsif ($f eq "flsft") {
103 $try .= '$x << $y;';
ee15d750 104 } elsif ($f eq "fmod") {
105 $try .= '$x % $y;';
106 } else { warn "Unknown op '$f'"; }
107 }
e745a66c 108 # print "# Trying: '$try'\n";
ee15d750 109 $ans1 = eval $try;
110 if ($ans =~ m|^/(.*)$|)
111 {
112 my $pat = $1;
113 if ($ans1 =~ /$pat/)
114 {
115 ok (1,1);
116 }
117 else
118 {
119 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
120 }
121 }
122 else
123 {
124 if ($ans eq "")
125 {
126 ok_undef ($ans1);
127 }
128 else
129 {
130 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
131 if (ref($ans1) eq "$class")
132 {
027dc388 133 # float numbers are normalized (for now), so mantissa shouldn't have
134 # trailing zeros
ee15d750 135 #print $ans1->_trailing_zeros(),"\n";
136 print "# Has trailing zeros after '$try'\n"
137 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
138 }
139 }
140 } # end pattern or string
141 }
142 } # end while
143
394e6ffb 144# check whether $class->new( Math::BigInt->new()) destroys it
145# ($y == 12 in this case)
ee15d750 146$x = Math::BigInt->new(1200); $y = $class->new($x);
147ok ($y,1200); ok ($x,1200);
148
149###############################################################################
b3abae2a 150# zero,inf,one,nan
ee15d750 151
394e6ffb 152$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
153$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
154$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
155$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
56b9c951 156
157###############################################################################
158# bone/binf etc as plain calls (Lite failed them)
159
160ok ($class->fzero(),0);
161ok ($class->fone(),1);
162ok ($class->fone('+'),1);
163ok ($class->fone('-'),-1);
164ok ($class->fnan(),'NaN');
165ok ($class->finf(),'inf');
166ok ($class->finf('+'),'inf');
167ok ($class->finf('-'),'-inf');
168ok ($class->finf('-inf'),'-inf');
61f5c3f5 169
170###############################################################################
171# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
172# correctly modifies $x
173
174$class->accuracy(undef); $class->precision(undef); # reset
175
176$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
177
178$class->precision(undef);
179$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
180
181$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
182
183# A and P set => NaN
b3abae2a 184${${class}.'::accuracy'} = 4; $x = $class->new(12); $x->fsqrt(3); ok ($x,'NaN');
61f5c3f5 185# supplied arg overrides set global
186$class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
187
188$class->accuracy(undef); $class->precision(undef); # reset for further tests
394e6ffb 189
13a12e00 190###############################################################################
191# can we call objectify (broken until v1.52)
192
193$try = '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);';
194$ans = eval $try;
195ok ($ans,"$class 4 5");
196
394e6ffb 1971; # all done
ee15d750 198
199###############################################################################
200# Perl 5.005 does not like ok ($x,undef)
201
202sub ok_undef
203 {
204 my $x = shift;
205
206 ok (1,1) and return if !defined $x;
207 ok ($x,'undef');
208 }
209
210__DATA__
b3abae2a 211$div_scale = 40;
212&flog
2130:NaN
214-1:NaN
215-2:NaN
2161:0
217# this is too slow for the testsuite
79c55733 218#2:0.6931471805599453094172321214581765680755
b3abae2a 219#2.718281828:0.9999999998311266953289851340574956564911
220#$div_scale = 20;
221#2.718281828:0.99999999983112669533
b3abae2a 222# too slow, too (or hangs?)
223#123:4.8112184355
79c55733 224$div_scale = 14;
b3abae2a 225#10:0:2.302585092994
61f5c3f5 226#1000:0:6.90775527898214
227#100:0:4.60517018598809
79c55733 2282:0:0.69314718055995
61f5c3f5 229#3.1415:0:1.14470039286086
230#12345:0:9.42100640177928
231#0.001:0:-6.90775527898214
b3abae2a 232# reset for further tests
233$div_scale = 40;
79c55733 2341:0
394e6ffb 235&frsft
b3abae2a 236NaNfrsft:2:NaN
394e6ffb 2370:2:0
2381:1:0.5
2392:1:1
2404:1:2
241123:1:61.5
24232:3:4
243&flsft
b3abae2a 244NaNflsft:0:NaN
394e6ffb 2452:1:4
2464:3:32
2475:3:40
2481:2:4
2490:5:0
ee15d750 250&fnorm
2511:1
252-0:0
253fnormNaN:NaN
254+inf:inf
255-inf:-inf
256123:123
257-123.4567:-123.4567
027dc388 258# invalid inputs
2591__2:NaN
2601E1__2:NaN
26111__2E2:NaN
262#1.E3:NaN
263.2E-3.:NaN
264#1e3e4:NaN
265.2E2:20
ee15d750 266&as_number
2670:0
2681:1
2691.2:1
2702.345:2
271-2:-2
272-123.456:-123
273-200:-200
274&finf
2751:+:inf
2762:-:-inf
2773:abc:inf
278&numify
2790:0e+1
280+1:1e+0
2811234:1234e+0
282NaN:NaN
283+inf:inf
284-inf:-inf
285&fnan
286abc:NaN
2872:NaN
288-2:NaN
2890:NaN
290&fone
2912:+:1
292-2:-:-1
293-2:+:1
2942:-:-1
2950::1
296-2::1
297abc::1
2982:abc:1
299&fsstr
300+inf:inf
301-inf:-inf
302abcfsstr:NaN
3031234.567:1234567e-3
304&fstr
305+inf:::inf
306-inf:::-inf
307abcfstr:::NaN
3081234.567:9::1234.56700
3091234.567::-6:1234.567000
31012345:5::12345
3110.001234:6::0.00123400
3120.001234::-8:0.00123400
3130:4::0
3140::-4:0.0000
315&fnorm
316inf:inf
317+inf:inf
318-inf:-inf
319+infinity:NaN
320+-inf:NaN
321abc:NaN
322 1 a:NaN
3231bcd2:NaN
32411111b:NaN
325+1z:NaN
326-1z:NaN
3270:0
328+0:0
329+00:0
330+0_0_0:0
331000000_0000000_00000:0
332-0:0
333-0000:0
334+1:1
335+01:1
336+001:1
337+00000100000:100000
338123456789:123456789
339-1:-1
340-01:-1
341-001:-1
342-123456789:-123456789
343-00000100000:-100000
344123.456a:NaN
345123.456:123.456
3460.01:0.01
347.002:0.002
348+.2:0.2
349-0.0003:-0.0003
350-.0000000004:-0.0000000004
351123456E2:12345600
352123456E-2:1234.56
353-123456E2:-12345600
354-123456E-2:-1234.56
3551e1:10
3562e-11:0.00000000002
357# excercise _split
358 .02e-1:0.002
359 000001:1
360 -00001:-1
361 -1:-1
362 000.01:0.01
363 -000.0023:-0.0023
364 1.1e1:11
365-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
366-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
367&fpow
3682:2:4
3691:2:1
3701:3:1
371-1:2:1
372-1:3:-1
373123.456:2:15241.383936
3742:-2:0.25
3752:-3:0.125
376128:-2:0.00006103515625
377abc:123.456:NaN
378123.456:abc:NaN
379+inf:123.45:inf
380-inf:123.45:-inf
381+inf:-123.45:inf
382-inf:-123.45:-inf
79c55733 383# 2 ** 0.5 == sqrt(2)
384# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0)
3852:0.5:1.41421356237309504880168872420969807857
56b9c951 386#2:0.2:1.148698354997035006798626946777927589444
3876:1.5:14.6969384566990685891837044482353483518
388$div_scale = 20;
389#62.5:12.5:26447206647554886213592.3959144
390$div_scale = 40;
ee15d750 391&fneg
392fnegNaN:NaN
393+inf:-inf
394-inf:inf
395+0:0
396+1:-1
397-1:1
398+123456789:-123456789
399-123456789:123456789
400+123.456789:-123.456789
401-123456.789:123456.789
402&fabs
403fabsNaN:NaN
404+inf:inf
405-inf:inf
406+0:0
407+1:1
408-1:1
409+123456789:123456789
410-123456789:123456789
411+123.456789:123.456789
412-123456.789:123456.789
413&fround
414$round_mode = "trunc"
415+inf:5:inf
416-inf:5:-inf
4170:5:0
418NaNfround:5:NaN
419+10123456789:5:10123000000
420-10123456789:5:-10123000000
421+10123456789.123:5:10123000000
422-10123456789.123:5:-10123000000
423+10123456789:9:10123456700
424-10123456789:9:-10123456700
425+101234500:6:101234000
426-101234500:6:-101234000
427$round_mode = "zero"
428+20123456789:5:20123000000
429-20123456789:5:-20123000000
430+20123456789.123:5:20123000000
431-20123456789.123:5:-20123000000
432+20123456789:9:20123456800
433-20123456789:9:-20123456800
434+201234500:6:201234000
435-201234500:6:-201234000
436$round_mode = "+inf"
437+30123456789:5:30123000000
438-30123456789:5:-30123000000
439+30123456789.123:5:30123000000
440-30123456789.123:5:-30123000000
441+30123456789:9:30123456800
442-30123456789:9:-30123456800
443+301234500:6:301235000
444-301234500:6:-301234000
445$round_mode = "-inf"
446+40123456789:5:40123000000
447-40123456789:5:-40123000000
448+40123456789.123:5:40123000000
449-40123456789.123:5:-40123000000
450+40123456789:9:40123456800
451-40123456789:9:-40123456800
452+401234500:6:401234000
453-401234500:6:-401235000
454$round_mode = "odd"
455+50123456789:5:50123000000
456-50123456789:5:-50123000000
457+50123456789.123:5:50123000000
458-50123456789.123:5:-50123000000
459+50123456789:9:50123456800
460-50123456789:9:-50123456800
461+501234500:6:501235000
462-501234500:6:-501235000
463$round_mode = "even"
464+60123456789:5:60123000000
465-60123456789:5:-60123000000
466+60123456789:9:60123456800
467-60123456789:9:-60123456800
468+601234500:6:601234000
469-601234500:6:-601234000
470+60123456789.0123:5:60123000000
471-60123456789.0123:5:-60123000000
472&ffround
473$round_mode = "trunc"
474+inf:5:inf
475-inf:5:-inf
4760:5:0
477NaNffround:5:NaN
478+1.23:-1:1.2
479+1.234:-1:1.2
480+1.2345:-1:1.2
481+1.23:-2:1.23
482+1.234:-2:1.23
483+1.2345:-2:1.23
484+1.23:-3:1.230
485+1.234:-3:1.234
486+1.2345:-3:1.234
487-1.23:-1:-1.2
488+1.27:-1:1.2
489-1.27:-1:-1.2
490+1.25:-1:1.2
491-1.25:-1:-1.2
492+1.35:-1:1.3
493-1.35:-1:-1.3
494-0.0061234567890:-1:0.0
495-0.0061:-1:0.0
496-0.00612:-1:0.0
497-0.00612:-2:0.00
498-0.006:-1:0.0
499-0.006:-2:0.00
500-0.0006:-2:0.00
501-0.0006:-3:0.000
502-0.0065:-3:/-0\.006|-6e-03
503-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
504-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5050.05:0:0
5060.5:0:0
5070.51:0:0
5080.41:0:0
509$round_mode = "zero"
510+2.23:-1:/2.2(?:0{5}\d+)?
511-2.23:-1:/-2.2(?:0{5}\d+)?
512+2.27:-1:/2.(?:3|29{5}\d+)
513-2.27:-1:/-2.(?:3|29{5}\d+)
514+2.25:-1:/2.2(?:0{5}\d+)?
515-2.25:-1:/-2.2(?:0{5}\d+)?
516+2.35:-1:/2.(?:3|29{5}\d+)
517-2.35:-1:/-2.(?:3|29{5}\d+)
518-0.0065:-1:0.0
519-0.0065:-2:/-0\.01|-1e-02
520-0.0065:-3:/-0\.006|-6e-03
521-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
522-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5230.05:0:0
5240.5:0:0
5250.51:0:1
5260.41:0:0
527$round_mode = "+inf"
528+3.23:-1:/3.2(?:0{5}\d+)?
529-3.23:-1:/-3.2(?:0{5}\d+)?
530+3.27:-1:/3.(?:3|29{5}\d+)
531-3.27:-1:/-3.(?:3|29{5}\d+)
532+3.25:-1:/3.(?:3|29{5}\d+)
533-3.25:-1:/-3.2(?:0{5}\d+)?
534+3.35:-1:/3.(?:4|39{5}\d+)
535-3.35:-1:/-3.(?:3|29{5}\d+)
536-0.0065:-1:0.0
537-0.0065:-2:/-0\.01|-1e-02
538-0.0065:-3:/-0\.006|-6e-03
539-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
540-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5410.05:0:0
5420.5:0:1
5430.51:0:1
5440.41:0:0
545$round_mode = "-inf"
546+4.23:-1:/4.2(?:0{5}\d+)?
547-4.23:-1:/-4.2(?:0{5}\d+)?
548+4.27:-1:/4.(?:3|29{5}\d+)
549-4.27:-1:/-4.(?:3|29{5}\d+)
550+4.25:-1:/4.2(?:0{5}\d+)?
551-4.25:-1:/-4.(?:3|29{5}\d+)
552+4.35:-1:/4.(?:3|29{5}\d+)
553-4.35:-1:/-4.(?:4|39{5}\d+)
554-0.0065:-1:0.0
555-0.0065:-2:/-0\.01|-1e-02
556-0.0065:-3:/-0\.007|-7e-03
557-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
558-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5590.05:0:0
5600.5:0:0
5610.51:0:1
5620.41:0:0
563$round_mode = "odd"
564+5.23:-1:/5.2(?:0{5}\d+)?
565-5.23:-1:/-5.2(?:0{5}\d+)?
566+5.27:-1:/5.(?:3|29{5}\d+)
567-5.27:-1:/-5.(?:3|29{5}\d+)
568+5.25:-1:/5.(?:3|29{5}\d+)
569-5.25:-1:/-5.(?:3|29{5}\d+)
570+5.35:-1:/5.(?:3|29{5}\d+)
571-5.35:-1:/-5.(?:3|29{5}\d+)
572-0.0065:-1:0.0
573-0.0065:-2:/-0\.01|-1e-02
574-0.0065:-3:/-0\.007|-7e-03
575-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
576-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5770.05:0:0
5780.5:0:1
5790.51:0:1
5800.41:0:0
581$round_mode = "even"
582+6.23:-1:/6.2(?:0{5}\d+)?
583-6.23:-1:/-6.2(?:0{5}\d+)?
584+6.27:-1:/6.(?:3|29{5}\d+)
585-6.27:-1:/-6.(?:3|29{5}\d+)
586+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
587-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
588+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
589-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
590-0.0065:-1:0.0
591-0.0065:-2:/-0\.01|-1e-02
592-0.0065:-3:/-0\.006|-7e-03
593-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
594-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5950.05:0:0
5960.5:0:0
5970.51:0:1
5980.41:0:0
5990.01234567:-3:0.012
6000.01234567:-4:0.0123
6010.01234567:-5:0.01235
6020.01234567:-6:0.012346
6030.01234567:-7:0.0123457
6040.01234567:-8:0.01234567
6050.01234567:-9:0.012345670
6060.01234567:-12:0.012345670000
607&fcmp
608fcmpNaN:fcmpNaN:
609fcmpNaN:+0:
610+0:fcmpNaN:
611+0:+0:0
612-1:+0:-1
613+0:-1:1
614+1:+0:1
615+0:+1:-1
616-1:+1:-1
617+1:-1:1
618-1:-1:0
619+1:+1:0
620-1.1:0:-1
621+0:-1.1:1
622+1.1:+0:1
623+0:+1.1:-1
624+123:+123:0
625+123:+12:1
626+12:+123:-1
627-123:-123:0
628-123:-12:-1
629-12:-123:1
630+123:+124:-1
631+124:+123:1
632-123:-124:1
633-124:-123:-1
6340:0.01:-1
6350:0.0001:-1
6360:-0.0001:1
6370:-0.1:1
6380.1:0:1
6390.00001:0:1
640-0.0001:0:-1
641-0.1:0:-1
6420:0.0001234:-1
6430:-0.0001234:1
6440.0001234:0:1
645-0.0001234:0:-1
6460.0001:0.0005:-1
6470.0005:0.0001:1
6480.005:0.0001:1
6490.001:0.0005:1
6500.000001:0.0005:-1
6510.00000123:0.0005:-1
6520.00512:0.0001:1
6530.005:0.000112:1
6540.00123:0.0005:1
6551.5:2:-1
6562:1.5:1
6571.54321:234:-1
658234:1.54321:1
659# infinity
660-inf:5432112345:-1
661+inf:5432112345:1
662-inf:-5432112345:-1
663+inf:-5432112345:1
664-inf:54321.12345:-1
665+inf:54321.12345:1
666-inf:-54321.12345:-1
667+inf:-54321.12345:1
668+inf:+inf:0
669-inf:-inf:0
670+inf:-inf:1
671-inf:+inf:-1
672# return undef
673+inf:NaN:
674NaN:inf:
675-inf:NaN:
676NaN:-inf:
677&facmp
678fcmpNaN:fcmpNaN:
679fcmpNaN:+0:
680+0:fcmpNaN:
681+0:+0:0
682-1:+0:1
683+0:-1:-1
684+1:+0:1
685+0:+1:-1
686-1:+1:0
687+1:-1:0
688-1:-1:0
689+1:+1:0
690-1.1:0:1
691+0:-1.1:-1
692+1.1:+0:1
693+0:+1.1:-1
694+123:+123:0
695+123:+12:1
696+12:+123:-1
697-123:-123:0
698-123:-12:1
699-12:-123:-1
700+123:+124:-1
701+124:+123:1
702-123:-124:-1
703-124:-123:1
7040:0.01:-1
7050:0.0001:-1
7060:-0.0001:-1
7070:-0.1:-1
7080.1:0:1
7090.00001:0:1
710-0.0001:0:1
711-0.1:0:1
7120:0.0001234:-1
7130:-0.0001234:-1
7140.0001234:0:1
715-0.0001234:0:1
7160.0001:0.0005:-1
7170.0005:0.0001:1
7180.005:0.0001:1
7190.001:0.0005:1
7200.000001:0.0005:-1
7210.00000123:0.0005:-1
7220.00512:0.0001:1
7230.005:0.000112:1
7240.00123:0.0005:1
7251.5:2:-1
7262:1.5:1
7271.54321:234:-1
728234:1.54321:1
729# infinity
730-inf:5432112345:1
731+inf:5432112345:1
732-inf:-5432112345:1
733+inf:-5432112345:1
734-inf:54321.12345:1
735+inf:54321.12345:1
736-inf:-54321.12345:1
737+inf:-54321.12345:1
738+inf:+inf:0
739-inf:-inf:0
740+inf:-inf:0
741-inf:+inf:0
48b581a2 7425:inf:-1
743-1:inf:-1
7445:-inf:-1
745-1:-inf:-1
ee15d750 746# return undef
747+inf:facmpNaN:
748facmpNaN:inf:
749-inf:facmpNaN:
750facmpNaN:-inf:
751&fdec
752fdecNaN:NaN
753+inf:inf
754-inf:-inf
755+0:-1
756+1:0
757-1:-2
7581.23:0.23
759-1.23:-2.23
e745a66c 760100:99
761101:100
762-100:-101
763-99:-100
764-98:-99
76599:98
ee15d750 766&finc
767fincNaN:NaN
768+inf:inf
769-inf:-inf
770+0:1
771+1:2
772-1:0
7731.23:2.23
774-1.23:-0.23
e745a66c 775100:101
776-100:-99
777-99:-98
778-101:-100
77999:100
ee15d750 780&fadd
781abc:abc:NaN
782abc:+0:NaN
783+0:abc:NaN
13a12e00 784+inf:-inf:NaN
785-inf:+inf:NaN
ee15d750 786+inf:+inf:inf
787-inf:-inf:-inf
788baddNaN:+inf:NaN
789baddNaN:+inf:NaN
790+inf:baddNaN:NaN
791-inf:baddNaN:NaN
792+0:+0:0
793+1:+0:1
794+0:+1:1
795+1:+1:2
796-1:+0:-1
797+0:-1:-1
798-1:-1:-2
799-1:+1:0
800+1:-1:0
801+9:+1:10
802+99:+1:100
803+999:+1:1000
804+9999:+1:10000
805+99999:+1:100000
806+999999:+1:1000000
807+9999999:+1:10000000
808+99999999:+1:100000000
809+999999999:+1:1000000000
810+9999999999:+1:10000000000
811+99999999999:+1:100000000000
812+10:-1:9
813+100:-1:99
814+1000:-1:999
815+10000:-1:9999
816+100000:-1:99999
817+1000000:-1:999999
818+10000000:-1:9999999
819+100000000:-1:99999999
820+1000000000:-1:999999999
821+10000000000:-1:9999999999
822+123456789:+987654321:1111111110
823-123456789:+987654321:864197532
824-123456789:-987654321:-1111111110
825+123456789:-987654321:-864197532
8260.001234:0.0001234:0.0013574
827&fsub
828abc:abc:NaN
829abc:+0:NaN
830+0:abc:NaN
831+inf:-inf:inf
832-inf:+inf:-inf
13a12e00 833+inf:+inf:NaN
834-inf:-inf:NaN
ee15d750 835baddNaN:+inf:NaN
836baddNaN:+inf:NaN
837+inf:baddNaN:NaN
838-inf:baddNaN:NaN
839+0:+0:0
840+1:+0:1
841+0:+1:-1
842+1:+1:0
843-1:+0:-1
844+0:-1:1
845-1:-1:0
846-1:+1:-2
847+1:-1:2
848+9:+1:8
849+99:+1:98
850+999:+1:998
851+9999:+1:9998
852+99999:+1:99998
853+999999:+1:999998
854+9999999:+1:9999998
855+99999999:+1:99999998
856+999999999:+1:999999998
857+9999999999:+1:9999999998
858+99999999999:+1:99999999998
859+10:-1:11
860+100:-1:101
861+1000:-1:1001
862+10000:-1:10001
863+100000:-1:100001
864+1000000:-1:1000001
865+10000000:-1:10000001
866+100000000:-1:100000001
867+1000000000:-1:1000000001
868+10000000000:-1:10000000001
869+123456789:+987654321:-864197532
870-123456789:+987654321:-1111111110
871-123456789:-987654321:864197532
872+123456789:-987654321:1111111110
873&fmul
874abc:abc:NaN
875abc:+0:NaN
876+0:abc:NaN
877+inf:NaNmul:NaN
878+inf:NaNmul:NaN
879NaNmul:+inf:NaN
880NaNmul:-inf:NaN
881+inf:+inf:inf
882+inf:-inf:-inf
883+inf:-inf:-inf
884+inf:+inf:inf
885+inf:123.34:inf
886+inf:-123.34:-inf
887-inf:123.34:-inf
888-inf:-123.34:inf
889123.34:+inf:inf
890-123.34:+inf:-inf
891123.34:-inf:-inf
892-123.34:-inf:inf
893+0:+0:0
894+0:+1:0
895+1:+0:0
896+0:-1:0
897-1:+0:0
898+123456789123456789:+0:0
899+0:+123456789123456789:0
900-1:-1:1
901-1:+1:-1
902+1:-1:-1
903+1:+1:1
904+2:+3:6
905-2:+3:-6
906+2:-3:-6
907-2:-3:6
908+111:+111:12321
909+10101:+10101:102030201
910+1001001:+1001001:1002003002001
911+100010001:+100010001:10002000300020001
912+10000100001:+10000100001:100002000030000200001
913+11111111111:+9:99999999999
914+22222222222:+9:199999999998
915+33333333333:+9:299999999997
916+44444444444:+9:399999999996
917+55555555555:+9:499999999995
918+66666666666:+9:599999999994
919+77777777777:+9:699999999993
920+88888888888:+9:799999999992
921+99999999999:+9:899999999991
9226:120:720
92310:10000:100000
b3abae2a 924&fdiv-list
9250:0:NaN,NaN
9260:1:0,0
9279:4:2.25,1
9289:5:1.8,4
ee15d750 929&fdiv
930$div_scale = 40; $round_mode = 'even'
931abc:abc:NaN
932abc:+1:abc:NaN
933+1:abc:NaN
934-1:abc:NaN
9350:abc:NaN
936+0:+0:NaN
937+0:+1:0
938+1:+0:inf
939+3214:+0:inf
940+0:-1:0
941-1:+0:-inf
942-3214:+0:-inf
943+1:+1:1
944-1:-1:1
945+1:-1:-1
946-1:+1:-1
947+1:+2:0.5
948+2:+1:2
949123:+inf:0
950123:-inf:0
951+10:+5:2
952+100:+4:25
953+1000:+8:125
954+10000:+16:625
955+10000:-16:-625
956+999999999999:+9:111111111111
957+999999999999:+99:10101010101
958+999999999999:+999:1001001001
959+999999999999:+9999:100010001
960+999999999999999:+99999:10000100001
961+1000000000:+9:111111111.1111111111111111111111111111111
962+2000000000:+9:222222222.2222222222222222222222222222222
963+3000000000:+9:333333333.3333333333333333333333333333333
964+4000000000:+9:444444444.4444444444444444444444444444444
965+5000000000:+9:555555555.5555555555555555555555555555556
966+6000000000:+9:666666666.6666666666666666666666666666667
967+7000000000:+9:777777777.7777777777777777777777777777778
968+8000000000:+9:888888888.8888888888888888888888888888889
969+9000000000:+9:1000000000
970+35500000:+113:314159.2920353982300884955752212389380531
971+71000000:+226:314159.2920353982300884955752212389380531
972+106500000:+339:314159.2920353982300884955752212389380531
973+1000000000:+3:333333333.3333333333333333333333333333333
9742:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 975123456:1:123456
ee15d750 976$div_scale = 20
977+1000000000:+9:111111111.11111111111
978+2000000000:+9:222222222.22222222222
979+3000000000:+9:333333333.33333333333
980+4000000000:+9:444444444.44444444444
981+5000000000:+9:555555555.55555555556
982+6000000000:+9:666666666.66666666667
983+7000000000:+9:777777777.77777777778
984+8000000000:+9:888888888.88888888889
985+9000000000:+9:1000000000
9861:10:0.1
9871:100:0.01
9881:1000:0.001
9891:10000:0.0001
9901:504:0.001984126984126984127
9912:1.987654321:1.0062111801179738436
394e6ffb 992123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 993# the next two cases are the "old" behaviour, but are now (>v0.01) different
994#+35500000:+113:314159.292035398230088
995#+71000000:+226:314159.292035398230088
996+35500000:+113:314159.29203539823009
997+71000000:+226:314159.29203539823009
998+106500000:+339:314159.29203539823009
999+1000000000:+3:333333333.33333333333
1000$div_scale = 1
1001# round to accuracy 1 after bdiv
1002+124:+3:40
394e6ffb 1003123456789.1234:1:100000000
ee15d750 1004# reset scale for further tests
1005$div_scale = 40
1006&fmod
61f5c3f5 1007+9:4:1
1008+9:5:4
1009+9000:56:40
1010+56:9000:56
1011# inf handling, see table in doc
10120:inf:0
10130:-inf:0
10145:inf:5
10155:-inf:5
1016-5:inf:-5
1017-5:-inf:-5
1018inf:5:0
1019-inf:5:0
1020inf:-5:0
1021-inf:-5:0
10225:5:0
1023-5:-5:0
b3abae2a 1024inf:inf:NaN
1025-inf:-inf:NaN
1026-inf:inf:NaN
1027inf:-inf:NaN
61f5c3f5 10288:0:8
1029inf:0:inf
1030# exceptions to reminder rule
1031-inf:0:-inf
1032-8:0:-8
10330:0:NaN
1034abc:abc:NaN
1035abc:1:abc:NaN
10361:abc:NaN
10370:0:NaN
10380:1:0
10391:0:1
10400:-1:0
1041-1:0:-1
10421:1:0
1043-1:-1:0
10441:-1:0
1045-1:1:0
10461:2:1
10472:1:0
10481000000000:9:1
10492000000000:9:2
10503000000000:9:3
10514000000000:9:4
10525000000000:9:5
10536000000000:9:6
10547000000000:9:7
10558000000000:9:8
10569000000000:9:0
105735500000:113:33
105871000000:226:66
1059106500000:339:99
10601000000000:3:1
106110:5:0
1062100:4:0
10631000:8:0
106410000:16:0
1065999999999999:9:0
1066999999999999:99:0
1067999999999999:999:0
1068999999999999:9999:0
1069999999999999999:99999:0
1070-9:+5:1
1071+9:-5:-1
1072-9:-5:-4
1073-5:3:1
1074-2:3:1
10754:3:1
10761:3:1
1077-5:-3:-2
1078-2:-3:-2
10794:-3:-2
10801:-3:-2
10814095:4095:0
1082100041000510123:3:0
1083152403346:12345:4321
108487654321:87654321:0
1085# now some floating point tests
1086123:2.5:0.5
10871230:2.5:0
1088123.4:2.5:0.9
1089123e1:25:5
b3abae2a 1090&ffac
1091Nanfac:NaN
1092-1:NaN
10930:1
10941:1
10952:2
10963:6
10974:24
10985:120
10996:720
110010:3628800
110111:39916800
110212:479001600
ee15d750 1103&fsqrt
1104+0:0
1105-1:NaN
1106-2:NaN
1107-16:NaN
1108-123.45:NaN
1109nanfsqrt:NaN
1110+inf:inf
1111-inf:NaN
394e6ffb 11121:1
11132:1.41421356237309504880168872420969807857
11144:2
11159:3
111616:4
1117100:10
1118123.456:11.11107555549866648462149404118219234119
111915241.38393:123.4559999756998444766131352122991626468
11201.44:1.2
1121# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
11221.44E10:120000
11232e10:141421.356237309504880168872420969807857
b3abae2a 1124144e20:120000000000
61f5c3f5 1125# proved to be an endless loop under 7-9
112612:3.464101615137754587054892683011744733886
027dc388 1127&is_nan
1128123:0
1129abc:1
1130NaN:1
1131-123:0
1132&is_inf
1133+inf::1
1134-inf::1
1135abc::0
11361::0
1137NaN::0
1138-1::0
1139+inf:-:0
1140+inf:+:1
1141-inf:-:1
1142-inf:+:0
1143# it must be exactly /^[+-]inf$/
1144+infinity::0
1145-infinity::0
ee15d750 1146&is_odd
1147abc:0
11480:0
1149-1:1
1150-3:1
11511:1
11523:1
11531000001:1
11541000002:0
1155+inf:0
1156-inf:0
1157123.45:0
1158-123.45:0
11592:0
b3abae2a 1160&is_int
1161NaNis_int:0
11620:1
11631:1
11642:1
1165-2:1
1166-1:1
1167-inf:0
1168+inf:0
1169123.4567:0
1170-0.1:0
1171-0.002:0
ee15d750 1172&is_even
1173abc:0
11740:1
1175-1:0
1176-3:0
11771:0
11783:0
11791000001:0
11801000002:1
11812:1
1182+inf:0
1183-inf:0
1184123.456:0
1185-123.456:0
b3abae2a 11860.01:0
1187-0.01:0
1188120:1
11891200:1
1190-1200:1
ee15d750 1191&is_positive
11920:1
11931:1
1194-1:0
1195-123:0
1196NaN:0
1197-inf:0
1198+inf:1
1199&is_negative
12000:0
12011:0
1202-1:1
1203-123:1
1204NaN:0
1205-inf:1
1206+inf:0
1207&parts
12080:0 1
12091:1 0
1210123:123 0
1211-123:-123 0
1212-1200:-12 2
1213NaNparts:NaN NaN
1214+inf:inf inf
1215-inf:-inf inf
1216&exponent
12170:1
12181:0
1219123:0
1220-123:0
1221-1200:2
1222+inf:inf
1223-inf:inf
1224NaNexponent:NaN
1225&mantissa
12260:0
12271:1
1228123:123
1229-123:-123
1230-1200:-12
1231+inf:inf
1232-inf:-inf
1233NaNmantissa:NaN
1234&length
1235123:3
1236-123:3
12370:1
12381:1
123912345678901234567890:20
1240&is_zero
1241NaNzero:0
1242+inf:0
1243-inf:0
12440:1
1245-1:0
12461:0
1247&is_one
1248NaNone:0
1249+inf:0
1250-inf:0
12510:0
12522:0
12531:1
1254-1:0
1255-2:0
027dc388 1256&ffloor
ee15d750 12570:0
1258abc:NaN
1259+inf:inf
1260-inf:-inf
12611:1
1262-51:-51
1263-51.2:-52
126412.2:12
027dc388 1265&fceil
ee15d750 12660:0
1267abc:NaN
1268+inf:inf
1269-inf:-inf
12701:1
1271-51:-51
1272-51.2:-51
127312.2:13