1 #include this file into another test for subclass testing...
3 ok ($class->config()->{lib},$CL);
10 $_ =~ s/#.*$//; # remove comments
11 $_ =~ s/\s+$//; # trailing spaces
12 next if /^$/; # skip empty lines & comments
19 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale
20 #print "\$setup== $setup\n";
27 @args = split(/:/,$1,99);
31 @args = split(/:/,$_,99); $ans = pop(@args);
33 $try = "\$x = new $class \"$args[0]\";";
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();';
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)$/) {
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)$/) {
65 } elsif ($f eq "as_number") {
66 $try .= '$x->as_number();';
67 } elsif ($f eq "finc") {
69 } elsif ($f eq "fdec") {
71 }elsif ($f eq "fround") {
72 $try .= "$setup; \$x->bround($args[1]);";
73 } elsif ($f eq "ffround") {
74 $try .= "$setup; \$x->bfround($args[1]);";
75 } elsif ($f eq "fsqrt") {
76 $try .= "$setup; \$x->bsqrt();";
77 } elsif ($f eq "flog") {
78 $try .= "$setup; \$x->blog();";
79 } elsif ($f eq "ffac") {
80 $try .= "$setup; \$x->bfac();";
84 $try .= "\$y = new $class \"$args[1]\";";
87 } elsif ($f eq "facmp") {
88 $try .= '$x->bacmp($y);';
89 } elsif ($f eq "bpow") {
91 } elsif ($f eq "fpow") {
92 $try .= '$x->bpow($y);';
93 } elsif ($f eq "badd") {
95 } elsif ($f eq "bsub") {
97 } elsif ($f eq "bmul") {
99 } elsif ($f eq "bdiv") {
100 $try .= "$setup; \$x / \$y;";
101 } elsif ($f eq "fdiv-list") {
102 $try .= "$setup; join(',',\$x->bdiv(\$y));";
103 } elsif ($f eq "brsft") {
105 } elsif ($f eq "blsft") {
107 } elsif ($f eq "bmod") {
109 } else { warn "Unknown op '$f'"; }
111 # print "# Trying: '$try'\n";
113 if ($ans =~ m|^/(.*)$|)
122 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);
133 print "# Tried: '$try'\n" if !ok ($ans1, $ans);
134 # if (ref($ans1) eq "$class")
136 # # float numbers are normalized (for now), so mantissa shouldn't have
138 # #print $ans1->_trailing_zeros(),"\n";
139 # print "# Has trailing zeros after '$try'\n"
140 # if !ok ($ans1->{_m}->_trailing_zeros(), 0);
143 } # end pattern or string
147 # check whether $class->new( Math::BigInt->new()) destroys it
148 # ($y == 12 in this case)
149 $x = Math::BigInt->new(1200); $y = $class->new($x);
150 ok ($y,1200); ok ($x,1200);
152 ###############################################################################
155 $x = $class->new(2); $x->bzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
156 $x = $class->new(2); $x->binf(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
157 $x = $class->new(2); $x->bone(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
158 $x = $class->new(2); $x->bnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p});
162 ###############################################################################
163 # Perl 5.005 does not like ok ($x,undef)
169 ok (1,1) and return if !defined $x;
205 # sqrt(144) / sqrt(4) = 12/2 = 6/1
251 -123.4567:-1234567/10000
275 000000_0000000_00000:0
286 -123456789:-123456789
294 -.0000000004:-1/2500000000
315 +123456789:-123456789
317 +123.456789:-123456789/1000000
318 -123456.789:123456789/1000
328 +123.456789:123456789/1000000
329 -123456.789:123456789/1000
358 +99999999:+1:100000000
359 +999999999:+1:1000000000
360 +9999999999:+1:10000000000
361 +99999999999:+1:100000000000
369 +100000000:-1:99999999
370 +1000000000:-1:999999999
371 +10000000000:-1:9999999999
372 +123456789:+987654321:1111111110
373 -123456789:+987654321:864197532
374 -123456789:-987654321:-1111111110
375 +123456789:-987654321:-864197532
406 +99999999:+1:99999998
407 +999999999:+1:999999998
408 +9999999999:+1:9999999998
409 +99999999999:+1:99999999998
416 +10000000:-1:10000001
417 +100000000:-1:100000001
418 +1000000000:-1:1000000001
419 +10000000000:-1:10000000001
420 +123456789:+987654321:-864197532
421 -123456789:+987654321:-1111111110
422 -123456789:-987654321:864197532
423 +123456789:-987654321:1111111110
453 +123456789123456789:+0:0
454 +0:+123456789123456789:0
464 +10101:+10101:102030201
465 +1001001:+1001001:1002003002001
466 +100010001:+100010001:10002000300020001
467 +10000100001:+10000100001:100002000030000200001
468 +11111111111:+9:99999999999
469 +22222222222:+9:199999999998
470 +33333333333:+9:299999999997
471 +44444444444:+9:399999999996
472 +55555555555:+9:499999999995
473 +66666666666:+9:599999999994
474 +77777777777:+9:699999999993
475 +88888888888:+9:799999999992
476 +99999999999:+9:899999999991
481 $div_scale = 40; $round_mode = 'even'
507 +999999999999:+9:111111111111
508 +999999999999:+99:10101010101
509 +999999999999:+999:1001001001
510 +999999999999:+9999:100010001
511 +999999999999999:+99999:10000100001
512 +1000000000:+9:1000000000/9
513 +2000000000:+9:2000000000/9
514 +3000000000:+9:1000000000/3
515 +4000000000:+9:4000000000/9
516 +5000000000:+9:5000000000/9
517 +6000000000:+9:2000000000/3
518 +7000000000:+9:7000000000/9
519 +8000000000:+9:8000000000/9
520 +9000000000:+9:1000000000
521 +35500000:+113:35500000/113
522 +71000000:+226:35500000/113
523 +106500000:+339:35500000/113
524 +1000000000:+3:1000000000/3
525 2:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881
528 # reset scale for further tests
546 # it must be exactly /^[+-]inf$/
646 #12345678901234567890:20
717 # bpow test for overload of **