This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[PATCH] Math::BigInt v1.73 final
[perl5.git] / lib / Math / BigRat / t / bigratpm.inc
1 #include this file into another test for subclass testing...
2
3 ok ($class->config()->{lib},$CL);
4
5 $setup = '';
6
7 while (<DATA>)
8   {
9   chomp;
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") {
38         my $a = $args[1] || '';
39         $try .= "\$x->binf('$a');";
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();';
57       } elsif ($f =~ /^(length|numify)$/) {
58         $try .= "\$x->$f();";
59       # some unary ops (can't test the fxxx form, since no AUTOLOAD in BigRat)
60       } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {
61         $try .= "\$x->b$1();";
62       # some is_xxx test function       
63       } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) {
64         $try .= "\$x->$f();";
65       } elsif ($f eq "as_number") {
66         $try .= '$x->as_number();';
67       } elsif ($f eq "finc") {
68         $try .= '++$x;';
69       } elsif ($f eq "fdec") {
70         $try .= '--$x;';
71       } elsif ($f eq "digit") {
72         $try .= "\$x->digit($args[1]);";
73       } elsif ($f eq "fround") {
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]\";";
87       if ($f eq "bcmp") {
88         $try .= '$x <=> $y;';
89       } elsif ($f eq "bacmp") {
90         $try .= '$x->bacmp($y);';
91       } elsif ($f eq "bpow") {
92         $try .= '$x ** $y;';
93       } elsif ($f eq "fpow") {
94         $try .= '$x->bpow($y);';
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;';
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       }
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);
163 ok ($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         
173 1; # all done
174
175 ###############################################################################
176 # Perl 5.005 does not like ok ($x,undef)
177
178 sub 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__
187 &digit
188 123:2:1
189 1234:0:4
190 1234:1:3
191 1234:2:2
192 1234:3:1
193 1234:-1:1
194 1234:-2:2
195 1234:-3:3
196 1234:-4:4
197 0:0:0
198 0:1:0
199 &bmodinv
200 # format: number:modulus:result
201 # bmodinv Data errors
202 abc:abc:NaN
203 abc:5:NaN
204 5:abc:NaN
205 # bmodinv Expected Results from normal use
206 1:5:1
207 3:5:2
208 -2:5:2
209 8:5033:4404
210 1234567891:13:6
211 -1234567891:13:7
212 324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902
213 ## bmodinv Error cases / useless use of function
214 3:-5:NaN
215 inf:5:NaN
216 5:inf:NaN
217 -inf:5:NaN
218 5:-inf:NaN
219 &as_number
220 144/7:20
221 NaN:NaN
222 +inf:inf
223 -inf:-inf
224 &bmodpow
225 # format: number:exponent:modulus:result
226 # bmodpow Data errors
227 abc:abc:abc:NaN
228 5:abc:abc:NaN
229 abc:5:abc:NaN
230 abc:abc:5:NaN
231 5:5:abc:NaN
232 5:abc:5:NaN
233 abc:5:5:NaN
234 # bmodpow Expected results
235 0:0:2:1
236 1:0:2:1
237 0:0:1:0
238 8:7:5032:3840
239 8:-1:5033:4404
240 98436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
241 # bmodpow Error cases
242 8:8:-5:NaN
243 8:-1:16:NaN
244 inf:5:13:NaN
245 5:inf:13:NaN
246 &bmod
247 NaN:1:NaN
248 1:NaN:NaN
249 1:1:0
250 2:2:0
251 12:6:0
252 7/4:4/14:1/28
253 7/4:4/16:0
254 -7/4:4/16:0
255 -7/4:-4/16:0
256 7/4:-4/16:0
257 7/4:4/32:0
258 -7/4:4/32:0
259 -7/4:-4/32:0
260 7/4:-4/32:0
261 7/4:4/28:1/28
262 -7/4:4/28:-1/28
263 7/4:-4/28:1/28
264 -7/4:-4/28:-1/28
265 &fsqrt
266 1:1
267 0:0
268 NaN:NaN
269 +inf:inf
270 -inf:NaN
271 144:12
272 # sqrt(144) / sqrt(4) = 12/2 = 6/1
273 144/4:6
274 25/16:5/4
275 -3:NaN
276 &flog
277 NaN:NaN
278 0:NaN
279 -2:NaN
280 &blog
281 NaN:NaN:NaN
282 0:NaN:NaN
283 NaN:0:NaN
284 NaN:1:NaN
285 1:NaN:NaN
286 0:2:NaN
287 0:-2:NaN
288 3:-2:NaN
289 &finf
290 1:+:inf
291 2:-:-inf
292 3:abc:inf
293 &numify
294 0:0
295 +1:1
296 1234:1234
297 3/4:0.75
298 5/2:2.5
299 3/2:1.5
300 5/4:1.25
301 NaN:NaN
302 +inf:inf
303 -inf:-inf
304 &fnan
305 abc:NaN
306 2:NaN
307 -2:NaN
308 0:NaN
309 &fone
310 2:+:1
311 -2:-:-1
312 -2:+:1
313 2:-:-1
314 0::1
315 -2::1
316 abc::1
317 2:abc:1
318 &fsstr
319 +inf:inf
320 -inf:-inf
321 abcfsstr:NaN
322 1:1/1
323 3/1:3/1
324 0.1:1/10
325 &bnorm
326 1:1
327 -0:0
328 bnormNaN:NaN
329 +inf:inf
330 -inf:-inf
331 inf/inf:NaN
332 5/inf:0
333 5/-inf:0
334 inf/5:inf
335 -inf/5:-inf
336 inf/-5:-inf
337 -inf/-5:inf
338 123:123
339 -123.4567:-1234567/10000
340 # invalid inputs
341 1__2:NaN
342 1E1__2:NaN
343 11__2E2:NaN
344 #1.E3:NaN
345 .2E-3.:NaN
346 #1e3e4:NaN
347 .2E2:20
348 inf:inf
349 +inf:inf
350 -inf:-inf
351 +infinity:NaN
352 +-inf:NaN
353 abc:NaN
354    1 a:NaN
355 1bcd2:NaN
356 11111b:NaN
357 +1z:NaN
358 -1z:NaN
359 0:0
360 +0:0
361 +00:0
362 +0_0_0:0
363 000000_0000000_00000:0
364 -0:0
365 -0000:0
366 +1:1
367 +01:1
368 +001:1
369 +00000100000:100000
370 +00000800/00000010:80
371 -00000800/00000010:-80
372 +00000800/-00000010:-80
373 -00000800/-00000010:80
374 123456789:123456789
375 -1:-1
376 -01:-1
377 -001:-1
378 -123456789:-123456789
379 -00000100000:-100000
380 123.456a:NaN
381 123.456:15432/125
382 0.01:1/100
383 .002:1/500
384 +.2:1/5
385 -0.0003:-3/10000
386 -.0000000004:-1/2500000000
387 123456E2:12345600
388 123456E-2:30864/25
389 -123456E2:-12345600
390 -123456E-2:-30864/25
391 1e1:10
392 2e-11:1/50000000000
393 12/10:6/5
394 0.1/0.1:1
395 100/0.1:1000
396 0.1/10:1/100
397 1 / 3:1/3
398 1/ 3:1/3
399 1 /3:1/3
400 &fneg
401 fnegNaN:NaN
402 +inf:-inf
403 -inf:inf
404 +0:0
405 +1:-1
406 -1:1
407 +123456789:-123456789
408 -123456789:123456789
409 +123.456789:-123456789/1000000
410 -123456.789:123456789/1000
411 &fabs
412 fabsNaN: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
422 &badd
423 abc:abc:NaN
424 abc:+0:NaN
425 +0:abc:NaN
426 +inf:-inf:NaN
427 -inf:+inf:NaN
428 +inf:+inf:inf
429 -inf:-inf:-inf
430 baddNaN:+inf:NaN
431 baddNaN:+inf:NaN
432 +inf:baddNaN:NaN
433 -inf:baddNaN:NaN
434 +0:+0:0
435 +1:+0:1
436 +0:+1:1
437 +1:+1:2
438 -1:+0:-1
439 +0:-1:-1
440 -1:-1:-2
441 -1:+1:0
442 +1:-1:0
443 +9:+1:10
444 +99:+1:100
445 +999:+1:1000
446 +9999:+1:10000
447 +99999:+1:100000
448 +999999:+1:1000000
449 +9999999:+1:10000000
450 +99999999:+1:100000000
451 +999999999:+1:1000000000
452 +9999999999:+1:10000000000
453 +99999999999:+1:100000000000
454 +10:-1:9
455 +100:-1:99
456 +1000:-1:999
457 +10000:-1:9999
458 +100000:-1:99999
459 +1000000:-1:999999
460 +10000000:-1:9999999
461 +100000000:-1:99999999
462 +1000000000:-1:999999999
463 +10000000000:-1:9999999999
464 +123456789:+987654321:1111111110
465 -123456789:+987654321:864197532
466 -123456789:-987654321:-1111111110
467 +123456789:-987654321:-864197532
468 1/3:1/3:2/3
469 2/3:-1/3:1/3
470 &bsub
471 abc:abc:NaN
472 abc:+0:NaN
473 +0:abc:NaN
474 +inf:-inf:inf
475 -inf:+inf:-inf
476 +inf:+inf:NaN
477 -inf:-inf:NaN
478 baddNaN:+inf:NaN
479 baddNaN:+inf:NaN
480 +inf:baddNaN:NaN
481 -inf:baddNaN:NaN
482 +0:+0:0
483 +1:+0:1
484 +0:+1:-1
485 +1:+1:0
486 -1:+0:-1
487 +0:-1:1
488 -1:-1:0
489 -1:+1:-2
490 +1:-1:2
491 +9:+1:8
492 +99:+1:98
493 +999:+1:998
494 +9999:+1:9998
495 +99999:+1:99998
496 +999999:+1:999998
497 +9999999:+1:9999998
498 +99999999:+1:99999998
499 +999999999:+1:999999998
500 +9999999999:+1:9999999998
501 +99999999999:+1:99999999998
502 +10:-1:11
503 +100:-1:101
504 +1000:-1:1001
505 +10000:-1:10001
506 +100000:-1:100001
507 +1000000:-1:1000001
508 +10000000:-1:10000001
509 +100000000:-1:100000001
510 +1000000000:-1:1000000001
511 +10000000000:-1:10000000001
512 +123456789:+987654321:-864197532
513 -123456789:+987654321:-1111111110
514 -123456789:-987654321:864197532
515 +123456789:-987654321:1111111110
516 2/3:1/3:1/3
517 7/27:3/54:11/54
518 -2/3:+2/3:-4/3
519 -2/3:-2/3:0
520 0:-123:123
521 0:123:-123
522 &bmul
523 abc:abc:NaN
524 abc:+0:NaN
525 +0:abc:NaN
526 +inf:NaNmul:NaN
527 +inf:NaNmul:NaN
528 NaNmul:+inf:NaN
529 NaNmul:-inf:NaN
530 +inf:+inf:inf
531 +inf:-inf:-inf
532 +inf:-inf:-inf
533 +inf:+inf:inf
534 +inf:123.34:inf
535 +inf:-123.34:-inf
536 -inf:123.34:-inf
537 -inf:-123.34:inf
538 123.34:+inf:inf
539 -123.34:+inf:-inf
540 123.34:-inf:-inf
541 -123.34:-inf:inf
542 +0:+0:0
543 +0:+1:0
544 +1:+0:0
545 +0:-1:0
546 -1:+0:0
547 +123456789123456789:+0:0
548 +0:+123456789123456789:0
549 -1:-1:1
550 -1:+1:-1
551 +1:-1:-1
552 +1:+1:1
553 +2:+3:6
554 -2:+3:-6
555 +2:-3:-6
556 -2:-3:6
557 +111:+111:12321
558 +10101:+10101:102030201
559 +1001001:+1001001:1002003002001
560 +100010001:+100010001:10002000300020001
561 +10000100001:+10000100001:100002000030000200001
562 +11111111111:+9:99999999999
563 +22222222222:+9:199999999998
564 +33333333333:+9:299999999997
565 +44444444444:+9:399999999996
566 +55555555555:+9:499999999995
567 +66666666666:+9:599999999994
568 +77777777777:+9:699999999993
569 +88888888888:+9:799999999992
570 +99999999999:+9:899999999991
571 6:120:720
572 10:10000:100000
573 1/4:1/3:1/12
574 &bdiv
575 $div_scale = 40; $round_mode = 'even'
576 abc:abc:NaN
577 abc:+1:abc:NaN
578 +1:abc:NaN
579 -1:abc:NaN
580 0:abc:NaN
581 +0:+0:NaN
582 +0:+1:0
583 +1:+0:inf
584 +3214:+0:inf
585 +0:-1:0
586 -1:+0:-inf
587 -3214:+0:-inf
588 +1:+1:1
589 -1:-1:1
590 +1:-1:-1
591 -1:+1:-1
592 +1:+2:1/2
593 +2:+1:2
594 123:+inf:0
595 123:-inf:0
596 +10:+5:2
597 +100:+4:25
598 +1000:+8:125
599 +10000:+16:625
600 +10000:-16:-625
601 +999999999999:+9:111111111111
602 +999999999999:+99:10101010101
603 +999999999999:+999:1001001001
604 +999999999999:+9999:100010001
605 +999999999999999:+99999:10000100001
606 +1000000000:+9:1000000000/9
607 +2000000000:+9:2000000000/9
608 +3000000000:+9:1000000000/3
609 +4000000000:+9:4000000000/9
610 +5000000000:+9:5000000000/9
611 +6000000000:+9:2000000000/3
612 +7000000000:+9:7000000000/9
613 +8000000000:+9:8000000000/9
614 +9000000000:+9:1000000000
615 +35500000:+113:35500000/113
616 +71000000:+226:35500000/113
617 +106500000:+339:35500000/113
618 +1000000000:+3:1000000000/3
619 2:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881
620 123456:1:123456
621 1/4:1/3:3/4
622 # reset scale for further tests
623 $div_scale = 40
624 &is_nan
625 123:0
626 abc:1
627 NaN:1
628 -123:0
629 &is_inf
630 +inf::1
631 -inf::1
632 abc::0
633 1::0
634 NaN::0
635 -1::0
636 +inf:-:0
637 +inf:+:1
638 -inf:-:1
639 -inf:+:0
640 # it must be exactly /^[+-]inf$/
641 +infinity::0
642 -infinity::0
643 &is_odd
644 abc:0
645 0:0
646 -1:1
647 -3:1
648 1:1
649 3:1
650 1000001:1
651 1000002:0
652 +inf:0
653 -inf:0
654 123.45:0
655 -123.45:0
656 2:0
657 &is_int
658 NaNis_int:0
659 0:1
660 1:1
661 2:1
662 -2:1
663 -1:1
664 -inf:0
665 +inf:0
666 123.4567:0
667 -0.1:0
668 -0.002:0
669 1/3:0
670 3/1:1
671 &is_even
672 abc:0
673 0:1
674 -1:0
675 -3:0
676 1:0
677 3:0
678 1000001:0
679 1000002:1
680 2:1
681 +inf:0
682 -inf:0
683 123.456:0
684 -123.456:0
685 0.01:0
686 -0.01:0
687 120:1
688 1200:1
689 -1200:1
690 &is_positive
691 0:1
692 1:1
693 -1:0
694 -123:0
695 NaN:0
696 -inf:0
697 +inf:1
698 &is_negative
699 0:0
700 1:0
701 -1:1
702 -123:1
703 NaN:0
704 -inf:1
705 +inf:0
706 &parts
707 0:0 1
708 1:1 1
709 123:123 1
710 -123:-123 1
711 -1200:-1200 1
712 5/7:5 7
713 -5/7:-5 7
714 NaNparts:NaN NaN
715 +inf:inf inf
716 -inf:-inf inf
717 &length
718 123:3
719 -123:3
720 0:1
721 1:1
722 12345678901234567890:20
723 &is_zero
724 NaNzero:0
725 +inf:0
726 -inf:0
727 0:1
728 -1:0
729 1:0
730 0/3:1
731 1/3:0
732 -0/3:1
733 5/inf:1
734 &is_one
735 NaNone:0
736 +inf:0
737 -inf:0
738 0:0
739 2:0
740 1:1
741 -1:0
742 -2:0
743 1/3:0
744 100/100:1
745 0.1/0.1:1
746 5/inf:0
747 &ffloor
748 0:0
749 abc:NaN
750 +inf:inf
751 -inf:-inf
752 1:1
753 -51:-51
754 -51.2:-52
755 12.2:12
756 3/7:0
757 6/7:0
758 7/7:1
759 8/7:1
760 13/7:1
761 14/7:2
762 15/7:2
763 -3/7:-1
764 -6/7:-1
765 -7/1:-7
766 -8/7:-2
767 -13/7:-2
768 -14/7:-2
769 -15/7:-3
770 &fceil
771 0:0
772 abc:NaN
773 +inf:inf
774 -inf:-inf
775 1:1
776 -51:-51
777 -51.2:-51
778 12.2:13
779 3/7:1
780 6/7:1
781 8/7:2
782 13/7:2
783 14/7:2
784 15/7:3
785 -3/7:0
786 -6/7:0
787 -8/7:-1
788 -13/7:-1
789 -14/7:-2
790 -15/7:-2
791 &ffac
792 NaN:NaN
793 1:1
794 -1:NaN
795 &bpow
796 # bpow test for overload of **
797 2:2:4
798 3:3:27
799 &bacmp
800 +0:-0:0
801 +0:+1:-1
802 -1:+1:0
803 +1:-1:0
804 -1:+2:-1
805 +2:-1:1
806 -123456789:+987654321:-1
807 +123456789:-987654321:-1
808 +987654321:+123456789:1
809 -987654321:+123456789:1
810 -123:+4567889:-1
811 # NaNs
812 acmpNaN:123:
813 123:acmpNaN:
814 acmpNaN:acmpNaN:
815 # infinity
816 +inf:+inf:0
817 -inf:-inf:0
818 +inf:-inf:0
819 -inf:+inf:0
820 +inf:123:1
821 -inf:123:1
822 +inf:-123:1
823 -inf:-123:1
824 +inf:1/23:1
825 -inf:1/23:1
826 +inf:-1/23:1
827 -inf:-1/23:1
828 +inf:12/3:1
829 -inf:12/3:1
830 +inf:-12/3:1
831 -inf:-12/3:1
832 123:inf:-1
833 -123:inf:-1
834 123:-inf:-1
835 -123:-inf:-1
836 1/23:inf:-1
837 -1/23:inf:-1
838 1/23:-inf:-1
839 -1/23:-inf:-1
840 12/3:inf:-1
841 -12/3:inf:-1
842 12/3:-inf:-1
843 -12/3:-inf:-1
844 # return undef
845 +inf:NaN:
846 NaN:inf:
847 -inf:NaN:
848 NaN:-inf:
849 1/3:2/3:-1
850 2/3:1/3:1
851 2/3:2/3:0
852 &fpow
853 2/1:3/1:8
854 3/1:3/1:27
855 5/2:3/1:125/8
856 -2/1:3/1:-8
857 -3/1:3/1:-27
858 -5/2:3/1:-125/8
859 -2/1:4/1:16
860 -3/1:4/1:81
861 -5/2:4/1:625/16
862 -5/2:-4/1:16/625
863 1/5:-3:125
864 -1/5:-3:-125
865 &numerator
866 NaN:NaN
867 inf:inf
868 -inf:-inf
869 3/7:3
870 -3/7:-3
871 0:0
872 1:1
873 5/-3:-5
874 &denominator
875 NaN:NaN
876 inf:1
877 -inf:1
878 3/7:7
879 0:1
880 1/1:1
881 -1/1:1
882 -3/7:7
883 4/-5:5
884 &finc
885 3/2:5/2
886 -15/6:-3/2
887 NaN:NaN
888 -1/3:2/3
889 -2/7:5/7
890 &fdec
891 15/6:3/2
892 -3/2:-5/2
893 1/3:-2/3
894 2/7:-5/7
895 NaN:NaN