Happy new year
[p5sagit/p5-mst-13.2.git] / lib / Math / BigRat / t / bigratpm.inc
CommitLineData
184f15d5 1#include this file into another test for subclass testing...
2
3ok ($class->config()->{lib},$CL);
4
990fb837 5$setup = '';
6
184f15d5 7while (<DATA>)
8 {
a4e2b1c6 9 chomp;
184f15d5 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 38 my $a = $args[1] || '';
39 $try .= "\$x->binf('$a');";
184f15d5 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 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 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;';
12fc2493 71 } elsif ($f eq "digit") {
72 $try .= "\$x->digit($args[1]);";
73 } elsif ($f eq "fround") {
184f15d5 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 90 $try .= '$x->bacmp($y);';
91 } elsif ($f eq "bpow") {
92 $try .= '$x ** $y;';
a4e2b1c6 93 } elsif ($f eq "fpow") {
94 $try .= '$x->bpow($y);';
184f15d5 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 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 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 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 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 219&as_number
220144/7:20
221NaN:NaN
222+inf:inf
223-inf:-inf
7afd7a91 224&bmodpow
225# format: number:exponent:modulus:result
226# bmodpow Data errors
227abc:abc:abc:NaN
2285:abc:abc:NaN
229abc:5:abc:NaN
230abc:abc:5:NaN
2315:5:abc:NaN
2325:abc:5:NaN
233abc:5:5:NaN
234# bmodpow Expected results
2350:0:2:1
2361:0:2:1
2370:0:1:0
2388:7:5032:3840
2398:-1:5033:4404
24098436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518
241# bmodpow Error cases
2428:8:-5:NaN
2438:-1:16:NaN
244inf:5:13:NaN
2455:inf:13:NaN
990fb837 246&bmod
247NaN:1:NaN
2481:NaN:NaN
2491:1:0
2502:2:0
25112:6:0
2527/4:4/14:1/28
2537/4:4/16:0
254-7/4:4/16:0
255-7/4:-4/16:0
2567/4:-4/16:0
2577/4:4/32:0
258-7/4:4/32:0
259-7/4:-4/32:0
2607/4:-4/32:0
2617/4:4/28:1/28
262-7/4:4/28:-1/28
2637/4:-4/28:1/28
264-7/4:-4/28:-1/28
265&fsqrt
2661:1
2670:0
268NaN:NaN
269+inf:inf
270-inf:NaN
271144:12
272# sqrt(144) / sqrt(4) = 12/2 = 6/1
273144/4:6
27425/16:5/4
275-3:NaN
276&flog
277NaN:NaN
2780:NaN
7afd7a91 279-2:NaN
280&blog
281NaN:NaN:NaN
2820:NaN:NaN
283NaN:0:NaN
284NaN:1:NaN
2851:NaN:NaN
2860:2:NaN
2870:-2:NaN
2883:-2:NaN
184f15d5 289&finf
2901:+:inf
2912:-:-inf
2923:abc:inf
990fb837 293&numify
93c87d9d 2940:0
295+1:1
2961234:1234
2973/4:0.75
2985/2:2.5
2993/2:1.5
3005/4:1.25
990fb837 301NaN:NaN
93c87d9d 302+inf:inf
303-inf:-inf
184f15d5 304&fnan
305abc:NaN
3062:NaN
307-2:NaN
3080:NaN
309&fone
3102:+:1
311-2:-:-1
312-2:+:1
3132:-:-1
3140::1
315-2::1
316abc::1
3172:abc:1
318&fsstr
319+inf:inf
320-inf:-inf
321abcfsstr:NaN
3221:1/1
3233/1:3/1
3240.1:1/10
325&bnorm
3261:1
327-0:0
328bnormNaN:NaN
329+inf:inf
330-inf:-inf
7afd7a91 331inf/inf:NaN
3325/inf:0
3335/-inf:0
334inf/5:inf
335-inf/5:-inf
336inf/-5:-inf
337-inf/-5:inf
184f15d5 338123:123
339-123.4567:-1234567/10000
340# invalid inputs
3411__2:NaN
3421E1__2:NaN
34311__2E2:NaN
344#1.E3:NaN
345.2E-3.:NaN
346#1e3e4:NaN
347.2E2:20
348inf:inf
349+inf:inf
350-inf:-inf
351+infinity:NaN
352+-inf:NaN
353abc:NaN
354 1 a:NaN
3551bcd2:NaN
35611111b:NaN
357+1z:NaN
358-1z:NaN
3590:0
360+0:0
361+00:0
362+0_0_0:0
363000000_0000000_00000:0
364-0:0
365-0000:0
366+1:1
367+01:1
368+001:1
369+00000100000:100000
12fc2493 370+00000800/00000010:80
371-00000800/00000010:-80
372+00000800/-00000010:-80
373-00000800/-00000010:80
184f15d5 374123456789:123456789
375-1:-1
376-01:-1
377-001:-1
378-123456789:-123456789
379-00000100000:-100000
380123.456a:NaN
381123.456:15432/125
3820.01:1/100
383.002:1/500
384+.2:1/5
385-0.0003:-3/10000
386-.0000000004:-1/2500000000
387123456E2:12345600
388123456E-2:30864/25
389-123456E2:-12345600
390-123456E-2:-30864/25
3911e1:10
3922e-11:1/50000000000
39312/10:6/5
3940.1/0.1:1
395100/0.1:1000
3960.1/10:1/100
3971 / 3:1/3
3981/ 3:1/3
3991 /3:1/3
400&fneg
401fnegNaN: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
412fabsNaN: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
423abc:abc:NaN
424abc:+0:NaN
425+0:abc:NaN
426+inf:-inf:NaN
427-inf:+inf:NaN
428+inf:+inf:inf
429-inf:-inf:-inf
430baddNaN:+inf:NaN
431baddNaN:+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
4681/3:1/3:2/3
4692/3:-1/3:1/3
470&bsub
471abc:abc:NaN
472abc:+0:NaN
473+0:abc:NaN
474+inf:-inf:inf
475-inf:+inf:-inf
476+inf:+inf:NaN
477-inf:-inf:NaN
478baddNaN:+inf:NaN
479baddNaN:+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
5162/3:1/3:1/3
5177/27:3/54:11/54
518-2/3:+2/3:-4/3
519-2/3:-2/3:0
7afd7a91 5200:-123:123
5210:123:-123
184f15d5 522&bmul
523abc:abc:NaN
524abc:+0:NaN
525+0:abc:NaN
526+inf:NaNmul:NaN
527+inf:NaNmul:NaN
528NaNmul:+inf:NaN
529NaNmul:-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
538123.34:+inf:inf
539-123.34:+inf:-inf
540123.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
5716:120:720
57210:10000:100000
5731/4:1/3:1/12
574&bdiv
575$div_scale = 40; $round_mode = 'even'
576abc:abc:NaN
577abc:+1:abc:NaN
578+1:abc:NaN
579-1:abc:NaN
5800: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
594123:+inf:0
595123:-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
6192:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881
620123456:1:123456
6211/4:1/3:3/4
622# reset scale for further tests
623$div_scale = 40
624&is_nan
625123:0
626abc:1
627NaN:1
628-123:0
629&is_inf
630+inf::1
631-inf::1
632abc::0
6331::0
634NaN::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
644abc:0
6450:0
646-1:1
647-3:1
6481:1
6493:1
6501000001:1
6511000002:0
652+inf:0
653-inf:0
654123.45:0
655-123.45:0
6562:0
657&is_int
658NaNis_int:0
6590:1
6601:1
6612:1
662-2:1
663-1:1
664-inf:0
665+inf:0
666123.4567:0
667-0.1:0
668-0.002:0
6691/3:0
6703/1:1
671&is_even
672abc:0
6730:1
674-1:0
675-3:0
6761:0
6773:0
6781000001:0
6791000002:1
6802:1
681+inf:0
682-inf:0
683123.456:0
684-123.456:0
6850.01:0
686-0.01:0
687120:1
6881200:1
689-1200:1
690&is_positive
6910:1
6921:1
693-1:0
694-123:0
695NaN:0
696-inf:0
697+inf:1
698&is_negative
6990:0
7001:0
701-1:1
702-123:1
703NaN:0
704-inf:1
705+inf:0
a4e2b1c6 706&parts
7070:0 1
7081:1 1
709123:123 1
710-123:-123 1
711-1200:-1200 1
7125/7:5 7
713-5/7:-5 7
714NaNparts:NaN NaN
715+inf:inf inf
716-inf:-inf inf
12fc2493 717&length
718123:3
719-123:3
7200:1
7211:1
72212345678901234567890:20
184f15d5 723&is_zero
724NaNzero:0
725+inf:0
726-inf:0
7270:1
728-1:0
7291:0
7300/3:1
7311/3:0
7afd7a91 732-0/3:1
7335/inf:1
184f15d5 734&is_one
735NaNone:0
736+inf:0
737-inf:0
7380:0
7392:0
7401:1
741-1:0
742-2:0
7431/3:0
744100/100:1
7450.1/0.1:1
7afd7a91 7465/inf:0
184f15d5 747&ffloor
7480:0
749abc:NaN
750+inf:inf
751-inf:-inf
7521:1
753-51:-51
754-51.2:-52
75512.2:12
a4e2b1c6 7563/7:0
7576/7:0
7587/7:1
7598/7:1
76013/7:1
76114/7:2
76215/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
184f15d5 770&fceil
7710:0
772abc:NaN
773+inf:inf
774-inf:-inf
7751:1
776-51:-51
777-51.2:-51
77812.2:13
a4e2b1c6 7793/7:1
7806/7:1
7818/7:2
78213/7:2
78314/7:2
78415/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
792NaN:NaN
7931:1
794-1:NaN
795&bpow
796# bpow test for overload of **
7972:2:4
7983:3:27
7afd7a91 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
812acmpNaN:123:
813123:acmpNaN:
814acmpNaN: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
832123:inf:-1
833-123:inf:-1
834123:-inf:-1
835-123:-inf:-1
8361/23:inf:-1
837-1/23:inf:-1
8381/23:-inf:-1
839-1/23:-inf:-1
84012/3:inf:-1
841-12/3:inf:-1
84212/3:-inf:-1
843-12/3:-inf:-1
844# return undef
845+inf:NaN:
846NaN:inf:
847-inf:NaN:
848NaN:-inf:
8491/3:2/3:-1
8502/3:1/3:1
8512/3:2/3:0
a4e2b1c6 852&fpow
8532/1:3/1:8
8543/1:3/1:27
8555/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
8631/5:-3:125
864-1/5:-3:-125
865&numerator
866NaN:NaN
867inf:inf
868-inf:-inf
8693/7:3
870-3/7:-3
8710:0
8721:1
12fc2493 8735/-3:-5
a4e2b1c6 874&denominator
875NaN:NaN
12fc2493 876inf:1
877-inf:1
a4e2b1c6 8783/7:7
8790:1
8801/1:1
12fc2493 881-1/1:1
a4e2b1c6 882-3/7:7
12fc2493 8834/-5:5
a4e2b1c6 884&finc
8853/2:5/2
886-15/6:-3/2
887NaN:NaN
888-1/3:2/3
889-2/7:5/7
890&fdec
89115/6:3/2
892-3/2:-5/2
8931/3:-2/3
8942/7:-5/7
895NaN:NaN