Dynaloading for POSIX-BC from Thomas Dorner.
[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]');";
34 } elsif ($f eq "fnan") {
35 $try .= "\$x->fnan();";
36 } elsif ($f eq "numify") {
37 $try .= "\$x->numify();";
38 } elsif ($f eq "fone") {
39 $try .= "\$x->bone('$args[1]');";
40 } elsif ($f eq "fstr") {
41 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
42 $try .= '$x->fstr();';
43 } elsif ($f eq "fsstr") {
44 $try .= '$x->fsstr();';
45 } elsif ($f eq "parts") {
48b581a2 46 # ->bstr() to see if an object is returned
ee15d750 47 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
48 $try .= '"$a $b";';
49 } elsif ($f eq "length") {
50 $try .= '$x->length();';
51 } elsif ($f eq "exponent") {
48b581a2 52 # ->bstr() to see if an object is returned
ee15d750 53 $try .= '$x->exponent()->bstr();';
54 } elsif ($f eq "mantissa") {
48b581a2 55 # ->bstr() to see if an object is returned
ee15d750 56 $try .= '$x->mantissa()->bstr();';
57 } elsif ($f eq "fneg") {
58 $try .= '$x->bneg();';
59 } elsif ($f eq "fnorm") {
60 $try .= '$x->fnorm();';
61 } elsif ($f eq "bfloor") {
62 $try .= '$x->ffloor();';
63 } elsif ($f eq "bceil") {
64 $try .= '$x->fceil();';
65 } elsif ($f eq "is_zero") {
66 $try .= '$x->is_zero();';
67 } elsif ($f eq "is_one") {
68 $try .= '$x->is_one();';
69 } elsif ($f eq "is_positive") {
70 $try .= '$x->is_positive();';
71 } elsif ($f eq "is_negative") {
72 $try .= '$x->is_negative();';
73 } elsif ($f eq "is_odd") {
74 $try .= '$x->is_odd();';
75 } elsif ($f eq "is_even") {
76 $try .= '$x->is_even();';
77 } elsif ($f eq "as_number") {
78 $try .= '$x->as_number();';
79 } elsif ($f eq "fabs") {
80 $try .= '$x->fabs();';
81 } elsif ($f eq "finc") {
82 $try .= '++$x;';
83 } elsif ($f eq "fdec") {
84 $try .= '--$x;';
85 }elsif ($f eq "fround") {
86 $try .= "$setup; \$x->fround($args[1]);";
87 } elsif ($f eq "ffround") {
88 $try .= "$setup; \$x->ffround($args[1]);";
89 } elsif ($f eq "fsqrt") {
90 $try .= "$setup; \$x->fsqrt();";
91 }
92 else
93 {
94 $try .= "\$y = new $class \"$args[1]\";";
95 if ($f eq "fcmp") {
96 $try .= '$x <=> $y;';
97 } elsif ($f eq "facmp") {
98 $try .= '$x->facmp($y);';
99 } elsif ($f eq "fpow") {
100 $try .= '$x ** $y;';
101 } elsif ($f eq "fadd") {
102 $try .= '$x + $y;';
103 } elsif ($f eq "fsub") {
104 $try .= '$x - $y;';
105 } elsif ($f eq "fmul") {
106 $try .= '$x * $y;';
107 } elsif ($f eq "fdiv") {
108 $try .= "$setup; \$x / \$y;";
109 } elsif ($f eq "fmod") {
110 $try .= '$x % $y;';
111 } else { warn "Unknown op '$f'"; }
112 }
e745a66c 113 # print "# Trying: '$try'\n";
ee15d750 114 $ans1 = eval $try;
115 if ($ans =~ m|^/(.*)$|)
116 {
117 my $pat = $1;
118 if ($ans1 =~ /$pat/)
119 {
120 ok (1,1);
121 }
122 else
123 {
124 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
125 }
126 }
127 else
128 {
129 if ($ans eq "")
130 {
131 ok_undef ($ans1);
132 }
133 else
134 {
135 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
136 if (ref($ans1) eq "$class")
137 {
138 #print $ans1->_trailing_zeros(),"\n";
139 print "# Has trailing zeros after '$try'\n"
140 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
141 }
142 }
143 } # end pattern or string
144 }
145 } # end while
146
147# check whether new() for BigInts destroys them ($y == 12 in this case)
148$x = Math::BigInt->new(1200); $y = $class->new($x);
149ok ($y,1200); ok ($x,1200);
150
151###############################################################################
152# fdiv() in list context
153$x = $class->bzero(); ($x,$y) = $x->fdiv(0);
154ok ($x,'NaN'); ok ($y,'NaN');
155
156# fdiv() in list context
157$x = $class->bzero(); ($x,$y) = $x->fdiv(1);
158ok ($x,0); ok ($y,0);
159
160# all done
161
162###############################################################################
163# Perl 5.005 does not like ok ($x,undef)
164
165sub ok_undef
166 {
167 my $x = shift;
168
169 ok (1,1) and return if !defined $x;
170 ok ($x,'undef');
171 }
172
173__DATA__
174&fnorm
1751:1
176-0:0
177fnormNaN:NaN
178+inf:inf
179-inf:-inf
180123:123
181-123.4567:-123.4567
182&as_number
1830:0
1841:1
1851.2:1
1862.345:2
187-2:-2
188-123.456:-123
189-200:-200
190&finf
1911:+:inf
1922:-:-inf
1933:abc:inf
194&numify
1950:0e+1
196+1:1e+0
1971234:1234e+0
198NaN:NaN
199+inf:inf
200-inf:-inf
201&fnan
202abc:NaN
2032:NaN
204-2:NaN
2050:NaN
206&fone
2072:+:1
208-2:-:-1
209-2:+:1
2102:-:-1
2110::1
212-2::1
213abc::1
2142:abc:1
215&fsstr
216+inf:inf
217-inf:-inf
218abcfsstr:NaN
2191234.567:1234567e-3
220&fstr
221+inf:::inf
222-inf:::-inf
223abcfstr:::NaN
2241234.567:9::1234.56700
2251234.567::-6:1234.567000
22612345:5::12345
2270.001234:6::0.00123400
2280.001234::-8:0.00123400
2290:4::0
2300::-4:0.0000
231&fnorm
232inf:inf
233+inf:inf
234-inf:-inf
235+infinity:NaN
236+-inf:NaN
237abc:NaN
238 1 a:NaN
2391bcd2:NaN
24011111b:NaN
241+1z:NaN
242-1z:NaN
2430:0
244+0:0
245+00:0
246+0_0_0:0
247000000_0000000_00000:0
248-0:0
249-0000:0
250+1:1
251+01:1
252+001:1
253+00000100000:100000
254123456789:123456789
255-1:-1
256-01:-1
257-001:-1
258-123456789:-123456789
259-00000100000:-100000
260123.456a:NaN
261123.456:123.456
2620.01:0.01
263.002:0.002
264+.2:0.2
265-0.0003:-0.0003
266-.0000000004:-0.0000000004
267123456E2:12345600
268123456E-2:1234.56
269-123456E2:-12345600
270-123456E-2:-1234.56
2711e1:10
2722e-11:0.00000000002
273# excercise _split
274 .02e-1:0.002
275 000001:1
276 -00001:-1
277 -1:-1
278 000.01:0.01
279 -000.0023:-0.0023
280 1.1e1:11
281-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
282-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
283&fpow
2842:2:4
2851:2:1
2861:3:1
287-1:2:1
288-1:3:-1
289123.456:2:15241.383936
2902:-2:0.25
2912:-3:0.125
292128:-2:0.00006103515625
293abc:123.456:NaN
294123.456:abc:NaN
295+inf:123.45:inf
296-inf:123.45:-inf
297+inf:-123.45:inf
298-inf:-123.45:-inf
299&fneg
300fnegNaN:NaN
301+inf:-inf
302-inf:inf
303+0:0
304+1:-1
305-1:1
306+123456789:-123456789
307-123456789:123456789
308+123.456789:-123.456789
309-123456.789:123456.789
310&fabs
311fabsNaN:NaN
312+inf:inf
313-inf:inf
314+0:0
315+1:1
316-1:1
317+123456789:123456789
318-123456789:123456789
319+123.456789:123.456789
320-123456.789:123456.789
321&fround
322$round_mode = "trunc"
323+inf:5:inf
324-inf:5:-inf
3250:5:0
326NaNfround:5:NaN
327+10123456789:5:10123000000
328-10123456789:5:-10123000000
329+10123456789.123:5:10123000000
330-10123456789.123:5:-10123000000
331+10123456789:9:10123456700
332-10123456789:9:-10123456700
333+101234500:6:101234000
334-101234500:6:-101234000
335$round_mode = "zero"
336+20123456789:5:20123000000
337-20123456789:5:-20123000000
338+20123456789.123:5:20123000000
339-20123456789.123:5:-20123000000
340+20123456789:9:20123456800
341-20123456789:9:-20123456800
342+201234500:6:201234000
343-201234500:6:-201234000
344$round_mode = "+inf"
345+30123456789:5:30123000000
346-30123456789:5:-30123000000
347+30123456789.123:5:30123000000
348-30123456789.123:5:-30123000000
349+30123456789:9:30123456800
350-30123456789:9:-30123456800
351+301234500:6:301235000
352-301234500:6:-301234000
353$round_mode = "-inf"
354+40123456789:5:40123000000
355-40123456789:5:-40123000000
356+40123456789.123:5:40123000000
357-40123456789.123:5:-40123000000
358+40123456789:9:40123456800
359-40123456789:9:-40123456800
360+401234500:6:401234000
361-401234500:6:-401235000
362$round_mode = "odd"
363+50123456789:5:50123000000
364-50123456789:5:-50123000000
365+50123456789.123:5:50123000000
366-50123456789.123:5:-50123000000
367+50123456789:9:50123456800
368-50123456789:9:-50123456800
369+501234500:6:501235000
370-501234500:6:-501235000
371$round_mode = "even"
372+60123456789:5:60123000000
373-60123456789:5:-60123000000
374+60123456789:9:60123456800
375-60123456789:9:-60123456800
376+601234500:6:601234000
377-601234500:6:-601234000
378+60123456789.0123:5:60123000000
379-60123456789.0123:5:-60123000000
380&ffround
381$round_mode = "trunc"
382+inf:5:inf
383-inf:5:-inf
3840:5:0
385NaNffround:5:NaN
386+1.23:-1:1.2
387+1.234:-1:1.2
388+1.2345:-1:1.2
389+1.23:-2:1.23
390+1.234:-2:1.23
391+1.2345:-2:1.23
392+1.23:-3:1.230
393+1.234:-3:1.234
394+1.2345:-3:1.234
395-1.23:-1:-1.2
396+1.27:-1:1.2
397-1.27:-1:-1.2
398+1.25:-1:1.2
399-1.25:-1:-1.2
400+1.35:-1:1.3
401-1.35:-1:-1.3
402-0.0061234567890:-1:0.0
403-0.0061:-1:0.0
404-0.00612:-1:0.0
405-0.00612:-2:0.00
406-0.006:-1:0.0
407-0.006:-2:0.00
408-0.0006:-2:0.00
409-0.0006:-3:0.000
410-0.0065:-3:/-0\.006|-6e-03
411-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
412-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4130.05:0:0
4140.5:0:0
4150.51:0:0
4160.41:0:0
417$round_mode = "zero"
418+2.23:-1:/2.2(?:0{5}\d+)?
419-2.23:-1:/-2.2(?:0{5}\d+)?
420+2.27:-1:/2.(?:3|29{5}\d+)
421-2.27:-1:/-2.(?:3|29{5}\d+)
422+2.25:-1:/2.2(?:0{5}\d+)?
423-2.25:-1:/-2.2(?:0{5}\d+)?
424+2.35:-1:/2.(?:3|29{5}\d+)
425-2.35:-1:/-2.(?:3|29{5}\d+)
426-0.0065:-1:0.0
427-0.0065:-2:/-0\.01|-1e-02
428-0.0065:-3:/-0\.006|-6e-03
429-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
430-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4310.05:0:0
4320.5:0:0
4330.51:0:1
4340.41:0:0
435$round_mode = "+inf"
436+3.23:-1:/3.2(?:0{5}\d+)?
437-3.23:-1:/-3.2(?:0{5}\d+)?
438+3.27:-1:/3.(?:3|29{5}\d+)
439-3.27:-1:/-3.(?:3|29{5}\d+)
440+3.25:-1:/3.(?:3|29{5}\d+)
441-3.25:-1:/-3.2(?:0{5}\d+)?
442+3.35:-1:/3.(?:4|39{5}\d+)
443-3.35:-1:/-3.(?:3|29{5}\d+)
444-0.0065:-1:0.0
445-0.0065:-2:/-0\.01|-1e-02
446-0.0065:-3:/-0\.006|-6e-03
447-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
448-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4490.05:0:0
4500.5:0:1
4510.51:0:1
4520.41:0:0
453$round_mode = "-inf"
454+4.23:-1:/4.2(?:0{5}\d+)?
455-4.23:-1:/-4.2(?:0{5}\d+)?
456+4.27:-1:/4.(?:3|29{5}\d+)
457-4.27:-1:/-4.(?:3|29{5}\d+)
458+4.25:-1:/4.2(?:0{5}\d+)?
459-4.25:-1:/-4.(?:3|29{5}\d+)
460+4.35:-1:/4.(?:3|29{5}\d+)
461-4.35:-1:/-4.(?:4|39{5}\d+)
462-0.0065:-1:0.0
463-0.0065:-2:/-0\.01|-1e-02
464-0.0065:-3:/-0\.007|-7e-03
465-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
466-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4670.05:0:0
4680.5:0:0
4690.51:0:1
4700.41:0:0
471$round_mode = "odd"
472+5.23:-1:/5.2(?:0{5}\d+)?
473-5.23:-1:/-5.2(?:0{5}\d+)?
474+5.27:-1:/5.(?:3|29{5}\d+)
475-5.27:-1:/-5.(?:3|29{5}\d+)
476+5.25:-1:/5.(?:3|29{5}\d+)
477-5.25:-1:/-5.(?:3|29{5}\d+)
478+5.35:-1:/5.(?:3|29{5}\d+)
479-5.35:-1:/-5.(?:3|29{5}\d+)
480-0.0065:-1:0.0
481-0.0065:-2:/-0\.01|-1e-02
482-0.0065:-3:/-0\.007|-7e-03
483-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
484-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4850.05:0:0
4860.5:0:1
4870.51:0:1
4880.41:0:0
489$round_mode = "even"
490+6.23:-1:/6.2(?:0{5}\d+)?
491-6.23:-1:/-6.2(?:0{5}\d+)?
492+6.27:-1:/6.(?:3|29{5}\d+)
493-6.27:-1:/-6.(?:3|29{5}\d+)
494+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
495-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
496+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
497-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
498-0.0065:-1:0.0
499-0.0065:-2:/-0\.01|-1e-02
500-0.0065:-3:/-0\.006|-7e-03
501-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
502-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5030.05:0:0
5040.5:0:0
5050.51:0:1
5060.41:0:0
5070.01234567:-3:0.012
5080.01234567:-4:0.0123
5090.01234567:-5:0.01235
5100.01234567:-6:0.012346
5110.01234567:-7:0.0123457
5120.01234567:-8:0.01234567
5130.01234567:-9:0.012345670
5140.01234567:-12:0.012345670000
515&fcmp
516fcmpNaN:fcmpNaN:
517fcmpNaN:+0:
518+0:fcmpNaN:
519+0:+0:0
520-1:+0:-1
521+0:-1:1
522+1:+0:1
523+0:+1:-1
524-1:+1:-1
525+1:-1:1
526-1:-1:0
527+1:+1:0
528-1.1:0:-1
529+0:-1.1:1
530+1.1:+0:1
531+0:+1.1:-1
532+123:+123:0
533+123:+12:1
534+12:+123:-1
535-123:-123:0
536-123:-12:-1
537-12:-123:1
538+123:+124:-1
539+124:+123:1
540-123:-124:1
541-124:-123:-1
5420:0.01:-1
5430:0.0001:-1
5440:-0.0001:1
5450:-0.1:1
5460.1:0:1
5470.00001:0:1
548-0.0001:0:-1
549-0.1:0:-1
5500:0.0001234:-1
5510:-0.0001234:1
5520.0001234:0:1
553-0.0001234:0:-1
5540.0001:0.0005:-1
5550.0005:0.0001:1
5560.005:0.0001:1
5570.001:0.0005:1
5580.000001:0.0005:-1
5590.00000123:0.0005:-1
5600.00512:0.0001:1
5610.005:0.000112:1
5620.00123:0.0005:1
5631.5:2:-1
5642:1.5:1
5651.54321:234:-1
566234:1.54321:1
567# infinity
568-inf:5432112345:-1
569+inf:5432112345:1
570-inf:-5432112345:-1
571+inf:-5432112345:1
572-inf:54321.12345:-1
573+inf:54321.12345:1
574-inf:-54321.12345:-1
575+inf:-54321.12345:1
576+inf:+inf:0
577-inf:-inf:0
578+inf:-inf:1
579-inf:+inf:-1
580# return undef
581+inf:NaN:
582NaN:inf:
583-inf:NaN:
584NaN:-inf:
585&facmp
586fcmpNaN:fcmpNaN:
587fcmpNaN:+0:
588+0:fcmpNaN:
589+0:+0:0
590-1:+0:1
591+0:-1:-1
592+1:+0:1
593+0:+1:-1
594-1:+1:0
595+1:-1:0
596-1:-1:0
597+1:+1:0
598-1.1:0:1
599+0:-1.1:-1
600+1.1:+0:1
601+0:+1.1:-1
602+123:+123:0
603+123:+12:1
604+12:+123:-1
605-123:-123:0
606-123:-12:1
607-12:-123:-1
608+123:+124:-1
609+124:+123:1
610-123:-124:-1
611-124:-123:1
6120:0.01:-1
6130:0.0001:-1
6140:-0.0001:-1
6150:-0.1:-1
6160.1:0:1
6170.00001:0:1
618-0.0001:0:1
619-0.1:0:1
6200:0.0001234:-1
6210:-0.0001234:-1
6220.0001234:0:1
623-0.0001234:0:1
6240.0001:0.0005:-1
6250.0005:0.0001:1
6260.005:0.0001:1
6270.001:0.0005:1
6280.000001:0.0005:-1
6290.00000123:0.0005:-1
6300.00512:0.0001:1
6310.005:0.000112:1
6320.00123:0.0005:1
6331.5:2:-1
6342:1.5:1
6351.54321:234:-1
636234:1.54321:1
637# infinity
638-inf:5432112345:1
639+inf:5432112345:1
640-inf:-5432112345:1
641+inf:-5432112345:1
642-inf:54321.12345:1
643+inf:54321.12345:1
644-inf:-54321.12345:1
645+inf:-54321.12345:1
646+inf:+inf:0
647-inf:-inf:0
648+inf:-inf:0
649-inf:+inf:0
48b581a2 6505:inf:-1
651-1:inf:-1
6525:-inf:-1
653-1:-inf:-1
ee15d750 654# return undef
655+inf:facmpNaN:
656facmpNaN:inf:
657-inf:facmpNaN:
658facmpNaN:-inf:
659&fdec
660fdecNaN:NaN
661+inf:inf
662-inf:-inf
663+0:-1
664+1:0
665-1:-2
6661.23:0.23
667-1.23:-2.23
e745a66c 668100:99
669101:100
670-100:-101
671-99:-100
672-98:-99
67399:98
ee15d750 674&finc
675fincNaN:NaN
676+inf:inf
677-inf:-inf
678+0:1
679+1:2
680-1:0
6811.23:2.23
682-1.23:-0.23
e745a66c 683100:101
684-100:-99
685-99:-98
686-101:-100
68799:100
ee15d750 688&fadd
689abc:abc:NaN
690abc:+0:NaN
691+0:abc:NaN
692+inf:-inf:0
693-inf:+inf:0
694+inf:+inf:inf
695-inf:-inf:-inf
696baddNaN:+inf:NaN
697baddNaN:+inf:NaN
698+inf:baddNaN:NaN
699-inf:baddNaN:NaN
700+0:+0:0
701+1:+0:1
702+0:+1:1
703+1:+1:2
704-1:+0:-1
705+0:-1:-1
706-1:-1:-2
707-1:+1:0
708+1:-1:0
709+9:+1:10
710+99:+1:100
711+999:+1:1000
712+9999:+1:10000
713+99999:+1:100000
714+999999:+1:1000000
715+9999999:+1:10000000
716+99999999:+1:100000000
717+999999999:+1:1000000000
718+9999999999:+1:10000000000
719+99999999999:+1:100000000000
720+10:-1:9
721+100:-1:99
722+1000:-1:999
723+10000:-1:9999
724+100000:-1:99999
725+1000000:-1:999999
726+10000000:-1:9999999
727+100000000:-1:99999999
728+1000000000:-1:999999999
729+10000000000:-1:9999999999
730+123456789:+987654321:1111111110
731-123456789:+987654321:864197532
732-123456789:-987654321:-1111111110
733+123456789:-987654321:-864197532
7340.001234:0.0001234:0.0013574
735&fsub
736abc:abc:NaN
737abc:+0:NaN
738+0:abc:NaN
739+inf:-inf:inf
740-inf:+inf:-inf
741+inf:+inf:0
742-inf:-inf:0
743baddNaN:+inf:NaN
744baddNaN:+inf:NaN
745+inf:baddNaN:NaN
746-inf:baddNaN:NaN
747+0:+0:0
748+1:+0:1
749+0:+1:-1
750+1:+1:0
751-1:+0:-1
752+0:-1:1
753-1:-1:0
754-1:+1:-2
755+1:-1:2
756+9:+1:8
757+99:+1:98
758+999:+1:998
759+9999:+1:9998
760+99999:+1:99998
761+999999:+1:999998
762+9999999:+1:9999998
763+99999999:+1:99999998
764+999999999:+1:999999998
765+9999999999:+1:9999999998
766+99999999999:+1:99999999998
767+10:-1:11
768+100:-1:101
769+1000:-1:1001
770+10000:-1:10001
771+100000:-1:100001
772+1000000:-1:1000001
773+10000000:-1:10000001
774+100000000:-1:100000001
775+1000000000:-1:1000000001
776+10000000000:-1:10000000001
777+123456789:+987654321:-864197532
778-123456789:+987654321:-1111111110
779-123456789:-987654321:864197532
780+123456789:-987654321:1111111110
781&fmul
782abc:abc:NaN
783abc:+0:NaN
784+0:abc:NaN
785+inf:NaNmul:NaN
786+inf:NaNmul:NaN
787NaNmul:+inf:NaN
788NaNmul:-inf:NaN
789+inf:+inf:inf
790+inf:-inf:-inf
791+inf:-inf:-inf
792+inf:+inf:inf
793+inf:123.34:inf
794+inf:-123.34:-inf
795-inf:123.34:-inf
796-inf:-123.34:inf
797123.34:+inf:inf
798-123.34:+inf:-inf
799123.34:-inf:-inf
800-123.34:-inf:inf
801+0:+0:0
802+0:+1:0
803+1:+0:0
804+0:-1:0
805-1:+0:0
806+123456789123456789:+0:0
807+0:+123456789123456789:0
808-1:-1:1
809-1:+1:-1
810+1:-1:-1
811+1:+1:1
812+2:+3:6
813-2:+3:-6
814+2:-3:-6
815-2:-3:6
816+111:+111:12321
817+10101:+10101:102030201
818+1001001:+1001001:1002003002001
819+100010001:+100010001:10002000300020001
820+10000100001:+10000100001:100002000030000200001
821+11111111111:+9:99999999999
822+22222222222:+9:199999999998
823+33333333333:+9:299999999997
824+44444444444:+9:399999999996
825+55555555555:+9:499999999995
826+66666666666:+9:599999999994
827+77777777777:+9:699999999993
828+88888888888:+9:799999999992
829+99999999999:+9:899999999991
8306:120:720
83110:10000:100000
832&fdiv
833$div_scale = 40; $round_mode = 'even'
834abc:abc:NaN
835abc:+1:abc:NaN
836+1:abc:NaN
837-1:abc:NaN
8380:abc:NaN
839+0:+0:NaN
840+0:+1:0
841+1:+0:inf
842+3214:+0:inf
843+0:-1:0
844-1:+0:-inf
845-3214:+0:-inf
846+1:+1:1
847-1:-1:1
848+1:-1:-1
849-1:+1:-1
850+1:+2:0.5
851+2:+1:2
852123:+inf:0
853123:-inf:0
854+10:+5:2
855+100:+4:25
856+1000:+8:125
857+10000:+16:625
858+10000:-16:-625
859+999999999999:+9:111111111111
860+999999999999:+99:10101010101
861+999999999999:+999:1001001001
862+999999999999:+9999:100010001
863+999999999999999:+99999:10000100001
864+1000000000:+9:111111111.1111111111111111111111111111111
865+2000000000:+9:222222222.2222222222222222222222222222222
866+3000000000:+9:333333333.3333333333333333333333333333333
867+4000000000:+9:444444444.4444444444444444444444444444444
868+5000000000:+9:555555555.5555555555555555555555555555556
869+6000000000:+9:666666666.6666666666666666666666666666667
870+7000000000:+9:777777777.7777777777777777777777777777778
871+8000000000:+9:888888888.8888888888888888888888888888889
872+9000000000:+9:1000000000
873+35500000:+113:314159.2920353982300884955752212389380531
874+71000000:+226:314159.2920353982300884955752212389380531
875+106500000:+339:314159.2920353982300884955752212389380531
876+1000000000:+3:333333333.3333333333333333333333333333333
8772:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
878$div_scale = 20
879+1000000000:+9:111111111.11111111111
880+2000000000:+9:222222222.22222222222
881+3000000000:+9:333333333.33333333333
882+4000000000:+9:444444444.44444444444
883+5000000000:+9:555555555.55555555556
884+6000000000:+9:666666666.66666666667
885+7000000000:+9:777777777.77777777778
886+8000000000:+9:888888888.88888888889
887+9000000000:+9:1000000000
8881:10:0.1
8891:100:0.01
8901:1000:0.001
8911:10000:0.0001
8921:504:0.001984126984126984127
8932:1.987654321:1.0062111801179738436
894# the next two cases are the "old" behaviour, but are now (>v0.01) different
895#+35500000:+113:314159.292035398230088
896#+71000000:+226:314159.292035398230088
897+35500000:+113:314159.29203539823009
898+71000000:+226:314159.29203539823009
899+106500000:+339:314159.29203539823009
900+1000000000:+3:333333333.33333333333
901$div_scale = 1
902# round to accuracy 1 after bdiv
903+124:+3:40
904# reset scale for further tests
905$div_scale = 40
906&fmod
907+0:0:NaN
908+0:1:0
909+3:1:0
910#+5:2:1
911#+9:4:1
912#+9:5:4
913#+9000:56:40
914#+56:9000:56
915&fsqrt
916+0:0
917-1:NaN
918-2:NaN
919-16:NaN
920-123.45:NaN
921nanfsqrt:NaN
922+inf:inf
923-inf:NaN
924+1:1
925+2:1.41421356237309504880168872420969807857
926+4:2
927+16:4
928+100:10
929+123.456:11.11107555549866648462149404118219234119
930+15241.38393:123.4559999756998444766131352122991626468
931+1.44:1.2
932&is_odd
933abc:0
9340:0
935-1:1
936-3:1
9371:1
9383:1
9391000001:1
9401000002:0
941+inf:0
942-inf:0
943123.45:0
944-123.45:0
9452:0
946&is_even
947abc:0
9480:1
949-1:0
950-3:0
9511:0
9523:0
9531000001:0
9541000002:1
9552:1
956+inf:0
957-inf:0
958123.456:0
959-123.456:0
960&is_positive
9610:1
9621:1
963-1:0
964-123:0
965NaN:0
966-inf:0
967+inf:1
968&is_negative
9690:0
9701:0
971-1:1
972-123:1
973NaN:0
974-inf:1
975+inf:0
976&parts
9770:0 1
9781:1 0
979123:123 0
980-123:-123 0
981-1200:-12 2
982NaNparts:NaN NaN
983+inf:inf inf
984-inf:-inf inf
985&exponent
9860:1
9871:0
988123:0
989-123:0
990-1200:2
991+inf:inf
992-inf:inf
993NaNexponent:NaN
994&mantissa
9950:0
9961:1
997123:123
998-123:-123
999-1200:-12
1000+inf:inf
1001-inf:-inf
1002NaNmantissa:NaN
1003&length
1004123:3
1005-123:3
10060:1
10071:1
100812345678901234567890:20
1009&is_zero
1010NaNzero:0
1011+inf:0
1012-inf:0
10130:1
1014-1:0
10151:0
1016&is_one
1017NaNone:0
1018+inf:0
1019-inf:0
10200:0
10212:0
10221:1
1023-1:0
1024-2:0
1025&bfloor
10260:0
1027abc:NaN
1028+inf:inf
1029-inf:-inf
10301:1
1031-51:-51
1032-51.2:-52
103312.2:12
1034&bceil
10350:0
1036abc:NaN
1037+inf:inf
1038-inf:-inf
10391:1
1040-51:-51
1041-51.2:-51
104212.2:13