Re: [PATCH] 'make clobber' on Cygwin broken
[p5sagit/p5-mst-13.2.git] / lib / Math / BigInt / t / bigfltpm.inc
CommitLineData
ee15d750 1#include this file into another test for subclass testing...
2while (<DATA>)
3 {
4 chop;
5 $_ =~ s/#.*$//; # remove comments
6 $_ =~ s/\s+$//; # trailing spaces
7 next if /^$/; # skip empty lines & comments
8 if (s/^&//)
9 {
10 $f = $_;
11 }
12 elsif (/^\$/)
13 {
14 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
15 #print "\$setup== $setup\n";
16 }
17 else
18 {
19 if (m|^(.*?):(/.+)$|)
20 {
21 $ans = $2;
22 @args = split(/:/,$1,99);
23 }
24 else
25 {
26 @args = split(/:/,$_,99); $ans = pop(@args);
27 }
28 $try = "\$x = new $class \"$args[0]\";";
29 if ($f eq "fnorm")
30 {
31 $try .= "\$x;";
32 } elsif ($f eq "finf") {
33 $try .= "\$x->finf('$args[1]');";
027dc388 34 } elsif ($f eq "is_inf") {
35 $try .= "\$x->is_inf('$args[1]');";
ee15d750 36 } elsif ($f eq "fone") {
37 $try .= "\$x->bone('$args[1]');";
38 } elsif ($f eq "fstr") {
39 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
40 $try .= '$x->fstr();';
ee15d750 41 } elsif ($f eq "parts") {
48b581a2 42 # ->bstr() to see if an object is returned
ee15d750 43 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
44 $try .= '"$a $b";';
ee15d750 45 } elsif ($f eq "exponent") {
48b581a2 46 # ->bstr() to see if an object is returned
ee15d750 47 $try .= '$x->exponent()->bstr();';
48 } elsif ($f eq "mantissa") {
48b581a2 49 # ->bstr() to see if an object is returned
ee15d750 50 $try .= '$x->mantissa()->bstr();';
027dc388 51 } elsif ($f eq "numify") {
52 $try .= "\$x->numify();";
53 } elsif ($f eq "length") {
54 $try .= "\$x->length();";
55 # some unary ops (test the bxxx form, since that is done by AUTOLOAD)
56 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
394e6ffb 57 $try .= "\$x->f$1();";
027dc388 58 # some is_xxx test function
59 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan)$/) {
60 $try .= "\$x->$f();";
ee15d750 61 } elsif ($f eq "as_number") {
62 $try .= '$x->as_number();';
ee15d750 63 } elsif ($f eq "finc") {
64 $try .= '++$x;';
65 } elsif ($f eq "fdec") {
66 $try .= '--$x;';
67 }elsif ($f eq "fround") {
68 $try .= "$setup; \$x->fround($args[1]);";
69 } elsif ($f eq "ffround") {
70 $try .= "$setup; \$x->ffround($args[1]);";
71 } elsif ($f eq "fsqrt") {
72 $try .= "$setup; \$x->fsqrt();";
73 }
74 else
75 {
76 $try .= "\$y = new $class \"$args[1]\";";
77 if ($f eq "fcmp") {
78 $try .= '$x <=> $y;';
61f5c3f5 79 } elsif ($f eq "flog") {
80 $try .= '$x->flog($y);';
ee15d750 81 } elsif ($f eq "facmp") {
82 $try .= '$x->facmp($y);';
83 } elsif ($f eq "fpow") {
84 $try .= '$x ** $y;';
85 } elsif ($f eq "fadd") {
86 $try .= '$x + $y;';
87 } elsif ($f eq "fsub") {
88 $try .= '$x - $y;';
89 } elsif ($f eq "fmul") {
90 $try .= '$x * $y;';
91 } elsif ($f eq "fdiv") {
92 $try .= "$setup; \$x / \$y;";
394e6ffb 93 } elsif ($f eq "frsft") {
94 $try .= '$x >> $y;';
95 } elsif ($f eq "flsft") {
96 $try .= '$x << $y;';
ee15d750 97 } elsif ($f eq "fmod") {
98 $try .= '$x % $y;';
99 } else { warn "Unknown op '$f'"; }
100 }
e745a66c 101 # print "# Trying: '$try'\n";
ee15d750 102 $ans1 = eval $try;
103 if ($ans =~ m|^/(.*)$|)
104 {
105 my $pat = $1;
106 if ($ans1 =~ /$pat/)
107 {
108 ok (1,1);
109 }
110 else
111 {
112 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
113 }
114 }
115 else
116 {
117 if ($ans eq "")
118 {
119 ok_undef ($ans1);
120 }
121 else
122 {
123 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
124 if (ref($ans1) eq "$class")
125 {
027dc388 126 # float numbers are normalized (for now), so mantissa shouldn't have
127 # trailing zeros
ee15d750 128 #print $ans1->_trailing_zeros(),"\n";
129 print "# Has trailing zeros after '$try'\n"
130 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
131 }
132 }
133 } # end pattern or string
134 }
135 } # end while
136
394e6ffb 137# check whether $class->new( Math::BigInt->new()) destroys it
138# ($y == 12 in this case)
ee15d750 139$x = Math::BigInt->new(1200); $y = $class->new($x);
140ok ($y,1200); ok ($x,1200);
141
142###############################################################################
143# fdiv() in list context
61f5c3f5 144
ee15d750 145$x = $class->bzero(); ($x,$y) = $x->fdiv(0);
146ok ($x,'NaN'); ok ($y,'NaN');
147
148# fdiv() in list context
149$x = $class->bzero(); ($x,$y) = $x->fdiv(1);
150ok ($x,0); ok ($y,0);
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});
61f5c3f5 156
157###############################################################################
158# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt()
159# correctly modifies $x
160
161$class->accuracy(undef); $class->precision(undef); # reset
162
163$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46');
164
165$class->precision(undef);
166$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3');
167
168$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464');
169
170# A and P set => NaN
171$class->accuracy(4); $x = $class->new(12); $x->fsqrt(3); ok ($x,'NaN');
172# supplied arg overrides set global
173$class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46');
174
175$class->accuracy(undef); $class->precision(undef); # reset for further tests
394e6ffb 176
1771; # all done
ee15d750 178
179###############################################################################
180# Perl 5.005 does not like ok ($x,undef)
181
182sub ok_undef
183 {
184 my $x = shift;
185
186 ok (1,1) and return if !defined $x;
187 ok ($x,'undef');
188 }
189
190__DATA__
61f5c3f5 191#&flog
192#$div_scale = 14;
193#10:0:2.30258509299405
194#1000:0:6.90775527898214
195#100:0:4.60517018598809
196#2:0:0.693147180559945
197#3.1415:0:1.14470039286086
198#12345:0:9.42100640177928
199#0.001:0:-6.90775527898214
200## reset for further tests
201#$div_scale = 40;
394e6ffb 202&frsft
203#NaNfrsft:NaN
2040:2:0
2051:1:0.5
2062:1:1
2074:1:2
208123:1:61.5
20932:3:4
210&flsft
211#NaNflsft:NaN
2122:1:4
2134:3:32
2145:3:40
2151:2:4
2160:5:0
ee15d750 217&fnorm
2181:1
219-0:0
220fnormNaN:NaN
221+inf:inf
222-inf:-inf
223123:123
224-123.4567:-123.4567
027dc388 225# invalid inputs
2261__2:NaN
2271E1__2:NaN
22811__2E2:NaN
229#1.E3:NaN
230.2E-3.:NaN
231#1e3e4:NaN
232.2E2:20
ee15d750 233&as_number
2340:0
2351:1
2361.2:1
2372.345:2
238-2:-2
239-123.456:-123
240-200:-200
241&finf
2421:+:inf
2432:-:-inf
2443:abc:inf
245&numify
2460:0e+1
247+1:1e+0
2481234:1234e+0
249NaN:NaN
250+inf:inf
251-inf:-inf
252&fnan
253abc:NaN
2542:NaN
255-2:NaN
2560:NaN
257&fone
2582:+:1
259-2:-:-1
260-2:+:1
2612:-:-1
2620::1
263-2::1
264abc::1
2652:abc:1
266&fsstr
267+inf:inf
268-inf:-inf
269abcfsstr:NaN
2701234.567:1234567e-3
271&fstr
272+inf:::inf
273-inf:::-inf
274abcfstr:::NaN
2751234.567:9::1234.56700
2761234.567::-6:1234.567000
27712345:5::12345
2780.001234:6::0.00123400
2790.001234::-8:0.00123400
2800:4::0
2810::-4:0.0000
282&fnorm
283inf:inf
284+inf:inf
285-inf:-inf
286+infinity:NaN
287+-inf:NaN
288abc:NaN
289 1 a:NaN
2901bcd2:NaN
29111111b:NaN
292+1z:NaN
293-1z:NaN
2940:0
295+0:0
296+00:0
297+0_0_0:0
298000000_0000000_00000:0
299-0:0
300-0000:0
301+1:1
302+01:1
303+001:1
304+00000100000:100000
305123456789:123456789
306-1:-1
307-01:-1
308-001:-1
309-123456789:-123456789
310-00000100000:-100000
311123.456a:NaN
312123.456:123.456
3130.01:0.01
314.002:0.002
315+.2:0.2
316-0.0003:-0.0003
317-.0000000004:-0.0000000004
318123456E2:12345600
319123456E-2:1234.56
320-123456E2:-12345600
321-123456E-2:-1234.56
3221e1:10
3232e-11:0.00000000002
324# excercise _split
325 .02e-1:0.002
326 000001:1
327 -00001:-1
328 -1:-1
329 000.01:0.01
330 -000.0023:-0.0023
331 1.1e1:11
332-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
333-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
334&fpow
3352:2:4
3361:2:1
3371:3:1
338-1:2:1
339-1:3:-1
340123.456:2:15241.383936
3412:-2:0.25
3422:-3:0.125
343128:-2:0.00006103515625
344abc:123.456:NaN
345123.456:abc:NaN
346+inf:123.45:inf
347-inf:123.45:-inf
348+inf:-123.45:inf
349-inf:-123.45:-inf
350&fneg
351fnegNaN:NaN
352+inf:-inf
353-inf:inf
354+0:0
355+1:-1
356-1:1
357+123456789:-123456789
358-123456789:123456789
359+123.456789:-123.456789
360-123456.789:123456.789
361&fabs
362fabsNaN:NaN
363+inf:inf
364-inf:inf
365+0:0
366+1:1
367-1:1
368+123456789:123456789
369-123456789:123456789
370+123.456789:123.456789
371-123456.789:123456.789
372&fround
373$round_mode = "trunc"
374+inf:5:inf
375-inf:5:-inf
3760:5:0
377NaNfround:5:NaN
378+10123456789:5:10123000000
379-10123456789:5:-10123000000
380+10123456789.123:5:10123000000
381-10123456789.123:5:-10123000000
382+10123456789:9:10123456700
383-10123456789:9:-10123456700
384+101234500:6:101234000
385-101234500:6:-101234000
386$round_mode = "zero"
387+20123456789:5:20123000000
388-20123456789:5:-20123000000
389+20123456789.123:5:20123000000
390-20123456789.123:5:-20123000000
391+20123456789:9:20123456800
392-20123456789:9:-20123456800
393+201234500:6:201234000
394-201234500:6:-201234000
395$round_mode = "+inf"
396+30123456789:5:30123000000
397-30123456789:5:-30123000000
398+30123456789.123:5:30123000000
399-30123456789.123:5:-30123000000
400+30123456789:9:30123456800
401-30123456789:9:-30123456800
402+301234500:6:301235000
403-301234500:6:-301234000
404$round_mode = "-inf"
405+40123456789:5:40123000000
406-40123456789:5:-40123000000
407+40123456789.123:5:40123000000
408-40123456789.123:5:-40123000000
409+40123456789:9:40123456800
410-40123456789:9:-40123456800
411+401234500:6:401234000
412-401234500:6:-401235000
413$round_mode = "odd"
414+50123456789:5:50123000000
415-50123456789:5:-50123000000
416+50123456789.123:5:50123000000
417-50123456789.123:5:-50123000000
418+50123456789:9:50123456800
419-50123456789:9:-50123456800
420+501234500:6:501235000
421-501234500:6:-501235000
422$round_mode = "even"
423+60123456789:5:60123000000
424-60123456789:5:-60123000000
425+60123456789:9:60123456800
426-60123456789:9:-60123456800
427+601234500:6:601234000
428-601234500:6:-601234000
429+60123456789.0123:5:60123000000
430-60123456789.0123:5:-60123000000
431&ffround
432$round_mode = "trunc"
433+inf:5:inf
434-inf:5:-inf
4350:5:0
436NaNffround:5:NaN
437+1.23:-1:1.2
438+1.234:-1:1.2
439+1.2345:-1:1.2
440+1.23:-2:1.23
441+1.234:-2:1.23
442+1.2345:-2:1.23
443+1.23:-3:1.230
444+1.234:-3:1.234
445+1.2345:-3:1.234
446-1.23:-1:-1.2
447+1.27:-1:1.2
448-1.27:-1:-1.2
449+1.25:-1:1.2
450-1.25:-1:-1.2
451+1.35:-1:1.3
452-1.35:-1:-1.3
453-0.0061234567890:-1:0.0
454-0.0061:-1:0.0
455-0.00612:-1:0.0
456-0.00612:-2:0.00
457-0.006:-1:0.0
458-0.006:-2:0.00
459-0.0006:-2:0.00
460-0.0006:-3:0.000
461-0.0065:-3:/-0\.006|-6e-03
462-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
463-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4640.05:0:0
4650.5:0:0
4660.51:0:0
4670.41:0:0
468$round_mode = "zero"
469+2.23:-1:/2.2(?:0{5}\d+)?
470-2.23:-1:/-2.2(?:0{5}\d+)?
471+2.27:-1:/2.(?:3|29{5}\d+)
472-2.27:-1:/-2.(?:3|29{5}\d+)
473+2.25:-1:/2.2(?:0{5}\d+)?
474-2.25:-1:/-2.2(?:0{5}\d+)?
475+2.35:-1:/2.(?:3|29{5}\d+)
476-2.35:-1:/-2.(?:3|29{5}\d+)
477-0.0065:-1:0.0
478-0.0065:-2:/-0\.01|-1e-02
479-0.0065:-3:/-0\.006|-6e-03
480-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
481-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4820.05:0:0
4830.5:0:0
4840.51:0:1
4850.41:0:0
486$round_mode = "+inf"
487+3.23:-1:/3.2(?:0{5}\d+)?
488-3.23:-1:/-3.2(?:0{5}\d+)?
489+3.27:-1:/3.(?:3|29{5}\d+)
490-3.27:-1:/-3.(?:3|29{5}\d+)
491+3.25:-1:/3.(?:3|29{5}\d+)
492-3.25:-1:/-3.2(?:0{5}\d+)?
493+3.35:-1:/3.(?:4|39{5}\d+)
494-3.35:-1:/-3.(?:3|29{5}\d+)
495-0.0065:-1:0.0
496-0.0065:-2:/-0\.01|-1e-02
497-0.0065:-3:/-0\.006|-6e-03
498-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
499-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5000.05:0:0
5010.5:0:1
5020.51:0:1
5030.41:0:0
504$round_mode = "-inf"
505+4.23:-1:/4.2(?:0{5}\d+)?
506-4.23:-1:/-4.2(?:0{5}\d+)?
507+4.27:-1:/4.(?:3|29{5}\d+)
508-4.27:-1:/-4.(?:3|29{5}\d+)
509+4.25:-1:/4.2(?:0{5}\d+)?
510-4.25:-1:/-4.(?:3|29{5}\d+)
511+4.35:-1:/4.(?:3|29{5}\d+)
512-4.35:-1:/-4.(?:4|39{5}\d+)
513-0.0065:-1:0.0
514-0.0065:-2:/-0\.01|-1e-02
515-0.0065:-3:/-0\.007|-7e-03
516-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
517-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5180.05:0:0
5190.5:0:0
5200.51:0:1
5210.41:0:0
522$round_mode = "odd"
523+5.23:-1:/5.2(?:0{5}\d+)?
524-5.23:-1:/-5.2(?:0{5}\d+)?
525+5.27:-1:/5.(?:3|29{5}\d+)
526-5.27:-1:/-5.(?:3|29{5}\d+)
527+5.25:-1:/5.(?:3|29{5}\d+)
528-5.25:-1:/-5.(?:3|29{5}\d+)
529+5.35:-1:/5.(?:3|29{5}\d+)
530-5.35:-1:/-5.(?:3|29{5}\d+)
531-0.0065:-1:0.0
532-0.0065:-2:/-0\.01|-1e-02
533-0.0065:-3:/-0\.007|-7e-03
534-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
535-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5360.05:0:0
5370.5:0:1
5380.51:0:1
5390.41:0:0
540$round_mode = "even"
541+6.23:-1:/6.2(?:0{5}\d+)?
542-6.23:-1:/-6.2(?:0{5}\d+)?
543+6.27:-1:/6.(?:3|29{5}\d+)
544-6.27:-1:/-6.(?:3|29{5}\d+)
545+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
546-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
547+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
548-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
549-0.0065:-1:0.0
550-0.0065:-2:/-0\.01|-1e-02
551-0.0065:-3:/-0\.006|-7e-03
552-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
553-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5540.05:0:0
5550.5:0:0
5560.51:0:1
5570.41:0:0
5580.01234567:-3:0.012
5590.01234567:-4:0.0123
5600.01234567:-5:0.01235
5610.01234567:-6:0.012346
5620.01234567:-7:0.0123457
5630.01234567:-8:0.01234567
5640.01234567:-9:0.012345670
5650.01234567:-12:0.012345670000
566&fcmp
567fcmpNaN:fcmpNaN:
568fcmpNaN:+0:
569+0:fcmpNaN:
570+0:+0:0
571-1:+0:-1
572+0:-1:1
573+1:+0:1
574+0:+1:-1
575-1:+1:-1
576+1:-1:1
577-1:-1:0
578+1:+1:0
579-1.1:0:-1
580+0:-1.1:1
581+1.1:+0:1
582+0:+1.1:-1
583+123:+123:0
584+123:+12:1
585+12:+123:-1
586-123:-123:0
587-123:-12:-1
588-12:-123:1
589+123:+124:-1
590+124:+123:1
591-123:-124:1
592-124:-123:-1
5930:0.01:-1
5940:0.0001:-1
5950:-0.0001:1
5960:-0.1:1
5970.1:0:1
5980.00001:0:1
599-0.0001:0:-1
600-0.1:0:-1
6010:0.0001234:-1
6020:-0.0001234:1
6030.0001234:0:1
604-0.0001234:0:-1
6050.0001:0.0005:-1
6060.0005:0.0001:1
6070.005:0.0001:1
6080.001:0.0005:1
6090.000001:0.0005:-1
6100.00000123:0.0005:-1
6110.00512:0.0001:1
6120.005:0.000112:1
6130.00123:0.0005:1
6141.5:2:-1
6152:1.5:1
6161.54321:234:-1
617234:1.54321:1
618# infinity
619-inf:5432112345:-1
620+inf:5432112345:1
621-inf:-5432112345:-1
622+inf:-5432112345:1
623-inf:54321.12345:-1
624+inf:54321.12345:1
625-inf:-54321.12345:-1
626+inf:-54321.12345:1
627+inf:+inf:0
628-inf:-inf:0
629+inf:-inf:1
630-inf:+inf:-1
631# return undef
632+inf:NaN:
633NaN:inf:
634-inf:NaN:
635NaN:-inf:
636&facmp
637fcmpNaN:fcmpNaN:
638fcmpNaN:+0:
639+0:fcmpNaN:
640+0:+0:0
641-1:+0:1
642+0:-1:-1
643+1:+0:1
644+0:+1:-1
645-1:+1:0
646+1:-1:0
647-1:-1:0
648+1:+1:0
649-1.1:0:1
650+0:-1.1:-1
651+1.1:+0:1
652+0:+1.1:-1
653+123:+123:0
654+123:+12:1
655+12:+123:-1
656-123:-123:0
657-123:-12:1
658-12:-123:-1
659+123:+124:-1
660+124:+123:1
661-123:-124:-1
662-124:-123:1
6630:0.01:-1
6640:0.0001:-1
6650:-0.0001:-1
6660:-0.1:-1
6670.1:0:1
6680.00001:0:1
669-0.0001:0:1
670-0.1:0:1
6710:0.0001234:-1
6720:-0.0001234:-1
6730.0001234:0:1
674-0.0001234:0:1
6750.0001:0.0005:-1
6760.0005:0.0001:1
6770.005:0.0001:1
6780.001:0.0005:1
6790.000001:0.0005:-1
6800.00000123:0.0005:-1
6810.00512:0.0001:1
6820.005:0.000112:1
6830.00123:0.0005:1
6841.5:2:-1
6852:1.5:1
6861.54321:234:-1
687234:1.54321:1
688# infinity
689-inf:5432112345:1
690+inf:5432112345:1
691-inf:-5432112345:1
692+inf:-5432112345:1
693-inf:54321.12345:1
694+inf:54321.12345:1
695-inf:-54321.12345:1
696+inf:-54321.12345:1
697+inf:+inf:0
698-inf:-inf:0
699+inf:-inf:0
700-inf:+inf:0
48b581a2 7015:inf:-1
702-1:inf:-1
7035:-inf:-1
704-1:-inf:-1
ee15d750 705# return undef
706+inf:facmpNaN:
707facmpNaN:inf:
708-inf:facmpNaN:
709facmpNaN:-inf:
710&fdec
711fdecNaN:NaN
712+inf:inf
713-inf:-inf
714+0:-1
715+1:0
716-1:-2
7171.23:0.23
718-1.23:-2.23
e745a66c 719100:99
720101:100
721-100:-101
722-99:-100
723-98:-99
72499:98
ee15d750 725&finc
726fincNaN:NaN
727+inf:inf
728-inf:-inf
729+0:1
730+1:2
731-1:0
7321.23:2.23
733-1.23:-0.23
e745a66c 734100:101
735-100:-99
736-99:-98
737-101:-100
73899:100
ee15d750 739&fadd
740abc:abc:NaN
741abc:+0:NaN
742+0:abc:NaN
743+inf:-inf:0
744-inf:+inf:0
745+inf:+inf:inf
746-inf:-inf:-inf
747baddNaN:+inf:NaN
748baddNaN:+inf:NaN
749+inf:baddNaN:NaN
750-inf:baddNaN:NaN
751+0:+0:0
752+1:+0:1
753+0:+1:1
754+1:+1:2
755-1:+0:-1
756+0:-1:-1
757-1:-1:-2
758-1:+1:0
759+1:-1:0
760+9:+1:10
761+99:+1:100
762+999:+1:1000
763+9999:+1:10000
764+99999:+1:100000
765+999999:+1:1000000
766+9999999:+1:10000000
767+99999999:+1:100000000
768+999999999:+1:1000000000
769+9999999999:+1:10000000000
770+99999999999:+1:100000000000
771+10:-1:9
772+100:-1:99
773+1000:-1:999
774+10000:-1:9999
775+100000:-1:99999
776+1000000:-1:999999
777+10000000:-1:9999999
778+100000000:-1:99999999
779+1000000000:-1:999999999
780+10000000000:-1:9999999999
781+123456789:+987654321:1111111110
782-123456789:+987654321:864197532
783-123456789:-987654321:-1111111110
784+123456789:-987654321:-864197532
7850.001234:0.0001234:0.0013574
786&fsub
787abc:abc:NaN
788abc:+0:NaN
789+0:abc:NaN
790+inf:-inf:inf
791-inf:+inf:-inf
792+inf:+inf:0
793-inf:-inf:0
794baddNaN:+inf:NaN
795baddNaN:+inf:NaN
796+inf:baddNaN:NaN
797-inf:baddNaN:NaN
798+0:+0:0
799+1:+0:1
800+0:+1:-1
801+1:+1:0
802-1:+0:-1
803+0:-1:1
804-1:-1:0
805-1:+1:-2
806+1:-1:2
807+9:+1:8
808+99:+1:98
809+999:+1:998
810+9999:+1:9998
811+99999:+1:99998
812+999999:+1:999998
813+9999999:+1:9999998
814+99999999:+1:99999998
815+999999999:+1:999999998
816+9999999999:+1:9999999998
817+99999999999:+1:99999999998
818+10:-1:11
819+100:-1:101
820+1000:-1:1001
821+10000:-1:10001
822+100000:-1:100001
823+1000000:-1:1000001
824+10000000:-1:10000001
825+100000000:-1:100000001
826+1000000000:-1:1000000001
827+10000000000:-1:10000000001
828+123456789:+987654321:-864197532
829-123456789:+987654321:-1111111110
830-123456789:-987654321:864197532
831+123456789:-987654321:1111111110
832&fmul
833abc:abc:NaN
834abc:+0:NaN
835+0:abc:NaN
836+inf:NaNmul:NaN
837+inf:NaNmul:NaN
838NaNmul:+inf:NaN
839NaNmul:-inf:NaN
840+inf:+inf:inf
841+inf:-inf:-inf
842+inf:-inf:-inf
843+inf:+inf:inf
844+inf:123.34:inf
845+inf:-123.34:-inf
846-inf:123.34:-inf
847-inf:-123.34:inf
848123.34:+inf:inf
849-123.34:+inf:-inf
850123.34:-inf:-inf
851-123.34:-inf:inf
852+0:+0:0
853+0:+1:0
854+1:+0:0
855+0:-1:0
856-1:+0:0
857+123456789123456789:+0:0
858+0:+123456789123456789:0
859-1:-1:1
860-1:+1:-1
861+1:-1:-1
862+1:+1:1
863+2:+3:6
864-2:+3:-6
865+2:-3:-6
866-2:-3:6
867+111:+111:12321
868+10101:+10101:102030201
869+1001001:+1001001:1002003002001
870+100010001:+100010001:10002000300020001
871+10000100001:+10000100001:100002000030000200001
872+11111111111:+9:99999999999
873+22222222222:+9:199999999998
874+33333333333:+9:299999999997
875+44444444444:+9:399999999996
876+55555555555:+9:499999999995
877+66666666666:+9:599999999994
878+77777777777:+9:699999999993
879+88888888888:+9:799999999992
880+99999999999:+9:899999999991
8816:120:720
88210:10000:100000
883&fdiv
884$div_scale = 40; $round_mode = 'even'
885abc:abc:NaN
886abc:+1:abc:NaN
887+1:abc:NaN
888-1:abc:NaN
8890:abc:NaN
890+0:+0:NaN
891+0:+1:0
892+1:+0:inf
893+3214:+0:inf
894+0:-1:0
895-1:+0:-inf
896-3214:+0:-inf
897+1:+1:1
898-1:-1:1
899+1:-1:-1
900-1:+1:-1
901+1:+2:0.5
902+2:+1:2
903123:+inf:0
904123:-inf:0
905+10:+5:2
906+100:+4:25
907+1000:+8:125
908+10000:+16:625
909+10000:-16:-625
910+999999999999:+9:111111111111
911+999999999999:+99:10101010101
912+999999999999:+999:1001001001
913+999999999999:+9999:100010001
914+999999999999999:+99999:10000100001
915+1000000000:+9:111111111.1111111111111111111111111111111
916+2000000000:+9:222222222.2222222222222222222222222222222
917+3000000000:+9:333333333.3333333333333333333333333333333
918+4000000000:+9:444444444.4444444444444444444444444444444
919+5000000000:+9:555555555.5555555555555555555555555555556
920+6000000000:+9:666666666.6666666666666666666666666666667
921+7000000000:+9:777777777.7777777777777777777777777777778
922+8000000000:+9:888888888.8888888888888888888888888888889
923+9000000000:+9:1000000000
924+35500000:+113:314159.2920353982300884955752212389380531
925+71000000:+226:314159.2920353982300884955752212389380531
926+106500000:+339:314159.2920353982300884955752212389380531
927+1000000000:+3:333333333.3333333333333333333333333333333
9282:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
394e6ffb 929123456:1:123456
ee15d750 930$div_scale = 20
931+1000000000:+9:111111111.11111111111
932+2000000000:+9:222222222.22222222222
933+3000000000:+9:333333333.33333333333
934+4000000000:+9:444444444.44444444444
935+5000000000:+9:555555555.55555555556
936+6000000000:+9:666666666.66666666667
937+7000000000:+9:777777777.77777777778
938+8000000000:+9:888888888.88888888889
939+9000000000:+9:1000000000
9401:10:0.1
9411:100:0.01
9421:1000:0.001
9431:10000:0.0001
9441:504:0.001984126984126984127
9452:1.987654321:1.0062111801179738436
394e6ffb 946123456789.123456789123456789123456789:1:123456789.12345678912
ee15d750 947# the next two cases are the "old" behaviour, but are now (>v0.01) different
948#+35500000:+113:314159.292035398230088
949#+71000000:+226:314159.292035398230088
950+35500000:+113:314159.29203539823009
951+71000000:+226:314159.29203539823009
952+106500000:+339:314159.29203539823009
953+1000000000:+3:333333333.33333333333
954$div_scale = 1
955# round to accuracy 1 after bdiv
956+124:+3:40
394e6ffb 957123456789.1234:1:100000000
ee15d750 958# reset scale for further tests
959$div_scale = 40
960&fmod
61f5c3f5 961+9:4:1
962+9:5:4
963+9000:56:40
964+56:9000:56
965# inf handling, see table in doc
9660:inf:0
9670:-inf:0
9685:inf:5
9695:-inf:5
970-5:inf:-5
971-5:-inf:-5
972inf:5:0
973-inf:5:0
974inf:-5:0
975-inf:-5:0
9765:5:0
977-5:-5:0
978inf:inf:0
979-inf:-inf:0
980-inf:inf:0
981inf:-inf:0
9828:0:8
983inf:0:inf
984# exceptions to reminder rule
985-inf:0:-inf
986-8:0:-8
9870:0:NaN
988abc:abc:NaN
989abc:1:abc:NaN
9901:abc:NaN
9910:0:NaN
9920:1:0
9931:0:1
9940:-1:0
995-1:0:-1
9961:1:0
997-1:-1:0
9981:-1:0
999-1:1:0
10001:2:1
10012:1:0
10021000000000:9:1
10032000000000:9:2
10043000000000:9:3
10054000000000:9:4
10065000000000:9:5
10076000000000:9:6
10087000000000:9:7
10098000000000:9:8
10109000000000:9:0
101135500000:113:33
101271000000:226:66
1013106500000:339:99
10141000000000:3:1
101510:5:0
1016100:4:0
10171000:8:0
101810000:16:0
1019999999999999:9:0
1020999999999999:99:0
1021999999999999:999:0
1022999999999999:9999:0
1023999999999999999:99999:0
1024-9:+5:1
1025+9:-5:-1
1026-9:-5:-4
1027-5:3:1
1028-2:3:1
10294:3:1
10301:3:1
1031-5:-3:-2
1032-2:-3:-2
10334:-3:-2
10341:-3:-2
10354095:4095:0
1036100041000510123:3:0
1037152403346:12345:4321
103887654321:87654321:0
1039# now some floating point tests
1040123:2.5:0.5
10411230:2.5:0
1042123.4:2.5:0.9
1043123e1:25:5
ee15d750 1044&fsqrt
1045+0:0
1046-1:NaN
1047-2:NaN
1048-16:NaN
1049-123.45:NaN
1050nanfsqrt:NaN
1051+inf:inf
1052-inf:NaN
394e6ffb 10531:1
10542:1.41421356237309504880168872420969807857
10554:2
10569:3
105716:4
1058100:10
1059123.456:11.11107555549866648462149404118219234119
106015241.38393:123.4559999756998444766131352122991626468
10611.44:1.2
1062# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4
10631.44E10:120000
10642e10:141421.356237309504880168872420969807857
61f5c3f5 1065# proved to be an endless loop under 7-9
106612:3.464101615137754587054892683011744733886
027dc388 1067&is_nan
1068123:0
1069abc:1
1070NaN:1
1071-123:0
1072&is_inf
1073+inf::1
1074-inf::1
1075abc::0
10761::0
1077NaN::0
1078-1::0
1079+inf:-:0
1080+inf:+:1
1081-inf:-:1
1082-inf:+:0
1083# it must be exactly /^[+-]inf$/
1084+infinity::0
1085-infinity::0
ee15d750 1086&is_odd
1087abc:0
10880:0
1089-1:1
1090-3:1
10911:1
10923:1
10931000001:1
10941000002:0
1095+inf:0
1096-inf:0
1097123.45:0
1098-123.45:0
10992:0
1100&is_even
1101abc:0
11020:1
1103-1:0
1104-3:0
11051:0
11063:0
11071000001:0
11081000002:1
11092:1
1110+inf:0
1111-inf:0
1112123.456:0
1113-123.456:0
1114&is_positive
11150:1
11161:1
1117-1:0
1118-123:0
1119NaN:0
1120-inf:0
1121+inf:1
1122&is_negative
11230:0
11241:0
1125-1:1
1126-123:1
1127NaN:0
1128-inf:1
1129+inf:0
1130&parts
11310:0 1
11321:1 0
1133123:123 0
1134-123:-123 0
1135-1200:-12 2
1136NaNparts:NaN NaN
1137+inf:inf inf
1138-inf:-inf inf
1139&exponent
11400:1
11411:0
1142123:0
1143-123:0
1144-1200:2
1145+inf:inf
1146-inf:inf
1147NaNexponent:NaN
1148&mantissa
11490:0
11501:1
1151123:123
1152-123:-123
1153-1200:-12
1154+inf:inf
1155-inf:-inf
1156NaNmantissa:NaN
1157&length
1158123:3
1159-123:3
11600:1
11611:1
116212345678901234567890:20
1163&is_zero
1164NaNzero:0
1165+inf:0
1166-inf:0
11670:1
1168-1:0
11691:0
1170&is_one
1171NaNone:0
1172+inf:0
1173-inf:0
11740:0
11752:0
11761:1
1177-1:0
1178-2:0
027dc388 1179&ffloor
ee15d750 11800:0
1181abc:NaN
1182+inf:inf
1183-inf:-inf
11841:1
1185-51:-51
1186-51.2:-52
118712.2:12
027dc388 1188&fceil
ee15d750 11890:0
1190abc:NaN
1191+inf:inf
1192-inf:-inf
11931:1
1194-51:-51
1195-51.2:-51
119612.2:13