This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move Math::BigRat from ext/ to cpan/
[perl5.git] / cpan / Math-BigRat / t / bigratpm.inc
CommitLineData
184f15d5
JH
1#include this file into another test for subclass testing...
2
3ok ($class->config()->{lib},$CL);
4
990fb837
RGS
5$setup = '';
6
184f15d5
JH
7while (<DATA>)
8 {
a4e2b1c6 9 chomp;
184f15d5
JH
10 $_ =~ s/#.*$//; # remove comments
11 $_ =~ s/\s+$//; # trailing spaces
12 next if /^$/; # skip empty lines & comments
13 if (s/^&//)
14 {
15 $f = $_;
16 }
17 elsif (/^\$/)
18 {
19 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
20 #print "\$setup== $setup\n";
21 }
22 else
23 {
24 if (m|^(.*?):(/.+)$|)
25 {
26 $ans = $2;
27 @args = split(/:/,$1,99);
28 }
29 else
30 {
31 @args = split(/:/,$_,99); $ans = pop(@args);
32 }
33 $try = "\$x = new $class \"$args[0]\";";
34 if ($f eq "bnorm")
35 {
36 $try .= "\$x;";
37 } elsif ($f eq "finf") {
990fb837
RGS
38 my $a = $args[1] || '';
39 $try .= "\$x->binf('$a');";
184f15d5
JH
40 } elsif ($f eq "is_inf") {
41 $try .= "\$x->is_inf('$args[1]');";
42 } elsif ($f eq "fone") {
43 $try .= "\$x->bone('$args[1]');";
44 } elsif ($f eq "fstr") {
45 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";
46 $try .= '$x->bstr();';
47 } elsif ($f eq "parts") {
48 # ->bstr() to see if an object is returned
49 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';
50 $try .= '"$a $b";';
51 } elsif ($f eq "numerator") {
52 # ->bstr() to see if an object is returned
53 $try .= '$x->numerator()->bstr();';
54 } elsif ($f eq "denominator") {
55 # ->bstr() to see if an object is returned
56 $try .= '$x->denominator()->bstr();';
7d341013
T
57 } elsif ($f =~ /^(length|numify)$/) {
58 $try .= "\$x->$f();";
59 # some unary ops (can't test the fxxx form, since no AUTOLOAD in BigRat)
184f15d5
JH
60 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
61 $try .= "\$x->b$1();";
62 # some is_xxx test function
b68b7ab1 63 } elsif ($f =~ /^is_(zero|one|pos|neg|negative|positive|odd|even|nan|int)\z/) {
184f15d5 64 $try .= "\$x->$f();";
b68b7ab1
T
65 } elsif ($f =~ /^(as_number|as_int)\z/){
66 $try .= "\$x->$1();";
184f15d5
JH
67 } elsif ($f eq "finc") {
68 $try .= '++$x;';
69 } elsif ($f eq "fdec") {
70 $try .= '--$x;';
12fc2493
AMS
71 } elsif ($f eq "digit") {
72 $try .= "\$x->digit($args[1]);";
73 } elsif ($f eq "fround") {
184f15d5
JH
74 $try .= "$setup; \$x->bround($args[1]);";
75 } elsif ($f eq "ffround") {
76 $try .= "$setup; \$x->bfround($args[1]);";
77 } elsif ($f eq "fsqrt") {
78 $try .= "$setup; \$x->bsqrt();";
79 } elsif ($f eq "flog") {
80 $try .= "$setup; \$x->blog();";
81 } elsif ($f eq "ffac") {
82 $try .= "$setup; \$x->bfac();";
83 }
84 else
85 {
86 $try .= "\$y = new $class \"$args[1]\";";
7afd7a91 87 if ($f eq "bcmp") {
184f15d5 88 $try .= '$x <=> $y;';
7afd7a91 89 } elsif ($f eq "bacmp") {
184f15d5
JH
90 $try .= '$x->bacmp($y);';
91 } elsif ($f eq "bpow") {
92 $try .= '$x ** $y;';
a4e2b1c6
JH
93 } elsif ($f eq "fpow") {
94 $try .= '$x->bpow($y);';
184f15d5
JH
95 } elsif ($f eq "badd") {
96 $try .= '$x + $y;';
97 } elsif ($f eq "bsub") {
98 $try .= '$x - $y;';
99 } elsif ($f eq "bmul") {
100 $try .= '$x * $y;';
101 } elsif ($f eq "bdiv") {
102 $try .= "$setup; \$x / \$y;";
103 } elsif ($f eq "fdiv-list") {
104 $try .= "$setup; join(',',\$x->bdiv(\$y));";
105 } elsif ($f eq "brsft") {
106 $try .= '$x >> $y;';
107 } elsif ($f eq "blsft") {
108 $try .= '$x << $y;';
109 } elsif ($f eq "bmod") {
110 $try .= '$x % $y;';
7afd7a91
T
111 } elsif( $f eq "bmodinv") {
112 $try .= "\$x->bmodinv(\$y);";
113 } elsif( $f eq "blog") {
114 $try .= "\$x->blog(\$y);";
115 } else {
116 $try .= "\$z = $class->new(\"$args[2]\");";
117
118 # Functions with three arguments
119 if( $f eq "bmodpow") {
120 $try .= "\$x->bmodpow(\$y,\$z);";
121 } else { warn "Unknown op '$f'"; }
122 }
184f15d5
JH
123 }
124 # print "# Trying: '$try'\n";
125 $ans1 = eval $try;
126 if ($ans =~ m|^/(.*)$|)
127 {
128 my $pat = $1;
129 if ($ans1 =~ /$pat/)
130 {
131 ok (1,1);
132 }
133 else
134 {
135 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
136 }
137 }
138 else
139 {
140 if ($ans eq "")
141 {
142 ok_undef ($ans1);
143 }
144 else
145 {
146 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
147# if (ref($ans1) eq "$class")
148# {
149# # float numbers are normalized (for now), so mantissa shouldn't have
150# # trailing zeros
151# #print $ans1->_trailing_zeros(),"\n";
152# print "# Has trailing zeros after '$try'\n"
153# if !ok ($ans1->{_m}->_trailing_zeros(), 0);
154# }
155 }
156 } # end pattern or string
157 }
158 } # end while
159
160# check whether $class->new( Math::BigInt->new()) destroys it
161# ($y == 12 in this case)
162$x = Math::BigInt->new(1200); $y = $class->new($x);
163ok ($y,1200); ok ($x,1200);
164
165###############################################################################
166# zero,inf,one,nan
167
168$x = $class->new(2); $x->bzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
169$x = $class->new(2); $x->binf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
170$x = $class->new(2); $x->bone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
171$x = $class->new(2); $x->bnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
172
1731; # all done
174
175###############################################################################
176# Perl 5.005 does not like ok ($x,undef)
177
178sub ok_undef
179 {
180 my $x = shift;
181
182 ok (1,1) and return if !defined $x;
183 ok ($x,'undef');
184 }
185
186__DATA__
12fc2493
AMS
187&digit
188123:2:1
1891234:0:4
1901234:1:3
1911234:2:2
1921234:3:1
1931234:-1:1
1941234:-2:2
1951234:-3:3
1961234:-4:4
1970:0:0
1980:1:0
7afd7a91
T
199&bmodinv
200# format: number:modulus:result
201# bmodinv Data errors
202abc:abc:NaN
203abc:5:NaN
2045:abc:NaN
205# bmodinv Expected Results from normal use
2061:5:1
2073:5:2
208-2:5:2
2098:5033:4404
2101234567891:13:6
211-1234567891:13:7
212324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902
213## bmodinv Error cases / useless use of function
2143:-5:NaN
215inf:5:NaN
2165:inf:NaN
217-inf:5:NaN
2185:-inf:NaN
990fb837
RGS
219&as_number
220144/7:20
b68b7ab1
T
22112/1:12
222-12/1:-12
223-12/3:-4
224NaN:NaN
225+inf:inf
226-inf:-inf
227&as_int
228144/7:20
22912/1:12
230-12/1:-12
231-12/3:-4
990fb837
RGS
232NaN:NaN
233+inf:inf
234-inf:-inf
7afd7a91
T
235&bmodpow
236# format: number:exponent:modulus:result
237# bmodpow Data errors
238abc:abc:abc:NaN
2395:abc:abc:NaN
240abc:5:abc:NaN
241abc:abc:5:NaN
2425:5:abc:NaN
2435:abc:5:NaN
244abc:5:5:NaN
245# bmodpow Expected results
2460:0:2:1
2471:0:2:1
2480:0:1:0
2498:7:5032:3840
2508:-1:5033:4404
25198436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
252# bmodpow Error cases
2538:8:-5:NaN
2548:-1:16:NaN
255inf:5:13:NaN
2565:inf:13:NaN
990fb837
RGS
257&bmod
258NaN:1:NaN
2591:NaN:NaN
2601:1:0
2612:2:0
26212:6:0
2637/4:4/14:1/28
2647/4:4/16:0
265-7/4:4/16:0
266-7/4:-4/16:0
2677/4:-4/16:0
2687/4:4/32:0
269-7/4:4/32:0
270-7/4:-4/32:0
2717/4:-4/32:0
2727/4:4/28:1/28
273-7/4:4/28:-1/28
2747/4:-4/28:1/28
275-7/4:-4/28:-1/28
276&fsqrt
2771:1
2780:0
279NaN:NaN
280+inf:inf
281-inf:NaN
282144:12
283# sqrt(144) / sqrt(4) = 12/2 = 6/1
284144/4:6
28525/16:5/4
286-3:NaN
287&flog
288NaN:NaN
2890:NaN
7afd7a91
T
290-2:NaN
291&blog
292NaN:NaN:NaN
2930:NaN:NaN
294NaN:0:NaN
295NaN:1:NaN
2961:NaN:NaN
2970:2:NaN
2980:-2:NaN
2993:-2:NaN
184f15d5
JH
300&finf
3011:+:inf
3022:-:-inf
3033:abc:inf
990fb837 304&numify
93c87d9d
T
3050:0
306+1:1
3071234:1234
3083/4:0.75
3095/2:2.5
3103/2:1.5
3115/4:1.25
990fb837 312NaN:NaN
93c87d9d
T
313+inf:inf
314-inf:-inf
184f15d5
JH
315&fnan
316abc:NaN
3172:NaN
318-2:NaN
3190:NaN
320&fone
3212:+:1
322-2:-:-1
323-2:+:1
3242:-:-1
3250::1
326-2::1
327abc::1
3282:abc:1
329&fsstr
330+inf:inf
331-inf:-inf
332abcfsstr:NaN
3331:1/1
3343/1:3/1
3350.1:1/10
336&bnorm
3371:1
338-0:0
339bnormNaN:NaN
340+inf:inf
341-inf:-inf
7afd7a91
T
342inf/inf:NaN
3435/inf:0
3445/-inf:0
345inf/5:inf
346-inf/5:-inf
347inf/-5:-inf
348-inf/-5:inf
184f15d5
JH
349123:123
350-123.4567:-1234567/10000
351# invalid inputs
3521__2:NaN
3531E1__2:NaN
35411__2E2:NaN
355#1.E3:NaN
356.2E-3.:NaN
357#1e3e4:NaN
358.2E2:20
359inf:inf
360+inf:inf
361-inf:-inf
362+infinity:NaN
363+-inf:NaN
364abc:NaN
365 1 a:NaN
3661bcd2:NaN
36711111b:NaN
368+1z:NaN
369-1z:NaN
3700:0
371+0:0
372+00:0
373+0_0_0:0
374000000_0000000_00000:0
375-0:0
376-0000:0
377+1:1
378+01:1
379+001:1
380+00000100000:100000
12fc2493
AMS
381+00000800/00000010:80
382-00000800/00000010:-80
383+00000800/-00000010:-80
384-00000800/-00000010:80
184f15d5
JH
385123456789:123456789
386-1:-1
387-01:-1
388-001:-1
389-123456789:-123456789
390-00000100000:-100000
391123.456a:NaN
392123.456:15432/125
3930.01:1/100
394.002:1/500
395+.2:1/5
396-0.0003:-3/10000
397-.0000000004:-1/2500000000
398123456E2:12345600
399123456E-2:30864/25
400-123456E2:-12345600
401-123456E-2:-30864/25
4021e1:10
4032e-11:1/50000000000
40412/10:6/5
4050.1/0.1:1
406100/0.1:1000
4070.1/10:1/100
4081 / 3:1/3
4091/ 3:1/3
4101 /3:1/3
411&fneg
412fnegNaN:NaN
413+inf:-inf
414-inf:inf
415+0:0
416+1:-1
417-1:1
418+123456789:-123456789
419-123456789:123456789
420+123.456789:-123456789/1000000
421-123456.789:123456789/1000
b68b7ab1
T
422123/7:-123/7
423-123/7:123/7
424123/-7:123/7
184f15d5
JH
425&fabs
426fabsNaN:NaN
427+inf:inf
428-inf:inf
429+0:0
430+1:1
431-1:1
432+123456789:123456789
433-123456789:123456789
434+123.456789:123456789/1000000
435-123456.789:123456789/1000
436&badd
437abc:abc:NaN
438abc:+0:NaN
439+0:abc:NaN
440+inf:-inf:NaN
441-inf:+inf:NaN
442+inf:+inf:inf
443-inf:-inf:-inf
444baddNaN:+inf:NaN
445baddNaN:+inf:NaN
446+inf:baddNaN:NaN
447-inf:baddNaN:NaN
448+0:+0:0
449+1:+0:1
450+0:+1:1
451+1:+1:2
452-1:+0:-1
453+0:-1:-1
454-1:-1:-2
455-1:+1:0
456+1:-1:0
457+9:+1:10
458+99:+1:100
459+999:+1:1000
460+9999:+1:10000
461+99999:+1:100000
462+999999:+1:1000000
463+9999999:+1:10000000
464+99999999:+1:100000000
465+999999999:+1:1000000000
466+9999999999:+1:10000000000
467+99999999999:+1:100000000000
468+10:-1:9
469+100:-1:99
470+1000:-1:999
471+10000:-1:9999
472+100000:-1:99999
473+1000000:-1:999999
474+10000000:-1:9999999
475+100000000:-1:99999999
476+1000000000:-1:999999999
477+10000000000:-1:9999999999
478+123456789:+987654321:1111111110
479-123456789:+987654321:864197532
480-123456789:-987654321:-1111111110
481+123456789:-987654321:-864197532
4821/3:1/3:2/3
4832/3:-1/3:1/3
484&bsub
485abc:abc:NaN
486abc:+0:NaN
487+0:abc:NaN
488+inf:-inf:inf
489-inf:+inf:-inf
490+inf:+inf:NaN
491-inf:-inf:NaN
492baddNaN:+inf:NaN
493baddNaN:+inf:NaN
494+inf:baddNaN:NaN
495-inf:baddNaN:NaN
496+0:+0:0
497+1:+0:1
498+0:+1:-1
499+1:+1:0
500-1:+0:-1
501+0:-1:1
502-1:-1:0
503-1:+1:-2
504+1:-1:2
505+9:+1:8
506+99:+1:98
507+999:+1:998
508+9999:+1:9998
509+99999:+1:99998
510+999999:+1:999998
511+9999999:+1:9999998
512+99999999:+1:99999998
513+999999999:+1:999999998
514+9999999999:+1:9999999998
515+99999999999:+1:99999999998
516+10:-1:11
517+100:-1:101
518+1000:-1:1001
519+10000:-1:10001
520+100000:-1:100001
521+1000000:-1:1000001
522+10000000:-1:10000001
523+100000000:-1:100000001
524+1000000000:-1:1000000001
525+10000000000:-1:10000000001
526+123456789:+987654321:-864197532
527-123456789:+987654321:-1111111110
528-123456789:-987654321:864197532
529+123456789:-987654321:1111111110
5302/3:1/3:1/3
5317/27:3/54:11/54
532-2/3:+2/3:-4/3
533-2/3:-2/3:0
7afd7a91
T
5340:-123:123
5350:123:-123
184f15d5
JH
536&bmul
537abc:abc:NaN
538abc:+0:NaN
539+0:abc:NaN
540+inf:NaNmul:NaN
541+inf:NaNmul:NaN
542NaNmul:+inf:NaN
543NaNmul:-inf:NaN
544+inf:+inf:inf
545+inf:-inf:-inf
546+inf:-inf:-inf
547+inf:+inf:inf
548+inf:123.34:inf
549+inf:-123.34:-inf
550-inf:123.34:-inf
551-inf:-123.34:inf
552123.34:+inf:inf
553-123.34:+inf:-inf
554123.34:-inf:-inf
555-123.34:-inf:inf
556+0:+0:0
557+0:+1:0
558+1:+0:0
559+0:-1:0
560-1:+0:0
561+123456789123456789:+0:0
562+0:+123456789123456789:0
563-1:-1:1
564-1:+1:-1
565+1:-1:-1
566+1:+1:1
567+2:+3:6
568-2:+3:-6
569+2:-3:-6
570-2:-3:6
571+111:+111:12321
572+10101:+10101:102030201
573+1001001:+1001001:1002003002001
574+100010001:+100010001:10002000300020001
575+10000100001:+10000100001:100002000030000200001
576+11111111111:+9:99999999999
577+22222222222:+9:199999999998
578+33333333333:+9:299999999997
579+44444444444:+9:399999999996
580+55555555555:+9:499999999995
581+66666666666:+9:599999999994
582+77777777777:+9:699999999993
583+88888888888:+9:799999999992
584+99999999999:+9:899999999991
5856:120:720
58610:10000:100000
5871/4:1/3:1/12
588&bdiv
589$div_scale = 40; $round_mode = 'even'
590abc:abc:NaN
591abc:+1:abc:NaN
592+1:abc:NaN
593-1:abc:NaN
5940:abc:NaN
595+0:+0:NaN
596+0:+1:0
597+1:+0:inf
598+3214:+0:inf
599+0:-1:0
600-1:+0:-inf
601-3214:+0:-inf
602+1:+1:1
603-1:-1:1
604+1:-1:-1
605-1:+1:-1
606+1:+2:1/2
607+2:+1:2
608123:+inf:0
609123:-inf:0
610+10:+5:2
611+100:+4:25
612+1000:+8:125
613+10000:+16:625
614+10000:-16:-625
615+999999999999:+9:111111111111
616+999999999999:+99:10101010101
617+999999999999:+999:1001001001
618+999999999999:+9999:100010001
619+999999999999999:+99999:10000100001
620+1000000000:+9:1000000000/9
621+2000000000:+9:2000000000/9
622+3000000000:+9:1000000000/3
623+4000000000:+9:4000000000/9
624+5000000000:+9:5000000000/9
625+6000000000:+9:2000000000/3
626+7000000000:+9:7000000000/9
627+8000000000:+9:8000000000/9
628+9000000000:+9:1000000000
629+35500000:+113:35500000/113
630+71000000:+226:35500000/113
631+106500000:+339:35500000/113
632+1000000000:+3:1000000000/3
6332:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881
634123456:1:123456
6351/4:1/3:3/4
636# reset scale for further tests
637$div_scale = 40
638&is_nan
639123:0
640abc:1
641NaN:1
642-123:0
643&is_inf
644+inf::1
645-inf::1
646abc::0
6471::0
648NaN::0
649-1::0
650+inf:-:0
651+inf:+:1
652-inf:-:1
653-inf:+:0
654# it must be exactly /^[+-]inf$/
655+infinity::0
656-infinity::0
657&is_odd
658abc:0
6590:0
660-1:1
661-3:1
6621:1
6633:1
6641000001:1
6651000002:0
666+inf:0
667-inf:0
668123.45:0
669-123.45:0
6702:0
671&is_int
672NaNis_int:0
6730:1
6741:1
6752:1
676-2:1
677-1:1
678-inf:0
679+inf:0
680123.4567:0
681-0.1:0
682-0.002:0
6831/3:0
6843/1:1
685&is_even
686abc:0
6870:1
688-1:0
689-3:0
6901:0
6913:0
6921000001:0
6931000002:1
6942:1
695+inf:0
696-inf:0
697123.456:0
698-123.456:0
6990.01:0
700-0.01:0
701120:1
7021200:1
703-1200:1
b68b7ab1
T
704&is_pos
7050:0
7061:1
707-1:0
708-123:0
709NaN:0
710-inf:0
711+inf:1
184f15d5 712&is_positive
b68b7ab1 7130:0
184f15d5
JH
7141:1
715-1:0
716-123:0
717NaN:0
718-inf:0
719+inf:1
b68b7ab1
T
720&is_neg
7210:0
7221:0
723-1:1
724-123:1
725NaN:0
726-inf:1
727+inf:0
184f15d5
JH
728&is_negative
7290:0
7301:0
731-1:1
732-123:1
733NaN:0
734-inf:1
735+inf:0
a4e2b1c6
JH
736&parts
7370:0 1
7381:1 1
739123:123 1
740-123:-123 1
741-1200:-1200 1
7425/7:5 7
743-5/7:-5 7
744NaNparts:NaN NaN
745+inf:inf inf
746-inf:-inf inf
12fc2493
AMS
747&length
748123:3
749-123:3
7500:1
7511:1
75212345678901234567890:20
184f15d5
JH
753&is_zero
754NaNzero:0
755+inf:0
756-inf:0
7570:1
758-1:0
7591:0
7600/3:1
7611/3:0
7afd7a91
T
762-0/3:1
7635/inf:1
184f15d5
JH
764&is_one
765NaNone:0
766+inf:0
767-inf:0
7680:0
7692:0
7701:1
771-1:0
772-2:0
7731/3:0
774100/100:1
7750.1/0.1:1
7afd7a91 7765/inf:0
184f15d5
JH
777&ffloor
7780:0
779abc:NaN
780+inf:inf
781-inf:-inf
7821:1
783-51:-51
784-51.2:-52
78512.2:12
a4e2b1c6
JH
7863/7:0
7876/7:0
7887/7:1
7898/7:1
79013/7:1
79114/7:2
79215/7:2
793-3/7:-1
794-6/7:-1
795-7/1:-7
796-8/7:-2
797-13/7:-2
798-14/7:-2
799-15/7:-3
184f15d5
JH
800&fceil
8010:0
802abc:NaN
803+inf:inf
804-inf:-inf
8051:1
806-51:-51
807-51.2:-51
80812.2:13
a4e2b1c6
JH
8093/7:1
8106/7:1
8118/7:2
81213/7:2
81314/7:2
81415/7:3
815-3/7:0
816-6/7:0
817-8/7:-1
818-13/7:-1
819-14/7:-2
820-15/7:-2
821&ffac
822NaN:NaN
8231:1
824-1:NaN
825&bpow
826# bpow test for overload of **
8272:2:4
8283:3:27
7afd7a91
T
829&bacmp
830+0:-0:0
831+0:+1:-1
832-1:+1:0
833+1:-1:0
834-1:+2:-1
835+2:-1:1
836-123456789:+987654321:-1
837+123456789:-987654321:-1
838+987654321:+123456789:1
839-987654321:+123456789:1
840-123:+4567889:-1
841# NaNs
842acmpNaN:123:
843123:acmpNaN:
844acmpNaN:acmpNaN:
845# infinity
846+inf:+inf:0
847-inf:-inf:0
848+inf:-inf:0
849-inf:+inf:0
850+inf:123:1
851-inf:123:1
852+inf:-123:1
853-inf:-123:1
854+inf:1/23:1
855-inf:1/23:1
856+inf:-1/23:1
857-inf:-1/23:1
858+inf:12/3:1
859-inf:12/3:1
860+inf:-12/3:1
861-inf:-12/3:1
862123:inf:-1
863-123:inf:-1
864123:-inf:-1
865-123:-inf:-1
8661/23:inf:-1
867-1/23:inf:-1
8681/23:-inf:-1
869-1/23:-inf:-1
87012/3:inf:-1
871-12/3:inf:-1
87212/3:-inf:-1
873-12/3:-inf:-1
874# return undef
875+inf:NaN:
876NaN:inf:
877-inf:NaN:
878NaN:-inf:
8791/3:2/3:-1
8802/3:1/3:1
8812/3:2/3:0
a4e2b1c6
JH
882&fpow
8832/1:3/1:8
8843/1:3/1:27
8855/2:3/1:125/8
886-2/1:3/1:-8
887-3/1:3/1:-27
888-5/2:3/1:-125/8
889-2/1:4/1:16
890-3/1:4/1:81
891-5/2:4/1:625/16
892-5/2:-4/1:16/625
8931/5:-3:125
894-1/5:-3:-125
895&numerator
896NaN:NaN
897inf:inf
898-inf:-inf
8993/7:3
900-3/7:-3
9010:0
9021:1
12fc2493 9035/-3:-5
a4e2b1c6
JH
904&denominator
905NaN:NaN
12fc2493
AMS
906inf:1
907-inf:1
a4e2b1c6
JH
9083/7:7
9090:1
9101/1:1
12fc2493 911-1/1:1
a4e2b1c6 912-3/7:7
12fc2493 9134/-5:5
a4e2b1c6
JH
914&finc
9153/2:5/2
916-15/6:-3/2
917NaN:NaN
918-1/3:2/3
919-2/7:5/7
920&fdec
92115/6:3/2
922-3/2:-5/2
9231/3:-2/3
9242/7:-5/7
925NaN:NaN