📄 calling.t
字号:
#!/usr/bin/perl -w# test calling conventions, and :constant overloadinguse strict;use Test;BEGIN { $| = 1; # to locate the testing files my $location = $0; $location =~ s/calling.t//i; if ($ENV{PERL_CORE}) { # testing with the core distribution @INC = qw(../lib lib); } else { unshift @INC, '../lib'; } if (-d 't') { chdir 't'; require File::Spec; unshift @INC, File::Spec->catdir(File::Spec->updir, $location); } else { unshift @INC, $location; } print "# INC = @INC\n"; my $tests = 160; plan tests => $tests; if ($] < 5.006) { for (1..$tests) { skip (1,'Not supported on older Perls'); } exit; } }package Math::BigInt::Test;use Math::BigInt;use vars qw/@ISA/;@ISA = qw/Math::BigInt/; # child of MBIuse overload;package Math::BigFloat::Test;use Math::BigFloat;use vars qw/@ISA/;@ISA = qw/Math::BigFloat/; # child of MBIuse overload;package main;use Math::BigInt try => 'Calc';use Math::BigFloat;my ($x,$y,$z,$u);my $version = '1.76'; # adjust manually to match latest release################################################################################ check whether op's accept normal strings, even when inherited by subclasses# do one positive and one negative test to avoid false positives by "accident"my ($func,@args,$ans,$rc,$class,$try);while (<DATA>) { $_ =~ s/[\n\r]//g; # remove newlines next if /^#/; # skip comments if (s/^&//) { $func = $_; } else { @args = split(/:/,$_,99); $ans = pop @args; foreach $class (qw/ Math::BigInt Math::BigFloat Math::BigInt::Test Math::BigFloat::Test/) { $try = "'$args[0]'"; # quote it $try = $args[0] if $args[0] =~ /'/; # already quoted $try = '' if $args[0] eq ''; # undef, no argument $try = "$class\->$func($try);"; $rc = eval $try; print "# Tried: '$try'\n" if !ok ($rc, $ans); } } }$class = 'Math::BigInt';# XXX TODO this test does not work/fail.# test whether use Math::BigInt qw/version/ works#$try = "use $class ($version.'1');";#$try .= ' $x = $class->new(123); $x = "$x";';#eval $try;#ok_undef ( $x ); # should result in error!# test whether fallback to calc works$try = "use $class ($version,'try','foo, bar , ');";$try .= "$class\->config()->{lib};";$ans = eval $try;ok ( $ans =~ /^Math::BigInt::(Fast)?Calc\z/, 1);# test whether constant works or not, also test for qw($version)# bgcd() is present in subclass, too$try = "use Math::BigInt ($version,'bgcd',':constant');";$try .= ' $x = 2**150; bgcd($x); $x = "$x";';$ans = eval $try;ok ( $ans, "1427247692705959881058285969449495136382746624");# test wether Math::BigInt::Scalar via use works (w/ dff. spellings of calc)$try = "use $class ($version,'lib','Scalar');";$try .= ' $x = 2**10; $x = "$x";';$ans = eval $try; ok ( $ans, "1024");$try = "use $class ($version,'lib','$class\::Scalar');";$try .= ' $x = 2**10; $x = "$x";';$ans = eval $try; ok ( $ans, "1024");# all done__END__&is_zero1:00:1&is_one1:10:0&is_positive1:1-1:0&is_negative1:0-1:1&is_nanabc:11:0&is_infinf:10:0&bstr5:510:10-10:-10abc:NaN'+inf':inf'-inf':-inf&bsstr1:1e+00:0e+12:2e+0200:2e+2-5:-5e+0-100:-1e+2abc:NaN'+inf':inf&babs-1:11:1&bnot-2:11:-2&bzero:0&bnan:NaNabc:NaN&bone:1'+':1'-':-1&binf:inf'+':inf'-':-inf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -