⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigratpm.inc

📁 source of perl for linux application,
💻 INC
字号:
#include this file into another test for subclass testing...ok ($class->config()->{lib},$CL);$setup = '';while (<DATA>)  {  chomp;  $_ =~ s/#.*$//;	# remove comments  $_ =~ s/\s+$//;	# trailing spaces  next if /^$/;		# skip empty lines & comments  if (s/^&//)    {    $f = $_;    }  elsif (/^\$/)    {    $setup = $_; $setup =~ s/\$/\$${class}::/g;	# round_mode, div_scale    #print "\$setup== $setup\n";    }  else    {    if (m|^(.*?):(/.+)$|)      {      $ans = $2;      @args = split(/:/,$1,99);      }    else      {      @args = split(/:/,$_,99); $ans = pop(@args);      }    $try = "\$x = new $class \"$args[0]\";";    if ($f eq "bnorm")      {        $try .= "\$x;";      } elsif ($f eq "finf") {        my $a = $args[1] || '';        $try .= "\$x->binf('$a');";      } elsif ($f eq "is_inf") {        $try .= "\$x->is_inf('$args[1]');";       } elsif ($f eq "fone") {        $try .= "\$x->bone('$args[1]');";      } elsif ($f eq "fstr") {        $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);";        $try .= '$x->bstr();';      } elsif ($f eq "parts") {        # ->bstr() to see if an object is returned        $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();';        $try .= '"$a $b";';      } elsif ($f eq "numerator") {        # ->bstr() to see if an object is returned        $try .= '$x->numerator()->bstr();';      } elsif ($f eq "denominator") {        # ->bstr() to see if an object is returned        $try .= '$x->denominator()->bstr();';      } elsif ($f =~ /^(length|numify)$/) {        $try .= "\$x->$f();";      # some unary ops (can't test the fxxx form, since no AUTOLOAD in BigRat)      } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) {        $try .= "\$x->b$1();";      # some is_xxx test function	      } elsif ($f =~ /^is_(zero|one|pos|neg|negative|positive|odd|even|nan|int)\z/) {        $try .= "\$x->$f();";      } elsif ($f =~ /^(as_number|as_int)\z/){        $try .= "\$x->$1();";      } elsif ($f eq "finc") {        $try .= '++$x;';      } elsif ($f eq "fdec") {        $try .= '--$x;';      } elsif ($f eq "digit") {        $try .= "\$x->digit($args[1]);";      } elsif ($f eq "fround") {        $try .= "$setup; \$x->bround($args[1]);";      } elsif ($f eq "ffround") {        $try .= "$setup; \$x->bfround($args[1]);";      } elsif ($f eq "fsqrt") {        $try .= "$setup; \$x->bsqrt();";      } elsif ($f eq "flog") {        $try .= "$setup; \$x->blog();";      } elsif ($f eq "ffac") {        $try .= "$setup; \$x->bfac();";      }    else      {      $try .= "\$y = new $class \"$args[1]\";";      if ($f eq "bcmp") {        $try .= '$x <=> $y;';      } elsif ($f eq "bacmp") {        $try .= '$x->bacmp($y);';      } elsif ($f eq "bpow") {        $try .= '$x ** $y;';      } elsif ($f eq "fpow") {        $try .= '$x->bpow($y);';      } elsif ($f eq "badd") {        $try .= '$x + $y;';      } elsif ($f eq "bsub") {        $try .= '$x - $y;';      } elsif ($f eq "bmul") {        $try .= '$x * $y;';      } elsif ($f eq "bdiv") {        $try .= "$setup; \$x / \$y;";      } elsif ($f eq "fdiv-list") {        $try .= "$setup; join(',',\$x->bdiv(\$y));";      } elsif ($f eq "brsft") {        $try .= '$x >> $y;';      } elsif ($f eq "blsft") {        $try .= '$x << $y;';      } elsif ($f eq "bmod") {        $try .= '$x % $y;';      } elsif( $f eq "bmodinv") {       $try .= "\$x->bmodinv(\$y);";      } elsif( $f eq "blog") {       $try .= "\$x->blog(\$y);";      } else {        $try .= "\$z = $class->new(\"$args[2]\");";        # Functions with three arguments        if( $f eq "bmodpow") {          $try .= "\$x->bmodpow(\$y,\$z);";        } else { warn "Unknown op '$f'"; }      }    }    # print "# Trying: '$try'\n";    $ans1 = eval $try;    if ($ans =~ m|^/(.*)$|)      {      my $pat = $1;      if ($ans1 =~ /$pat/)        {        ok (1,1);        }      else        {        print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0);        }      }    else      {      if ($ans eq "")        {        ok_undef ($ans1);        }      else        {        print "# Tried: '$try'\n" if !ok ($ans1, $ans);#        if (ref($ans1) eq "$class")#	  {#	  # float numbers are normalized (for now), so mantissa shouldn't have#	  # trailing zeros#	  #print $ans1->_trailing_zeros(),"\n";#          print "# Has trailing zeros after '$try'\n"#	   if !ok ($ans1->{_m}->_trailing_zeros(), 0);#	  }        }      } # end pattern or string    }  } # end while# check whether $class->new( Math::BigInt->new()) destroys it # ($y == 12 in this case)$x = Math::BigInt->new(1200); $y = $class->new($x);ok ($y,1200); ok ($x,1200);################################################################################ zero,inf,one,nan$x = $class->new(2); $x->bzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p});$x = $class->new(2); $x->binf();  ok_undef ($x->{_a}); ok_undef ($x->{_p});$x = $class->new(2); $x->bone();  ok_undef ($x->{_a}); ok_undef ($x->{_p});$x = $class->new(2); $x->bnan();  ok_undef ($x->{_a}); ok_undef ($x->{_p});        1; # all done################################################################################ Perl 5.005 does not like ok ($x,undef)sub ok_undef  {  my $x = shift;  ok (1,1) and return if !defined $x;  ok ($x,'undef');  }__DATA__&digit123:2:11234:0:41234:1:31234:2:21234:3:11234:-1:11234:-2:21234:-3:31234:-4:40:0:00:1:0&bmodinv# format: number:modulus:result# bmodinv Data errorsabc:abc:NaNabc:5:NaN5:abc:NaN# bmodinv Expected Results from normal use1:5:13:5:2-2:5:28:5033:44041234567891:13:6-1234567891:13:7324958749843759385732954874325984357439658735983745:2348249874968739:1741662881064902## bmodinv Error cases / useless use of function3:-5:NaNinf:5:NaN5:inf:NaN-inf:5:NaN5:-inf:NaN&as_number144/7:2012/1:12-12/1:-12-12/3:-4NaN:NaN+inf:inf-inf:-inf&as_int144/7:2012/1:12-12/1:-12-12/3:-4NaN:NaN+inf:inf-inf:-inf&bmodpow# format: number:exponent:modulus:result# bmodpow Data errorsabc:abc:abc:NaN5:abc:abc:NaNabc:5:abc:NaNabc:abc:5:NaN5:5:abc:NaN5:abc:5:NaNabc:5:5:NaN# bmodpow Expected results0:0:2:11:0:2:10:0:1:08:7:5032:38408:-1:5033:440498436739867439843769485798542749827593285729587325:43698764986460981048259837659386739857456983759328457:6943857329857295827698367:3104744730915914415259518# bmodpow Error cases8:8:-5:NaN8:-1:16:NaNinf:5:13:NaN5:inf:13:NaN&bmodNaN:1:NaN1:NaN:NaN1:1:02:2:012:6:07/4:4/14:1/287/4:4/16:0-7/4:4/16:0-7/4:-4/16:07/4:-4/16:07/4:4/32:0-7/4:4/32:0-7/4:-4/32:07/4:-4/32:07/4:4/28:1/28-7/4:4/28:-1/287/4:-4/28:1/28-7/4:-4/28:-1/28&fsqrt1:10:0NaN:NaN+inf:inf-inf:NaN144:12# sqrt(144) / sqrt(4) = 12/2 = 6/1144/4:625/16:5/4-3:NaN&flogNaN:NaN0:NaN-2:NaN&blogNaN:NaN:NaN0:NaN:NaNNaN:0:NaNNaN:1:NaN1:NaN:NaN0:2:NaN0:-2:NaN3:-2:NaN&finf1:+:inf2:-:-inf3:abc:inf&numify0:0+1:11234:12343/4:0.755/2:2.53/2:1.55/4:1.25NaN:NaN+inf:inf-inf:-inf&fnanabc:NaN2:NaN-2:NaN0:NaN&fone2:+:1-2:-:-1-2:+:12:-:-10::1-2::1abc::12:abc:1&fsstr+inf:inf-inf:-infabcfsstr:NaN1:1/13/1:3/10.1:1/10&bnorm1:1-0:0bnormNaN:NaN+inf:inf-inf:-infinf/inf:NaN5/inf:05/-inf:0inf/5:inf-inf/5:-infinf/-5:-inf-inf/-5:inf123:123-123.4567:-1234567/10000# invalid inputs1__2:NaN1E1__2:NaN11__2E2:NaN#1.E3:NaN.2E-3.:NaN#1e3e4:NaN.2E2:20inf:inf+inf:inf-inf:-inf+infinity:NaN+-inf:NaNabc:NaN   1 a:NaN1bcd2:NaN11111b:NaN+1z:NaN-1z:NaN0:0+0:0+00:0+0_0_0:0000000_0000000_00000:0-0:0-0000:0+1:1+01:1+001:1+00000100000:100000+00000800/00000010:80-00000800/00000010:-80+00000800/-00000010:-80-00000800/-00000010:80123456789:123456789-1:-1-01:-1-001:-1-123456789:-123456789-00000100000:-100000123.456a:NaN123.456:15432/1250.01:1/100.002:1/500+.2:1/5-0.0003:-3/10000-.0000000004:-1/2500000000123456E2:12345600123456E-2:30864/25-123456E2:-12345600-123456E-2:-30864/251e1:102e-11:1/5000000000012/10:6/50.1/0.1:1100/0.1:10000.1/10:1/1001 / 3:1/31/ 3:1/31 /3:1/3&fnegfnegNaN:NaN+inf:-inf-inf:inf+0:0+1:-1-1:1+123456789:-123456789-123456789:123456789+123.456789:-123456789/1000000-123456.789:123456789/1000123/7:-123/7-123/7:123/7123/-7:123/7&fabsfabsNaN:NaN+inf:inf-inf:inf+0:0+1:1-1:1+123456789:123456789-123456789:123456789+123.456789:123456789/1000000-123456.789:123456789/1000&baddabc:abc:NaNabc:+0:NaN+0:abc:NaN+inf:-inf:NaN-inf:+inf:NaN+inf:+inf:inf-inf:-inf:-infbaddNaN:+inf:NaNbaddNaN:+inf:NaN+inf:baddNaN:NaN-inf:baddNaN:NaN+0:+0:0+1:+0:1+0:+1:1+1:+1:2-1:+0:-1+0:-1:-1-1:-1:-2-1:+1:0+1:-1:0+9:+1:10+99:+1:100+999:+1:1000+9999:+1:10000+99999:+1:100000+999999:+1:1000000+9999999:+1:10000000+99999999:+1:100000000+999999999:+1:1000000000+9999999999:+1:10000000000+99999999999:+1:100000000000+10:-1:9+100:-1:99+1000:-1:999+10000:-1:9999+100000:-1:99999+1000000:-1:999999+10000000:-1:9999999+100000000:-1:99999999+1000000000:-1:999999999+10000000000:-1:9999999999+123456789:+987654321:1111111110-123456789:+987654321:864197532-123456789:-987654321:-1111111110+123456789:-987654321:-8641975321/3:1/3:2/32/3:-1/3:1/3&bsubabc:abc:NaNabc:+0:NaN+0:abc:NaN+inf:-inf:inf-inf:+inf:-inf+inf:+inf:NaN-inf:-inf:NaNbaddNaN:+inf:NaNbaddNaN:+inf:NaN+inf:baddNaN:NaN-inf:baddNaN:NaN+0:+0:0+1:+0:1+0:+1:-1+1:+1:0-1:+0:-1+0:-1:1-1:-1:0-1:+1:-2+1:-1:2+9:+1:8+99:+1:98+999:+1:998+9999:+1:9998+99999:+1:99998+999999:+1:999998+9999999:+1:9999998+99999999:+1:99999998+999999999:+1:999999998+9999999999:+1:9999999998+99999999999:+1:99999999998+10:-1:11+100:-1:101+1000:-1:1001+10000:-1:10001+100000:-1:100001+1000000:-1:1000001+10000000:-1:10000001+100000000:-1:100000001+1000000000:-1:1000000001+10000000000:-1:10000000001+123456789:+987654321:-864197532-123456789:+987654321:-1111111110-123456789:-987654321:864197532+123456789:-987654321:11111111102/3:1/3:1/37/27:3/54:11/54-2/3:+2/3:-4/3-2/3:-2/3:00:-123:1230:123:-123&bmulabc:abc:NaNabc:+0:NaN+0:abc:NaN+inf:NaNmul:NaN+inf:NaNmul:NaNNaNmul:+inf:NaNNaNmul:-inf:NaN+inf:+inf:inf+inf:-inf:-inf+inf:-inf:-inf+inf:+inf:inf+inf:123.34:inf+inf:-123.34:-inf-inf:123.34:-inf-inf:-123.34:inf123.34:+inf:inf-123.34:+inf:-inf123.34:-inf:-inf-123.34:-inf:inf+0:+0:0+0:+1:0+1:+0:0+0:-1:0-1:+0:0+123456789123456789:+0:0+0:+123456789123456789:0-1:-1:1-1:+1:-1+1:-1:-1+1:+1:1+2:+3:6-2:+3:-6+2:-3:-6-2:-3:6+111:+111:12321+10101:+10101:102030201+1001001:+1001001:1002003002001+100010001:+100010001:10002000300020001+10000100001:+10000100001:100002000030000200001+11111111111:+9:99999999999+22222222222:+9:199999999998+33333333333:+9:299999999997+44444444444:+9:399999999996+55555555555:+9:499999999995+66666666666:+9:599999999994+77777777777:+9:699999999993+88888888888:+9:799999999992+99999999999:+9:8999999999916:120:72010:10000:1000001/4:1/3:1/12&bdiv$div_scale = 40; $round_mode = 'even'abc:abc:NaNabc:+1:abc:NaN+1:abc:NaN-1:abc:NaN0:abc:NaN+0:+0:NaN+0:+1:0+1:+0:inf+3214:+0:inf+0:-1:0-1:+0:-inf-3214:+0:-inf+1:+1:1-1:-1:1+1:-1:-1-1:+1:-1+1:+2:1/2+2:+1:2123:+inf:0123:-inf:0+10:+5:2+100:+4:25+1000:+8:125+10000:+16:625+10000:-16:-625+999999999999:+9:111111111111+999999999999:+99:10101010101+999999999999:+999:1001001001+999999999999:+9999:100010001+999999999999999:+99999:10000100001+1000000000:+9:1000000000/9+2000000000:+9:2000000000/9+3000000000:+9:1000000000/3+4000000000:+9:4000000000/9+5000000000:+9:5000000000/9+6000000000:+9:2000000000/3+7000000000:+9:7000000000/9+8000000000:+9:8000000000/9+9000000000:+9:1000000000+35500000:+113:35500000/113+71000000:+226:35500000/113+106500000:+339:35500000/113+1000000000:+3:1000000000/32:25.024996000799840031993601279744051189762:1000000000000000000000000000000000000000/12512498000399920015996800639872025594881123456:1:1234561/4:1/3:3/4# reset scale for further tests$div_scale = 40&is_nan123:0abc:1NaN:1-123:0&is_inf+inf::1-inf::1abc::01::0NaN::0-1::0+inf:-:0+inf:+:1-inf:-:1-inf:+:0# it must be exactly /^[+-]inf$/+infinity::0-infinity::0&is_oddabc:00:0-1:1-3:11:13:11000001:11000002:0+inf:0-inf:0123.45:0-123.45:02:0&is_intNaNis_int:00:11:12:1-2:1-1:1-inf:0+inf:0123.4567:0-0.1:0-0.002:01/3:03/1:1&is_evenabc:00:1-1:0-3:01:03:01000001:01000002:12:1+inf:0-inf:0123.456:0-123.456:00.01:0-0.01:0120:11200:1-1200:1&is_pos0:01:1-1:0-123:0NaN:0-inf:0+inf:1&is_positive0:01:1-1:0-123:0NaN:0-inf:0+inf:1&is_neg0:01:0-1:1-123:1NaN:0-inf:1+inf:0&is_negative0:01:0-1:1-123:1NaN:0-inf:1+inf:0&parts0:0 11:1 1123:123 1-123:-123 1-1200:-1200 15/7:5 7-5/7:-5 7NaNparts:NaN NaN+inf:inf inf-inf:-inf inf&length123:3-123:30:11:112345678901234567890:20&is_zeroNaNzero:0+inf:0-inf:00:1-1:01:00/3:11/3:0-0/3:15/inf:1&is_oneNaNone:0+inf:0-inf:00:02:01:1-1:0-2:01/3:0100/100:10.1/0.1:15/inf:0&ffloor0:0abc:NaN+inf:inf-inf:-inf1:1-51:-51-51.2:-5212.2:123/7:06/7:07/7:18/7:113/7:114/7:215/7:2-3/7:-1-6/7:-1-7/1:-7-8/7:-2-13/7:-2-14/7:-2-15/7:-3&fceil0:0abc:NaN+inf:inf-inf:-inf1:1-51:-51-51.2:-5112.2:133/7:16/7:18/7:213/7:214/7:215/7:3-3/7:0-6/7:0-8/7:-1-13/7:-1-14/7:-2-15/7:-2&ffacNaN:NaN1:1-1:NaN&bpow# bpow test for overload of **2:2:43:3:27&bacmp+0:-0:0+0:+1:-1-1:+1:0+1:-1:0-1:+2:-1+2:-1:1-123456789:+987654321:-1+123456789:-987654321:-1+987654321:+123456789:1-987654321:+123456789:1-123:+4567889:-1# NaNsacmpNaN:123:123:acmpNaN:acmpNaN:acmpNaN:# infinity+inf:+inf:0-inf:-inf:0+inf:-inf:0-inf:+inf:0+inf:123:1-inf:123:1+inf:-123:1-inf:-123:1+inf:1/23:1-inf:1/23:1+inf:-1/23:1-inf:-1/23:1+inf:12/3:1-inf:12/3:1+inf:-12/3:1-inf:-12/3:1123:inf:-1-123:inf:-1123:-inf:-1-123:-inf:-11/23:inf:-1-1/23:inf:-11/23:-inf:-1-1/23:-inf:-112/3:inf:-1-12/3:inf:-112/3:-inf:-1-12/3:-inf:-1# return undef+inf:NaN:NaN:inf:-inf:NaN:NaN:-inf:1/3:2/3:-12/3:1/3:12/3:2/3:0&fpow2/1:3/1:83/1:3/1:275/2:3/1:125/8-2/1:3/1:-8-3/1:3/1:-27-5/2:3/1:-125/8-2/1:4/1:16-3/1:4/1:81-5/2:4/1:625/16-5/2:-4/1:16/6251/5:-3:125-1/5:-3:-125&numeratorNaN:NaNinf:inf-inf:-inf3/7:3-3/7:-30:01:15/-3:-5&denominatorNaN:NaNinf:1-inf:13/7:70:11/1:1-1/1:1-3/7:74/-5:5&finc3/2:5/2-15/6:-3/2NaN:NaN-1/3:2/3-2/7:5/7&fdec15/6:3/2-3/2:-5/21/3:-2/32/7:-5/7NaN:NaN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -