Re: PERFORCE change 12943 for review
[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 }
113 $ans1 = eval $try;
114 if ($ans =~ m|^/(.*)$|)
115 {
116 my $pat = $1;
117 if ($ans1 =~ /$pat/)
118 {
119 ok (1,1);
120 }
121 else
122 {
123 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
124 }
125 }
126 else
127 {
128 if ($ans eq "")
129 {
130 ok_undef ($ans1);
131 }
132 else
133 {
134 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
135 if (ref($ans1) eq "$class")
136 {
137 #print $ans1->_trailing_zeros(),"\n";
138 print "# Has trailing zeros after '$try'\n"
139 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
140 }
141 }
142 } # end pattern or string
143 }
144 } # end while
145
146# check whether new() for BigInts destroys them ($y == 12 in this case)
147$x = Math::BigInt->new(1200); $y = $class->new($x);
148ok ($y,1200); ok ($x,1200);
149
150###############################################################################
151# fdiv() in list context
152$x = $class->bzero(); ($x,$y) = $x->fdiv(0);
153ok ($x,'NaN'); ok ($y,'NaN');
154
155# fdiv() in list context
156$x = $class->bzero(); ($x,$y) = $x->fdiv(1);
157ok ($x,0); ok ($y,0);
158
159# all done
160
161###############################################################################
162# Perl 5.005 does not like ok ($x,undef)
163
164sub ok_undef
165 {
166 my $x = shift;
167
168 ok (1,1) and return if !defined $x;
169 ok ($x,'undef');
170 }
171
172__DATA__
173&fnorm
1741:1
175-0:0
176fnormNaN:NaN
177+inf:inf
178-inf:-inf
179123:123
180-123.4567:-123.4567
181&as_number
1820:0
1831:1
1841.2:1
1852.345:2
186-2:-2
187-123.456:-123
188-200:-200
189&finf
1901:+:inf
1912:-:-inf
1923:abc:inf
193&numify
1940:0e+1
195+1:1e+0
1961234:1234e+0
197NaN:NaN
198+inf:inf
199-inf:-inf
200&fnan
201abc:NaN
2022:NaN
203-2:NaN
2040:NaN
205&fone
2062:+:1
207-2:-:-1
208-2:+:1
2092:-:-1
2100::1
211-2::1
212abc::1
2132:abc:1
214&fsstr
215+inf:inf
216-inf:-inf
217abcfsstr:NaN
2181234.567:1234567e-3
219&fstr
220+inf:::inf
221-inf:::-inf
222abcfstr:::NaN
2231234.567:9::1234.56700
2241234.567::-6:1234.567000
22512345:5::12345
2260.001234:6::0.00123400
2270.001234::-8:0.00123400
2280:4::0
2290::-4:0.0000
230&fnorm
231inf:inf
232+inf:inf
233-inf:-inf
234+infinity:NaN
235+-inf:NaN
236abc:NaN
237 1 a:NaN
2381bcd2:NaN
23911111b:NaN
240+1z:NaN
241-1z:NaN
2420:0
243+0:0
244+00:0
245+0_0_0:0
246000000_0000000_00000:0
247-0:0
248-0000:0
249+1:1
250+01:1
251+001:1
252+00000100000:100000
253123456789:123456789
254-1:-1
255-01:-1
256-001:-1
257-123456789:-123456789
258-00000100000:-100000
259123.456a:NaN
260123.456:123.456
2610.01:0.01
262.002:0.002
263+.2:0.2
264-0.0003:-0.0003
265-.0000000004:-0.0000000004
266123456E2:12345600
267123456E-2:1234.56
268-123456E2:-12345600
269-123456E-2:-1234.56
2701e1:10
2712e-11:0.00000000002
272# excercise _split
273 .02e-1:0.002
274 000001:1
275 -00001:-1
276 -1:-1
277 000.01:0.01
278 -000.0023:-0.0023
279 1.1e1:11
280-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
281-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
282&fpow
2832:2:4
2841:2:1
2851:3:1
286-1:2:1
287-1:3:-1
288123.456:2:15241.383936
2892:-2:0.25
2902:-3:0.125
291128:-2:0.00006103515625
292abc:123.456:NaN
293123.456:abc:NaN
294+inf:123.45:inf
295-inf:123.45:-inf
296+inf:-123.45:inf
297-inf:-123.45:-inf
298&fneg
299fnegNaN:NaN
300+inf:-inf
301-inf:inf
302+0:0
303+1:-1
304-1:1
305+123456789:-123456789
306-123456789:123456789
307+123.456789:-123.456789
308-123456.789:123456.789
309&fabs
310fabsNaN:NaN
311+inf:inf
312-inf:inf
313+0:0
314+1:1
315-1:1
316+123456789:123456789
317-123456789:123456789
318+123.456789:123.456789
319-123456.789:123456.789
320&fround
321$round_mode = "trunc"
322+inf:5:inf
323-inf:5:-inf
3240:5:0
325NaNfround:5:NaN
326+10123456789:5:10123000000
327-10123456789:5:-10123000000
328+10123456789.123:5:10123000000
329-10123456789.123:5:-10123000000
330+10123456789:9:10123456700
331-10123456789:9:-10123456700
332+101234500:6:101234000
333-101234500:6:-101234000
334$round_mode = "zero"
335+20123456789:5:20123000000
336-20123456789:5:-20123000000
337+20123456789.123:5:20123000000
338-20123456789.123:5:-20123000000
339+20123456789:9:20123456800
340-20123456789:9:-20123456800
341+201234500:6:201234000
342-201234500:6:-201234000
343$round_mode = "+inf"
344+30123456789:5:30123000000
345-30123456789:5:-30123000000
346+30123456789.123:5:30123000000
347-30123456789.123:5:-30123000000
348+30123456789:9:30123456800
349-30123456789:9:-30123456800
350+301234500:6:301235000
351-301234500:6:-301234000
352$round_mode = "-inf"
353+40123456789:5:40123000000
354-40123456789:5:-40123000000
355+40123456789.123:5:40123000000
356-40123456789.123:5:-40123000000
357+40123456789:9:40123456800
358-40123456789:9:-40123456800
359+401234500:6:401234000
360-401234500:6:-401235000
361$round_mode = "odd"
362+50123456789:5:50123000000
363-50123456789:5:-50123000000
364+50123456789.123:5:50123000000
365-50123456789.123:5:-50123000000
366+50123456789:9:50123456800
367-50123456789:9:-50123456800
368+501234500:6:501235000
369-501234500:6:-501235000
370$round_mode = "even"
371+60123456789:5:60123000000
372-60123456789:5:-60123000000
373+60123456789:9:60123456800
374-60123456789:9:-60123456800
375+601234500:6:601234000
376-601234500:6:-601234000
377+60123456789.0123:5:60123000000
378-60123456789.0123:5:-60123000000
379&ffround
380$round_mode = "trunc"
381+inf:5:inf
382-inf:5:-inf
3830:5:0
384NaNffround:5:NaN
385+1.23:-1:1.2
386+1.234:-1:1.2
387+1.2345:-1:1.2
388+1.23:-2:1.23
389+1.234:-2:1.23
390+1.2345:-2:1.23
391+1.23:-3:1.230
392+1.234:-3:1.234
393+1.2345:-3:1.234
394-1.23:-1:-1.2
395+1.27:-1:1.2
396-1.27:-1:-1.2
397+1.25:-1:1.2
398-1.25:-1:-1.2
399+1.35:-1:1.3
400-1.35:-1:-1.3
401-0.0061234567890:-1:0.0
402-0.0061:-1:0.0
403-0.00612:-1:0.0
404-0.00612:-2:0.00
405-0.006:-1:0.0
406-0.006:-2:0.00
407-0.0006:-2:0.00
408-0.0006:-3:0.000
409-0.0065:-3:/-0\.006|-6e-03
410-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
411-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4120.05:0:0
4130.5:0:0
4140.51:0:0
4150.41:0:0
416$round_mode = "zero"
417+2.23:-1:/2.2(?:0{5}\d+)?
418-2.23:-1:/-2.2(?:0{5}\d+)?
419+2.27:-1:/2.(?:3|29{5}\d+)
420-2.27:-1:/-2.(?:3|29{5}\d+)
421+2.25:-1:/2.2(?:0{5}\d+)?
422-2.25:-1:/-2.2(?:0{5}\d+)?
423+2.35:-1:/2.(?:3|29{5}\d+)
424-2.35:-1:/-2.(?:3|29{5}\d+)
425-0.0065:-1:0.0
426-0.0065:-2:/-0\.01|-1e-02
427-0.0065:-3:/-0\.006|-6e-03
428-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
429-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4300.05:0:0
4310.5:0:0
4320.51:0:1
4330.41:0:0
434$round_mode = "+inf"
435+3.23:-1:/3.2(?:0{5}\d+)?
436-3.23:-1:/-3.2(?:0{5}\d+)?
437+3.27:-1:/3.(?:3|29{5}\d+)
438-3.27:-1:/-3.(?:3|29{5}\d+)
439+3.25:-1:/3.(?:3|29{5}\d+)
440-3.25:-1:/-3.2(?:0{5}\d+)?
441+3.35:-1:/3.(?:4|39{5}\d+)
442-3.35:-1:/-3.(?:3|29{5}\d+)
443-0.0065:-1:0.0
444-0.0065:-2:/-0\.01|-1e-02
445-0.0065:-3:/-0\.006|-6e-03
446-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
447-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4480.05:0:0
4490.5:0:1
4500.51:0:1
4510.41:0:0
452$round_mode = "-inf"
453+4.23:-1:/4.2(?:0{5}\d+)?
454-4.23:-1:/-4.2(?:0{5}\d+)?
455+4.27:-1:/4.(?:3|29{5}\d+)
456-4.27:-1:/-4.(?:3|29{5}\d+)
457+4.25:-1:/4.2(?:0{5}\d+)?
458-4.25:-1:/-4.(?:3|29{5}\d+)
459+4.35:-1:/4.(?:3|29{5}\d+)
460-4.35:-1:/-4.(?:4|39{5}\d+)
461-0.0065:-1:0.0
462-0.0065:-2:/-0\.01|-1e-02
463-0.0065:-3:/-0\.007|-7e-03
464-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
465-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4660.05:0:0
4670.5:0:0
4680.51:0:1
4690.41:0:0
470$round_mode = "odd"
471+5.23:-1:/5.2(?:0{5}\d+)?
472-5.23:-1:/-5.2(?:0{5}\d+)?
473+5.27:-1:/5.(?:3|29{5}\d+)
474-5.27:-1:/-5.(?:3|29{5}\d+)
475+5.25:-1:/5.(?:3|29{5}\d+)
476-5.25:-1:/-5.(?:3|29{5}\d+)
477+5.35:-1:/5.(?:3|29{5}\d+)
478-5.35:-1:/-5.(?:3|29{5}\d+)
479-0.0065:-1:0.0
480-0.0065:-2:/-0\.01|-1e-02
481-0.0065:-3:/-0\.007|-7e-03
482-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
483-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4840.05:0:0
4850.5:0:1
4860.51:0:1
4870.41:0:0
488$round_mode = "even"
489+6.23:-1:/6.2(?:0{5}\d+)?
490-6.23:-1:/-6.2(?:0{5}\d+)?
491+6.27:-1:/6.(?:3|29{5}\d+)
492-6.27:-1:/-6.(?:3|29{5}\d+)
493+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
494-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
495+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
496-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
497-0.0065:-1:0.0
498-0.0065:-2:/-0\.01|-1e-02
499-0.0065:-3:/-0\.006|-7e-03
500-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
501-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
5020.05:0:0
5030.5:0:0
5040.51:0:1
5050.41:0:0
5060.01234567:-3:0.012
5070.01234567:-4:0.0123
5080.01234567:-5:0.01235
5090.01234567:-6:0.012346
5100.01234567:-7:0.0123457
5110.01234567:-8:0.01234567
5120.01234567:-9:0.012345670
5130.01234567:-12:0.012345670000
514&fcmp
515fcmpNaN:fcmpNaN:
516fcmpNaN:+0:
517+0:fcmpNaN:
518+0:+0:0
519-1:+0:-1
520+0:-1:1
521+1:+0:1
522+0:+1:-1
523-1:+1:-1
524+1:-1:1
525-1:-1:0
526+1:+1:0
527-1.1:0:-1
528+0:-1.1:1
529+1.1:+0:1
530+0:+1.1:-1
531+123:+123:0
532+123:+12:1
533+12:+123:-1
534-123:-123:0
535-123:-12:-1
536-12:-123:1
537+123:+124:-1
538+124:+123:1
539-123:-124:1
540-124:-123:-1
5410:0.01:-1
5420:0.0001:-1
5430:-0.0001:1
5440:-0.1:1
5450.1:0:1
5460.00001:0:1
547-0.0001:0:-1
548-0.1:0:-1
5490:0.0001234:-1
5500:-0.0001234:1
5510.0001234:0:1
552-0.0001234:0:-1
5530.0001:0.0005:-1
5540.0005:0.0001:1
5550.005:0.0001:1
5560.001:0.0005:1
5570.000001:0.0005:-1
5580.00000123:0.0005:-1
5590.00512:0.0001:1
5600.005:0.000112:1
5610.00123:0.0005:1
5621.5:2:-1
5632:1.5:1
5641.54321:234:-1
565234:1.54321:1
566# infinity
567-inf:5432112345:-1
568+inf:5432112345:1
569-inf:-5432112345:-1
570+inf:-5432112345:1
571-inf:54321.12345:-1
572+inf:54321.12345:1
573-inf:-54321.12345:-1
574+inf:-54321.12345:1
575+inf:+inf:0
576-inf:-inf:0
577+inf:-inf:1
578-inf:+inf:-1
579# return undef
580+inf:NaN:
581NaN:inf:
582-inf:NaN:
583NaN:-inf:
584&facmp
585fcmpNaN:fcmpNaN:
586fcmpNaN:+0:
587+0:fcmpNaN:
588+0:+0:0
589-1:+0:1
590+0:-1:-1
591+1:+0:1
592+0:+1:-1
593-1:+1:0
594+1:-1:0
595-1:-1:0
596+1:+1:0
597-1.1:0:1
598+0:-1.1:-1
599+1.1:+0:1
600+0:+1.1:-1
601+123:+123:0
602+123:+12:1
603+12:+123:-1
604-123:-123:0
605-123:-12:1
606-12:-123:-1
607+123:+124:-1
608+124:+123:1
609-123:-124:-1
610-124:-123:1
6110:0.01:-1
6120:0.0001:-1
6130:-0.0001:-1
6140:-0.1:-1
6150.1:0:1
6160.00001:0:1
617-0.0001:0:1
618-0.1:0:1
6190:0.0001234:-1
6200:-0.0001234:-1
6210.0001234:0:1
622-0.0001234:0:1
6230.0001:0.0005:-1
6240.0005:0.0001:1
6250.005:0.0001:1
6260.001:0.0005:1
6270.000001:0.0005:-1
6280.00000123:0.0005:-1
6290.00512:0.0001:1
6300.005:0.000112:1
6310.00123:0.0005:1
6321.5:2:-1
6332:1.5:1
6341.54321:234:-1
635234:1.54321:1
636# infinity
637-inf:5432112345:1
638+inf:5432112345:1
639-inf:-5432112345:1
640+inf:-5432112345:1
641-inf:54321.12345:1
642+inf:54321.12345:1
643-inf:-54321.12345:1
644+inf:-54321.12345:1
645+inf:+inf:0
646-inf:-inf:0
647+inf:-inf:0
648-inf:+inf:0
48b581a2 6495:inf:-1
650-1:inf:-1
6515:-inf:-1
652-1:-inf:-1
ee15d750 653# return undef
654+inf:facmpNaN:
655facmpNaN:inf:
656-inf:facmpNaN:
657facmpNaN:-inf:
658&fdec
659fdecNaN:NaN
660+inf:inf
661-inf:-inf
662+0:-1
663+1:0
664-1:-2
6651.23:0.23
666-1.23:-2.23
667&finc
668fincNaN:NaN
669+inf:inf
670-inf:-inf
671+0:1
672+1:2
673-1:0
6741.23:2.23
675-1.23:-0.23
676&fadd
677abc:abc:NaN
678abc:+0:NaN
679+0:abc:NaN
680+inf:-inf:0
681-inf:+inf:0
682+inf:+inf:inf
683-inf:-inf:-inf
684baddNaN:+inf:NaN
685baddNaN:+inf:NaN
686+inf:baddNaN:NaN
687-inf:baddNaN:NaN
688+0:+0:0
689+1:+0:1
690+0:+1:1
691+1:+1:2
692-1:+0:-1
693+0:-1:-1
694-1:-1:-2
695-1:+1:0
696+1:-1:0
697+9:+1:10
698+99:+1:100
699+999:+1:1000
700+9999:+1:10000
701+99999:+1:100000
702+999999:+1:1000000
703+9999999:+1:10000000
704+99999999:+1:100000000
705+999999999:+1:1000000000
706+9999999999:+1:10000000000
707+99999999999:+1:100000000000
708+10:-1:9
709+100:-1:99
710+1000:-1:999
711+10000:-1:9999
712+100000:-1:99999
713+1000000:-1:999999
714+10000000:-1:9999999
715+100000000:-1:99999999
716+1000000000:-1:999999999
717+10000000000:-1:9999999999
718+123456789:+987654321:1111111110
719-123456789:+987654321:864197532
720-123456789:-987654321:-1111111110
721+123456789:-987654321:-864197532
7220.001234:0.0001234:0.0013574
723&fsub
724abc:abc:NaN
725abc:+0:NaN
726+0:abc:NaN
727+inf:-inf:inf
728-inf:+inf:-inf
729+inf:+inf:0
730-inf:-inf:0
731baddNaN:+inf:NaN
732baddNaN:+inf:NaN
733+inf:baddNaN:NaN
734-inf:baddNaN:NaN
735+0:+0:0
736+1:+0:1
737+0:+1:-1
738+1:+1:0
739-1:+0:-1
740+0:-1:1
741-1:-1:0
742-1:+1:-2
743+1:-1:2
744+9:+1:8
745+99:+1:98
746+999:+1:998
747+9999:+1:9998
748+99999:+1:99998
749+999999:+1:999998
750+9999999:+1:9999998
751+99999999:+1:99999998
752+999999999:+1:999999998
753+9999999999:+1:9999999998
754+99999999999:+1:99999999998
755+10:-1:11
756+100:-1:101
757+1000:-1:1001
758+10000:-1:10001
759+100000:-1:100001
760+1000000:-1:1000001
761+10000000:-1:10000001
762+100000000:-1:100000001
763+1000000000:-1:1000000001
764+10000000000:-1:10000000001
765+123456789:+987654321:-864197532
766-123456789:+987654321:-1111111110
767-123456789:-987654321:864197532
768+123456789:-987654321:1111111110
769&fmul
770abc:abc:NaN
771abc:+0:NaN
772+0:abc:NaN
773+inf:NaNmul:NaN
774+inf:NaNmul:NaN
775NaNmul:+inf:NaN
776NaNmul:-inf:NaN
777+inf:+inf:inf
778+inf:-inf:-inf
779+inf:-inf:-inf
780+inf:+inf:inf
781+inf:123.34:inf
782+inf:-123.34:-inf
783-inf:123.34:-inf
784-inf:-123.34:inf
785123.34:+inf:inf
786-123.34:+inf:-inf
787123.34:-inf:-inf
788-123.34:-inf:inf
789+0:+0:0
790+0:+1:0
791+1:+0:0
792+0:-1:0
793-1:+0:0
794+123456789123456789:+0:0
795+0:+123456789123456789:0
796-1:-1:1
797-1:+1:-1
798+1:-1:-1
799+1:+1:1
800+2:+3:6
801-2:+3:-6
802+2:-3:-6
803-2:-3:6
804+111:+111:12321
805+10101:+10101:102030201
806+1001001:+1001001:1002003002001
807+100010001:+100010001:10002000300020001
808+10000100001:+10000100001:100002000030000200001
809+11111111111:+9:99999999999
810+22222222222:+9:199999999998
811+33333333333:+9:299999999997
812+44444444444:+9:399999999996
813+55555555555:+9:499999999995
814+66666666666:+9:599999999994
815+77777777777:+9:699999999993
816+88888888888:+9:799999999992
817+99999999999:+9:899999999991
8186:120:720
81910:10000:100000
820&fdiv
821$div_scale = 40; $round_mode = 'even'
822abc:abc:NaN
823abc:+1:abc:NaN
824+1:abc:NaN
825-1:abc:NaN
8260:abc:NaN
827+0:+0:NaN
828+0:+1:0
829+1:+0:inf
830+3214:+0:inf
831+0:-1:0
832-1:+0:-inf
833-3214:+0:-inf
834+1:+1:1
835-1:-1:1
836+1:-1:-1
837-1:+1:-1
838+1:+2:0.5
839+2:+1:2
840123:+inf:0
841123:-inf:0
842+10:+5:2
843+100:+4:25
844+1000:+8:125
845+10000:+16:625
846+10000:-16:-625
847+999999999999:+9:111111111111
848+999999999999:+99:10101010101
849+999999999999:+999:1001001001
850+999999999999:+9999:100010001
851+999999999999999:+99999:10000100001
852+1000000000:+9:111111111.1111111111111111111111111111111
853+2000000000:+9:222222222.2222222222222222222222222222222
854+3000000000:+9:333333333.3333333333333333333333333333333
855+4000000000:+9:444444444.4444444444444444444444444444444
856+5000000000:+9:555555555.5555555555555555555555555555556
857+6000000000:+9:666666666.6666666666666666666666666666667
858+7000000000:+9:777777777.7777777777777777777777777777778
859+8000000000:+9:888888888.8888888888888888888888888888889
860+9000000000:+9:1000000000
861+35500000:+113:314159.2920353982300884955752212389380531
862+71000000:+226:314159.2920353982300884955752212389380531
863+106500000:+339:314159.2920353982300884955752212389380531
864+1000000000:+3:333333333.3333333333333333333333333333333
8652:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
866$div_scale = 20
867+1000000000:+9:111111111.11111111111
868+2000000000:+9:222222222.22222222222
869+3000000000:+9:333333333.33333333333
870+4000000000:+9:444444444.44444444444
871+5000000000:+9:555555555.55555555556
872+6000000000:+9:666666666.66666666667
873+7000000000:+9:777777777.77777777778
874+8000000000:+9:888888888.88888888889
875+9000000000:+9:1000000000
8761:10:0.1
8771:100:0.01
8781:1000:0.001
8791:10000:0.0001
8801:504:0.001984126984126984127
8812:1.987654321:1.0062111801179738436
882# the next two cases are the "old" behaviour, but are now (>v0.01) different
883#+35500000:+113:314159.292035398230088
884#+71000000:+226:314159.292035398230088
885+35500000:+113:314159.29203539823009
886+71000000:+226:314159.29203539823009
887+106500000:+339:314159.29203539823009
888+1000000000:+3:333333333.33333333333
889$div_scale = 1
890# round to accuracy 1 after bdiv
891+124:+3:40
892# reset scale for further tests
893$div_scale = 40
894&fmod
895+0:0:NaN
896+0:1:0
897+3:1:0
898#+5:2:1
899#+9:4:1
900#+9:5:4
901#+9000:56:40
902#+56:9000:56
903&fsqrt
904+0:0
905-1:NaN
906-2:NaN
907-16:NaN
908-123.45:NaN
909nanfsqrt:NaN
910+inf:inf
911-inf:NaN
912+1:1
913+2:1.41421356237309504880168872420969807857
914+4:2
915+16:4
916+100:10
917+123.456:11.11107555549866648462149404118219234119
918+15241.38393:123.4559999756998444766131352122991626468
919+1.44:1.2
920&is_odd
921abc:0
9220:0
923-1:1
924-3:1
9251:1
9263:1
9271000001:1
9281000002:0
929+inf:0
930-inf:0
931123.45:0
932-123.45:0
9332:0
934&is_even
935abc:0
9360:1
937-1:0
938-3:0
9391:0
9403:0
9411000001:0
9421000002:1
9432:1
944+inf:0
945-inf:0
946123.456:0
947-123.456:0
948&is_positive
9490:1
9501:1
951-1:0
952-123:0
953NaN:0
954-inf:0
955+inf:1
956&is_negative
9570:0
9581:0
959-1:1
960-123:1
961NaN:0
962-inf:1
963+inf:0
964&parts
9650:0 1
9661:1 0
967123:123 0
968-123:-123 0
969-1200:-12 2
970NaNparts:NaN NaN
971+inf:inf inf
972-inf:-inf inf
973&exponent
9740:1
9751:0
976123:0
977-123:0
978-1200:2
979+inf:inf
980-inf:inf
981NaNexponent:NaN
982&mantissa
9830:0
9841:1
985123:123
986-123:-123
987-1200:-12
988+inf:inf
989-inf:-inf
990NaNmantissa:NaN
991&length
992123:3
993-123:3
9940:1
9951:1
99612345678901234567890:20
997&is_zero
998NaNzero:0
999+inf:0
1000-inf:0
10010:1
1002-1:0
10031:0
1004&is_one
1005NaNone:0
1006+inf:0
1007-inf:0
10080:0
10092:0
10101:1
1011-1:0
1012-2:0
1013&bfloor
10140:0
1015abc:NaN
1016+inf:inf
1017-inf:-inf
10181:1
1019-51:-51
1020-51.2:-52
102112.2:12
1022&bceil
10230:0
1024abc:NaN
1025+inf:inf
1026-inf:-inf
10271:1
1028-51:-51
1029-51.2:-51
103012.2:13