Mention also perl56delta in case someone is upgrading from
[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)$/) {
57 $try .= "\$x->b$1();";
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;';
79 } elsif ($f eq "facmp") {
80 $try .= '$x->facmp($y);';
81 } elsif ($f eq "fpow") {
82 $try .= '$x ** $y;';
83 } elsif ($f eq "fadd") {
84 $try .= '$x + $y;';
85 } elsif ($f eq "fsub") {
86 $try .= '$x - $y;';
87 } elsif ($f eq "fmul") {
88 $try .= '$x * $y;';
89 } elsif ($f eq "fdiv") {
90 $try .= "$setup; \$x / \$y;";
91 } elsif ($f eq "fmod") {
92 $try .= '$x % $y;';
93 } else { warn "Unknown op '$f'"; }
94 }
e745a66c 95 # print "# Trying: '$try'\n";
ee15d750 96 $ans1 = eval $try;
97 if ($ans =~ m|^/(.*)$|)
98 {
99 my $pat = $1;
100 if ($ans1 =~ /$pat/)
101 {
102 ok (1,1);
103 }
104 else
105 {
106 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
107 }
108 }
109 else
110 {
111 if ($ans eq "")
112 {
113 ok_undef ($ans1);
114 }
115 else
116 {
117 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
118 if (ref($ans1) eq "$class")
119 {
027dc388 120 # float numbers are normalized (for now), so mantissa shouldn't have
121 # trailing zeros
ee15d750 122 #print $ans1->_trailing_zeros(),"\n";
123 print "# Has trailing zeros after '$try'\n"
124 if !ok ($ans1->{_m}->_trailing_zeros(), 0);
125 }
126 }
127 } # end pattern or string
128 }
129 } # end while
130
131# check whether new() for BigInts destroys them ($y == 12 in this case)
132$x = Math::BigInt->new(1200); $y = $class->new($x);
133ok ($y,1200); ok ($x,1200);
134
135###############################################################################
136# fdiv() in list context
137$x = $class->bzero(); ($x,$y) = $x->fdiv(0);
138ok ($x,'NaN'); ok ($y,'NaN');
139
140# fdiv() in list context
141$x = $class->bzero(); ($x,$y) = $x->fdiv(1);
142ok ($x,0); ok ($y,0);
143
144# all done
145
146###############################################################################
147# Perl 5.005 does not like ok ($x,undef)
148
149sub ok_undef
150 {
151 my $x = shift;
152
153 ok (1,1) and return if !defined $x;
154 ok ($x,'undef');
155 }
156
157__DATA__
158&fnorm
1591:1
160-0:0
161fnormNaN:NaN
162+inf:inf
163-inf:-inf
164123:123
165-123.4567:-123.4567
027dc388 166# invalid inputs
1671__2:NaN
1681E1__2:NaN
16911__2E2:NaN
170#1.E3:NaN
171.2E-3.:NaN
172#1e3e4:NaN
173.2E2:20
ee15d750 174&as_number
1750:0
1761:1
1771.2:1
1782.345:2
179-2:-2
180-123.456:-123
181-200:-200
182&finf
1831:+:inf
1842:-:-inf
1853:abc:inf
186&numify
1870:0e+1
188+1:1e+0
1891234:1234e+0
190NaN:NaN
191+inf:inf
192-inf:-inf
193&fnan
194abc:NaN
1952:NaN
196-2:NaN
1970:NaN
198&fone
1992:+:1
200-2:-:-1
201-2:+:1
2022:-:-1
2030::1
204-2::1
205abc::1
2062:abc:1
207&fsstr
208+inf:inf
209-inf:-inf
210abcfsstr:NaN
2111234.567:1234567e-3
212&fstr
213+inf:::inf
214-inf:::-inf
215abcfstr:::NaN
2161234.567:9::1234.56700
2171234.567::-6:1234.567000
21812345:5::12345
2190.001234:6::0.00123400
2200.001234::-8:0.00123400
2210:4::0
2220::-4:0.0000
223&fnorm
224inf:inf
225+inf:inf
226-inf:-inf
227+infinity:NaN
228+-inf:NaN
229abc:NaN
230 1 a:NaN
2311bcd2:NaN
23211111b:NaN
233+1z:NaN
234-1z:NaN
2350:0
236+0:0
237+00:0
238+0_0_0:0
239000000_0000000_00000:0
240-0:0
241-0000:0
242+1:1
243+01:1
244+001:1
245+00000100000:100000
246123456789:123456789
247-1:-1
248-01:-1
249-001:-1
250-123456789:-123456789
251-00000100000:-100000
252123.456a:NaN
253123.456:123.456
2540.01:0.01
255.002:0.002
256+.2:0.2
257-0.0003:-0.0003
258-.0000000004:-0.0000000004
259123456E2:12345600
260123456E-2:1234.56
261-123456E2:-12345600
262-123456E-2:-1234.56
2631e1:10
2642e-11:0.00000000002
265# excercise _split
266 .02e-1:0.002
267 000001:1
268 -00001:-1
269 -1:-1
270 000.01:0.01
271 -000.0023:-0.0023
272 1.1e1:11
273-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
274-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
275&fpow
2762:2:4
2771:2:1
2781:3:1
279-1:2:1
280-1:3:-1
281123.456:2:15241.383936
2822:-2:0.25
2832:-3:0.125
284128:-2:0.00006103515625
285abc:123.456:NaN
286123.456:abc:NaN
287+inf:123.45:inf
288-inf:123.45:-inf
289+inf:-123.45:inf
290-inf:-123.45:-inf
291&fneg
292fnegNaN:NaN
293+inf:-inf
294-inf:inf
295+0:0
296+1:-1
297-1:1
298+123456789:-123456789
299-123456789:123456789
300+123.456789:-123.456789
301-123456.789:123456.789
302&fabs
303fabsNaN:NaN
304+inf:inf
305-inf:inf
306+0:0
307+1:1
308-1:1
309+123456789:123456789
310-123456789:123456789
311+123.456789:123.456789
312-123456.789:123456.789
313&fround
314$round_mode = "trunc"
315+inf:5:inf
316-inf:5:-inf
3170:5:0
318NaNfround:5:NaN
319+10123456789:5:10123000000
320-10123456789:5:-10123000000
321+10123456789.123:5:10123000000
322-10123456789.123:5:-10123000000
323+10123456789:9:10123456700
324-10123456789:9:-10123456700
325+101234500:6:101234000
326-101234500:6:-101234000
327$round_mode = "zero"
328+20123456789:5:20123000000
329-20123456789:5:-20123000000
330+20123456789.123:5:20123000000
331-20123456789.123:5:-20123000000
332+20123456789:9:20123456800
333-20123456789:9:-20123456800
334+201234500:6:201234000
335-201234500:6:-201234000
336$round_mode = "+inf"
337+30123456789:5:30123000000
338-30123456789:5:-30123000000
339+30123456789.123:5:30123000000
340-30123456789.123:5:-30123000000
341+30123456789:9:30123456800
342-30123456789:9:-30123456800
343+301234500:6:301235000
344-301234500:6:-301234000
345$round_mode = "-inf"
346+40123456789:5:40123000000
347-40123456789:5:-40123000000
348+40123456789.123:5:40123000000
349-40123456789.123:5:-40123000000
350+40123456789:9:40123456800
351-40123456789:9:-40123456800
352+401234500:6:401234000
353-401234500:6:-401235000
354$round_mode = "odd"
355+50123456789:5:50123000000
356-50123456789:5:-50123000000
357+50123456789.123:5:50123000000
358-50123456789.123:5:-50123000000
359+50123456789:9:50123456800
360-50123456789:9:-50123456800
361+501234500:6:501235000
362-501234500:6:-501235000
363$round_mode = "even"
364+60123456789:5:60123000000
365-60123456789:5:-60123000000
366+60123456789:9:60123456800
367-60123456789:9:-60123456800
368+601234500:6:601234000
369-601234500:6:-601234000
370+60123456789.0123:5:60123000000
371-60123456789.0123:5:-60123000000
372&ffround
373$round_mode = "trunc"
374+inf:5:inf
375-inf:5:-inf
3760:5:0
377NaNffround:5:NaN
378+1.23:-1:1.2
379+1.234:-1:1.2
380+1.2345:-1:1.2
381+1.23:-2:1.23
382+1.234:-2:1.23
383+1.2345:-2:1.23
384+1.23:-3:1.230
385+1.234:-3:1.234
386+1.2345:-3:1.234
387-1.23:-1:-1.2
388+1.27:-1:1.2
389-1.27:-1:-1.2
390+1.25:-1:1.2
391-1.25:-1:-1.2
392+1.35:-1:1.3
393-1.35:-1:-1.3
394-0.0061234567890:-1:0.0
395-0.0061:-1:0.0
396-0.00612:-1:0.0
397-0.00612:-2:0.00
398-0.006:-1:0.0
399-0.006:-2:0.00
400-0.0006:-2:0.00
401-0.0006:-3:0.000
402-0.0065:-3:/-0\.006|-6e-03
403-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
404-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4050.05:0:0
4060.5:0:0
4070.51:0:0
4080.41:0:0
409$round_mode = "zero"
410+2.23:-1:/2.2(?:0{5}\d+)?
411-2.23:-1:/-2.2(?:0{5}\d+)?
412+2.27:-1:/2.(?:3|29{5}\d+)
413-2.27:-1:/-2.(?:3|29{5}\d+)
414+2.25:-1:/2.2(?:0{5}\d+)?
415-2.25:-1:/-2.2(?:0{5}\d+)?
416+2.35:-1:/2.(?:3|29{5}\d+)
417-2.35:-1:/-2.(?:3|29{5}\d+)
418-0.0065:-1:0.0
419-0.0065:-2:/-0\.01|-1e-02
420-0.0065:-3:/-0\.006|-6e-03
421-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
422-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4230.05:0:0
4240.5:0:0
4250.51:0:1
4260.41:0:0
427$round_mode = "+inf"
428+3.23:-1:/3.2(?:0{5}\d+)?
429-3.23:-1:/-3.2(?:0{5}\d+)?
430+3.27:-1:/3.(?:3|29{5}\d+)
431-3.27:-1:/-3.(?:3|29{5}\d+)
432+3.25:-1:/3.(?:3|29{5}\d+)
433-3.25:-1:/-3.2(?:0{5}\d+)?
434+3.35:-1:/3.(?:4|39{5}\d+)
435-3.35:-1:/-3.(?:3|29{5}\d+)
436-0.0065:-1:0.0
437-0.0065:-2:/-0\.01|-1e-02
438-0.0065:-3:/-0\.006|-6e-03
439-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
440-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4410.05:0:0
4420.5:0:1
4430.51:0:1
4440.41:0:0
445$round_mode = "-inf"
446+4.23:-1:/4.2(?:0{5}\d+)?
447-4.23:-1:/-4.2(?:0{5}\d+)?
448+4.27:-1:/4.(?:3|29{5}\d+)
449-4.27:-1:/-4.(?:3|29{5}\d+)
450+4.25:-1:/4.2(?:0{5}\d+)?
451-4.25:-1:/-4.(?:3|29{5}\d+)
452+4.35:-1:/4.(?:3|29{5}\d+)
453-4.35:-1:/-4.(?:4|39{5}\d+)
454-0.0065:-1:0.0
455-0.0065:-2:/-0\.01|-1e-02
456-0.0065:-3:/-0\.007|-7e-03
457-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
458-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4590.05:0:0
4600.5:0:0
4610.51:0:1
4620.41:0:0
463$round_mode = "odd"
464+5.23:-1:/5.2(?:0{5}\d+)?
465-5.23:-1:/-5.2(?:0{5}\d+)?
466+5.27:-1:/5.(?:3|29{5}\d+)
467-5.27:-1:/-5.(?:3|29{5}\d+)
468+5.25:-1:/5.(?:3|29{5}\d+)
469-5.25:-1:/-5.(?:3|29{5}\d+)
470+5.35:-1:/5.(?:3|29{5}\d+)
471-5.35:-1:/-5.(?:3|29{5}\d+)
472-0.0065:-1:0.0
473-0.0065:-2:/-0\.01|-1e-02
474-0.0065:-3:/-0\.007|-7e-03
475-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
476-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4770.05:0:0
4780.5:0:1
4790.51:0:1
4800.41:0:0
481$round_mode = "even"
482+6.23:-1:/6.2(?:0{5}\d+)?
483-6.23:-1:/-6.2(?:0{5}\d+)?
484+6.27:-1:/6.(?:3|29{5}\d+)
485-6.27:-1:/-6.(?:3|29{5}\d+)
486+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+)
487-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+)
488+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+)
489-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+)
490-0.0065:-1:0.0
491-0.0065:-2:/-0\.01|-1e-02
492-0.0065:-3:/-0\.006|-7e-03
493-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
494-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03
4950.05:0:0
4960.5:0:0
4970.51:0:1
4980.41:0:0
4990.01234567:-3:0.012
5000.01234567:-4:0.0123
5010.01234567:-5:0.01235
5020.01234567:-6:0.012346
5030.01234567:-7:0.0123457
5040.01234567:-8:0.01234567
5050.01234567:-9:0.012345670
5060.01234567:-12:0.012345670000
507&fcmp
508fcmpNaN:fcmpNaN:
509fcmpNaN:+0:
510+0:fcmpNaN:
511+0:+0:0
512-1:+0:-1
513+0:-1:1
514+1:+0:1
515+0:+1:-1
516-1:+1:-1
517+1:-1:1
518-1:-1:0
519+1:+1:0
520-1.1:0:-1
521+0:-1.1:1
522+1.1:+0:1
523+0:+1.1:-1
524+123:+123:0
525+123:+12:1
526+12:+123:-1
527-123:-123:0
528-123:-12:-1
529-12:-123:1
530+123:+124:-1
531+124:+123:1
532-123:-124:1
533-124:-123:-1
5340:0.01:-1
5350:0.0001:-1
5360:-0.0001:1
5370:-0.1:1
5380.1:0:1
5390.00001:0:1
540-0.0001:0:-1
541-0.1:0:-1
5420:0.0001234:-1
5430:-0.0001234:1
5440.0001234:0:1
545-0.0001234:0:-1
5460.0001:0.0005:-1
5470.0005:0.0001:1
5480.005:0.0001:1
5490.001:0.0005:1
5500.000001:0.0005:-1
5510.00000123:0.0005:-1
5520.00512:0.0001:1
5530.005:0.000112:1
5540.00123:0.0005:1
5551.5:2:-1
5562:1.5:1
5571.54321:234:-1
558234:1.54321:1
559# infinity
560-inf:5432112345:-1
561+inf:5432112345:1
562-inf:-5432112345:-1
563+inf:-5432112345:1
564-inf:54321.12345:-1
565+inf:54321.12345:1
566-inf:-54321.12345:-1
567+inf:-54321.12345:1
568+inf:+inf:0
569-inf:-inf:0
570+inf:-inf:1
571-inf:+inf:-1
572# return undef
573+inf:NaN:
574NaN:inf:
575-inf:NaN:
576NaN:-inf:
577&facmp
578fcmpNaN:fcmpNaN:
579fcmpNaN:+0:
580+0:fcmpNaN:
581+0:+0:0
582-1:+0:1
583+0:-1:-1
584+1:+0:1
585+0:+1:-1
586-1:+1:0
587+1:-1:0
588-1:-1:0
589+1:+1:0
590-1.1:0:1
591+0:-1.1:-1
592+1.1:+0:1
593+0:+1.1:-1
594+123:+123:0
595+123:+12:1
596+12:+123:-1
597-123:-123:0
598-123:-12:1
599-12:-123:-1
600+123:+124:-1
601+124:+123:1
602-123:-124:-1
603-124:-123:1
6040:0.01:-1
6050:0.0001:-1
6060:-0.0001:-1
6070:-0.1:-1
6080.1:0:1
6090.00001:0:1
610-0.0001:0:1
611-0.1:0:1
6120:0.0001234:-1
6130:-0.0001234:-1
6140.0001234:0:1
615-0.0001234:0:1
6160.0001:0.0005:-1
6170.0005:0.0001:1
6180.005:0.0001:1
6190.001:0.0005:1
6200.000001:0.0005:-1
6210.00000123:0.0005:-1
6220.00512:0.0001:1
6230.005:0.000112:1
6240.00123:0.0005:1
6251.5:2:-1
6262:1.5:1
6271.54321:234:-1
628234:1.54321:1
629# infinity
630-inf:5432112345:1
631+inf:5432112345:1
632-inf:-5432112345:1
633+inf:-5432112345:1
634-inf:54321.12345:1
635+inf:54321.12345:1
636-inf:-54321.12345:1
637+inf:-54321.12345:1
638+inf:+inf:0
639-inf:-inf:0
640+inf:-inf:0
641-inf:+inf:0
48b581a2 6425:inf:-1
643-1:inf:-1
6445:-inf:-1
645-1:-inf:-1
ee15d750 646# return undef
647+inf:facmpNaN:
648facmpNaN:inf:
649-inf:facmpNaN:
650facmpNaN:-inf:
651&fdec
652fdecNaN:NaN
653+inf:inf
654-inf:-inf
655+0:-1
656+1:0
657-1:-2
6581.23:0.23
659-1.23:-2.23
e745a66c 660100:99
661101:100
662-100:-101
663-99:-100
664-98:-99
66599:98
ee15d750 666&finc
667fincNaN:NaN
668+inf:inf
669-inf:-inf
670+0:1
671+1:2
672-1:0
6731.23:2.23
674-1.23:-0.23
e745a66c 675100:101
676-100:-99
677-99:-98
678-101:-100
67999:100
ee15d750 680&fadd
681abc:abc:NaN
682abc:+0:NaN
683+0:abc:NaN
684+inf:-inf:0
685-inf:+inf:0
686+inf:+inf:inf
687-inf:-inf:-inf
688baddNaN:+inf:NaN
689baddNaN:+inf:NaN
690+inf:baddNaN:NaN
691-inf:baddNaN:NaN
692+0:+0:0
693+1:+0:1
694+0:+1:1
695+1:+1:2
696-1:+0:-1
697+0:-1:-1
698-1:-1:-2
699-1:+1:0
700+1:-1:0
701+9:+1:10
702+99:+1:100
703+999:+1:1000
704+9999:+1:10000
705+99999:+1:100000
706+999999:+1:1000000
707+9999999:+1:10000000
708+99999999:+1:100000000
709+999999999:+1:1000000000
710+9999999999:+1:10000000000
711+99999999999:+1:100000000000
712+10:-1:9
713+100:-1:99
714+1000:-1:999
715+10000:-1:9999
716+100000:-1:99999
717+1000000:-1:999999
718+10000000:-1:9999999
719+100000000:-1:99999999
720+1000000000:-1:999999999
721+10000000000:-1:9999999999
722+123456789:+987654321:1111111110
723-123456789:+987654321:864197532
724-123456789:-987654321:-1111111110
725+123456789:-987654321:-864197532
7260.001234:0.0001234:0.0013574
727&fsub
728abc:abc:NaN
729abc:+0:NaN
730+0:abc:NaN
731+inf:-inf:inf
732-inf:+inf:-inf
733+inf:+inf:0
734-inf:-inf:0
735baddNaN:+inf:NaN
736baddNaN:+inf:NaN
737+inf:baddNaN:NaN
738-inf:baddNaN:NaN
739+0:+0:0
740+1:+0:1
741+0:+1:-1
742+1:+1:0
743-1:+0:-1
744+0:-1:1
745-1:-1:0
746-1:+1:-2
747+1:-1:2
748+9:+1:8
749+99:+1:98
750+999:+1:998
751+9999:+1:9998
752+99999:+1:99998
753+999999:+1:999998
754+9999999:+1:9999998
755+99999999:+1:99999998
756+999999999:+1:999999998
757+9999999999:+1:9999999998
758+99999999999:+1:99999999998
759+10:-1:11
760+100:-1:101
761+1000:-1:1001
762+10000:-1:10001
763+100000:-1:100001
764+1000000:-1:1000001
765+10000000:-1:10000001
766+100000000:-1:100000001
767+1000000000:-1:1000000001
768+10000000000:-1:10000000001
769+123456789:+987654321:-864197532
770-123456789:+987654321:-1111111110
771-123456789:-987654321:864197532
772+123456789:-987654321:1111111110
773&fmul
774abc:abc:NaN
775abc:+0:NaN
776+0:abc:NaN
777+inf:NaNmul:NaN
778+inf:NaNmul:NaN
779NaNmul:+inf:NaN
780NaNmul:-inf:NaN
781+inf:+inf:inf
782+inf:-inf:-inf
783+inf:-inf:-inf
784+inf:+inf:inf
785+inf:123.34:inf
786+inf:-123.34:-inf
787-inf:123.34:-inf
788-inf:-123.34:inf
789123.34:+inf:inf
790-123.34:+inf:-inf
791123.34:-inf:-inf
792-123.34:-inf:inf
793+0:+0:0
794+0:+1:0
795+1:+0:0
796+0:-1:0
797-1:+0:0
798+123456789123456789:+0:0
799+0:+123456789123456789:0
800-1:-1:1
801-1:+1:-1
802+1:-1:-1
803+1:+1:1
804+2:+3:6
805-2:+3:-6
806+2:-3:-6
807-2:-3:6
808+111:+111:12321
809+10101:+10101:102030201
810+1001001:+1001001:1002003002001
811+100010001:+100010001:10002000300020001
812+10000100001:+10000100001:100002000030000200001
813+11111111111:+9:99999999999
814+22222222222:+9:199999999998
815+33333333333:+9:299999999997
816+44444444444:+9:399999999996
817+55555555555:+9:499999999995
818+66666666666:+9:599999999994
819+77777777777:+9:699999999993
820+88888888888:+9:799999999992
821+99999999999:+9:899999999991
8226:120:720
82310:10000:100000
824&fdiv
825$div_scale = 40; $round_mode = 'even'
826abc:abc:NaN
827abc:+1:abc:NaN
828+1:abc:NaN
829-1:abc:NaN
8300:abc:NaN
831+0:+0:NaN
832+0:+1:0
833+1:+0:inf
834+3214:+0:inf
835+0:-1:0
836-1:+0:-inf
837-3214:+0:-inf
838+1:+1:1
839-1:-1:1
840+1:-1:-1
841-1:+1:-1
842+1:+2:0.5
843+2:+1:2
844123:+inf:0
845123:-inf:0
846+10:+5:2
847+100:+4:25
848+1000:+8:125
849+10000:+16:625
850+10000:-16:-625
851+999999999999:+9:111111111111
852+999999999999:+99:10101010101
853+999999999999:+999:1001001001
854+999999999999:+9999:100010001
855+999999999999999:+99999:10000100001
856+1000000000:+9:111111111.1111111111111111111111111111111
857+2000000000:+9:222222222.2222222222222222222222222222222
858+3000000000:+9:333333333.3333333333333333333333333333333
859+4000000000:+9:444444444.4444444444444444444444444444444
860+5000000000:+9:555555555.5555555555555555555555555555556
861+6000000000:+9:666666666.6666666666666666666666666666667
862+7000000000:+9:777777777.7777777777777777777777777777778
863+8000000000:+9:888888888.8888888888888888888888888888889
864+9000000000:+9:1000000000
865+35500000:+113:314159.2920353982300884955752212389380531
866+71000000:+226:314159.2920353982300884955752212389380531
867+106500000:+339:314159.2920353982300884955752212389380531
868+1000000000:+3:333333333.3333333333333333333333333333333
8692:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447
870$div_scale = 20
871+1000000000:+9:111111111.11111111111
872+2000000000:+9:222222222.22222222222
873+3000000000:+9:333333333.33333333333
874+4000000000:+9:444444444.44444444444
875+5000000000:+9:555555555.55555555556
876+6000000000:+9:666666666.66666666667
877+7000000000:+9:777777777.77777777778
878+8000000000:+9:888888888.88888888889
879+9000000000:+9:1000000000
8801:10:0.1
8811:100:0.01
8821:1000:0.001
8831:10000:0.0001
8841:504:0.001984126984126984127
8852:1.987654321:1.0062111801179738436
886# the next two cases are the "old" behaviour, but are now (>v0.01) different
887#+35500000:+113:314159.292035398230088
888#+71000000:+226:314159.292035398230088
889+35500000:+113:314159.29203539823009
890+71000000:+226:314159.29203539823009
891+106500000:+339:314159.29203539823009
892+1000000000:+3:333333333.33333333333
893$div_scale = 1
894# round to accuracy 1 after bdiv
895+124:+3:40
896# reset scale for further tests
897$div_scale = 40
898&fmod
899+0:0:NaN
900+0:1:0
901+3:1:0
902#+5:2:1
903#+9:4:1
904#+9:5:4
905#+9000:56:40
906#+56:9000:56
907&fsqrt
908+0:0
909-1:NaN
910-2:NaN
911-16:NaN
912-123.45:NaN
913nanfsqrt:NaN
914+inf:inf
915-inf:NaN
916+1:1
917+2:1.41421356237309504880168872420969807857
918+4:2
919+16:4
920+100:10
921+123.456:11.11107555549866648462149404118219234119
922+15241.38393:123.4559999756998444766131352122991626468
923+1.44:1.2
027dc388 924&is_nan
925123:0
926abc:1
927NaN:1
928-123:0
929&is_inf
930+inf::1
931-inf::1
932abc::0
9331::0
934NaN::0
935-1::0
936+inf:-:0
937+inf:+:1
938-inf:-:1
939-inf:+:0
940# it must be exactly /^[+-]inf$/
941+infinity::0
942-infinity::0
ee15d750 943&is_odd
944abc:0
9450:0
946-1:1
947-3:1
9481:1
9493:1
9501000001:1
9511000002:0
952+inf:0
953-inf:0
954123.45:0
955-123.45:0
9562:0
957&is_even
958abc:0
9590:1
960-1:0
961-3:0
9621:0
9633:0
9641000001:0
9651000002:1
9662:1
967+inf:0
968-inf:0
969123.456:0
970-123.456:0
971&is_positive
9720:1
9731:1
974-1:0
975-123:0
976NaN:0
977-inf:0
978+inf:1
979&is_negative
9800:0
9811:0
982-1:1
983-123:1
984NaN:0
985-inf:1
986+inf:0
987&parts
9880:0 1
9891:1 0
990123:123 0
991-123:-123 0
992-1200:-12 2
993NaNparts:NaN NaN
994+inf:inf inf
995-inf:-inf inf
996&exponent
9970:1
9981:0
999123:0
1000-123:0
1001-1200:2
1002+inf:inf
1003-inf:inf
1004NaNexponent:NaN
1005&mantissa
10060:0
10071:1
1008123:123
1009-123:-123
1010-1200:-12
1011+inf:inf
1012-inf:-inf
1013NaNmantissa:NaN
1014&length
1015123:3
1016-123:3
10170:1
10181:1
101912345678901234567890:20
1020&is_zero
1021NaNzero:0
1022+inf:0
1023-inf:0
10240:1
1025-1:0
10261:0
1027&is_one
1028NaNone:0
1029+inf:0
1030-inf:0
10310:0
10322:0
10331:1
1034-1:0
1035-2:0
027dc388 1036&ffloor
ee15d750 10370:0
1038abc:NaN
1039+inf:inf
1040-inf:-inf
10411:1
1042-51:-51
1043-51.2:-52
104412.2:12
027dc388 1045&fceil
ee15d750 10460:0
1047abc:NaN
1048+inf:inf
1049-inf:-inf
10501:1
1051-51:-51
1052-51.2:-51
105312.2:13