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

📄 sprintf.t

📁 UNIX下perl实现代码
💻 T
字号:
#!./perl# Tests sprintf, excluding handling of 64-bit integers or long# doubles (if supported), of machine-specific short and long# integers, machine-specific floating point exceptions (infinity,# not-a-number ...), of the effects of locale, and of features# specific to multi-byte characters (under use utf8 and such).BEGIN {    chdir 't' if -d 't';    @INC = '../lib';}   use warnings;while (<DATA>) {    s/^\s*>//; s/<\s*$//;    push @tests, [split(/<\s*>/, $_, 4)]; }print '1..', scalar @tests, "\n";$SIG{__WARN__} = sub {    if ($_[0] =~ /^Invalid conversion/) {	$w = ' INVALID'    } else {	warn @_;    }};for ($i = 1; @tests; $i++) {    ($template, $data, $result, $comment) = @{shift @tests};    $evalData = eval $data;    $w = undef;    $x = sprintf(">$template<",                 defined @$evalData ? @$evalData : $evalData);    substr($x, -1, 0) = $w if $w;    # $x may have 3 exponent digits, not 2    my $y = $x;    if ($y =~ s/([Ee][-+])0(\d)/$1$2/) {        # if result is left-adjusted, append extra space        if ($template =~ /%\+?\-/ and $result =~ / $/) {	    $y =~ s/<$/ </;	}        # if result is zero-filled, add extra zero	elsif ($template =~ /%\+?0/ and $result =~ /^0/) {	    $y =~ s/^>0/>00/;	}        # if result is right-adjusted, prepend extra space	elsif ($result =~ /^ /) {	    $y =~ s/^>/> /;	}    }    if ($x eq ">$result<") {        print "ok $i\n";    }    elsif ($y eq ">$result<")	# Some C libraries always give    {				# three-digit exponent		print("ok $i # >$result< $x three-digit exponent accepted\n");    }	elsif ($result =~ /[-+]\d{3}$/ &&		   # Suppress tests with modulo of exponent >= 100 on platforms		   # which can't handle such magnitudes (or where we can't tell).		   ((!eval {require POSIX}) || # Costly: only do this if we must!			(length(&POSIX::DBL_MAX) - rindex(&POSIX::DBL_MAX, '+')) == 3))	{		print("ok $i # >$template< >$data< >$result<",			  " Suppressed: exponent out of range?\n") 	}    else {	$y = ($x eq $y ? "" : " => $y");	print("not ok $i >$template< >$data< >$result< $x$y",	    $comment ? " # $comment\n" : "\n");    }}# In each of the the following lines, there are three required fields:# printf template, data to be formatted (as a Perl expression), and# expected result of formatting.  An optional fourth field can contain# a comment.  Each field is delimited by a starting '>' and a# finishing '<'; any whitespace outside these start and end marks is# not part of the field.  If formatting requires more than one data# item (for example, if variable field widths are used), the Perl data# expression should return a reference to an array having the requisite# number of elements.  Even so, subterfuge is sometimes required: see# tests for %n and %p.## The following tests are not currently run, for the reasons stated:=pod=begin problematic>%.0f<      >-0.1<        >-0<  >C library bug: no minus on VMS, HP-UX<>%.0f<      >1.5<         >2<   >Standard vague: no rounding rules<>%.0f<      >2.5<         >2<   >Standard vague: no rounding rules<=end problematic=cut# template    data          result__END__>%6. 6s<    >''<          >%6. 6s INVALID< >(See use of $w in code above)<>%6 .6s<    >''<          >%6 .6s INVALID<>%6.6 s<    >''<          >%6.6 s INVALID<>%A<        >''<          >%A INVALID<>%B<        >''<          >%B INVALID<>%C<        >''<          >%C INVALID<>%D<        >0x7fffffff<  >2147483647<     >Synonym for %ld<>%E<        >123456.789<  >1.234568E+05<   >Like %e, but using upper-case "E"<>%F<        >123456.789<  >123456.789000<  >Synonym for %f<>%G<        >1234567.89<  >1.23457E+06<    >Like %g, but using upper-case "E"<>%G<        >1234567e96<  >1.23457E+102<>%G<        >.1234567e-101< >1.23457E-102<>%G<        >12345.6789<  >12345.7<>%H<        >''<          >%H INVALID<>%I<        >''<          >%I INVALID<>%J<        >''<          >%J INVALID<>%K<        >''<          >%K INVALID<>%L<        >''<          >%L INVALID<>%M<        >''<          >%M INVALID<>%N<        >''<          >%N INVALID<>%O<        >2**32-1<     >37777777777<    >Synonum for %lo<>%P<        >''<          >%P INVALID<>%Q<        >''<          >%Q INVALID<>%R<        >''<          >%R INVALID<>%S<        >''<          >%S INVALID<>%T<        >''<          >%T INVALID<>%U<        >2**32-1<     >4294967295<     >Synonum for %lu<>%V<        >''<          >%V INVALID<>%W<        >''<          >%W INVALID<>%X<        >2**32-1<     >FFFFFFFF<       >Like %x, but with u/c letters<>%#X<       >2**32-1<     >0XFFFFFFFF<>%Y<        >''<          >%Y INVALID<>%Z<        >''<          >%Z INVALID<>%a<        >''<          >%a INVALID<>%b<        >2**32-1<     >11111111111111111111111111111111<>%+b<       >2**32-1<     >11111111111111111111111111111111<>%#b<       >2**32-1<     >0b11111111111111111111111111111111<>%34b<      >2**32-1<     >  11111111111111111111111111111111<>%034b<     >2**32-1<     >0011111111111111111111111111111111<>%-34b<     >2**32-1<     >11111111111111111111111111111111  <>%-034b<    >2**32-1<     >11111111111111111111111111111111  <>%c<        >ord('A')<    >A<>%10c<      >ord('A')<    >         A<>%#10c<     >ord('A')<    >         A<     ># modifier: no effect<>%010c<     >ord('A')<    >000000000A<>%10lc<     >ord('A')<    >         A<     >l modifier: no effect<>%10hc<     >ord('A')<    >         A<     >h modifier: no effect<>%10.5c<    >ord('A')<    >         A<     >precision: no effect<>%-10c<     >ord('A')<    >A         <>%d<        >123456.789<  >123456<>%d<        >-123456.789< >-123456<>%d<        >0<           >0<>%+d<       >0<           >+0<>%0d<       >0<           >0<>%.0d<      >0<           ><>%+.0d<     >0<           >+<>%.0d<      >1<           >1<>%d<        >1<           >1<>%+d<       >1<           >+1<>%#3.2d<    >1<           > 01<            ># modifier: no effect<>%3.2d<     >1<           > 01<>%03.2d<    >1<           >001<>%-3.2d<    >1<           >01 <>%-03.2d<   >1<           >01 <            >zero pad + left just.: no effect<>%d<        >-1<          >-1<>%+d<       >-1<          >-1<>%hd<       >1<           >1<              >More extensive testing of<>%ld<       >1<           >1<              >length modifiers would be<>%Vd<       >1<           >1<              >platform-specific<>%vd<       >chr(1)<      >1<>%+vd<      >chr(1)<      >+1<>%#vd<      >chr(1)<      >1<>%vd<       >"\01\02\03"< >1.2.3<>%v.3d<     >"\01\02\03"< >001.002.003<>%v03d<     >"\01\02\03"< >001.002.003<>%v-3d<     >"\01\02\03"< >1  .2  .3  <>%v+-3d<    >"\01\02\03"< >+1 .2  .3  <>%v4.3d<    >"\01\02\03"< > 001. 002. 003<>%v04.3d<   >"\01\02\03"< >0001.0002.0003<>%*v02d<    >['-', "\0\7\14"]< >00-07-12<>%v.*d<     >[3, "\01\02\03"]< >001.002.003<>%v0*d<     >[3, "\01\02\03"]< >001.002.003<>%v-*d<     >[3, "\01\02\03"]< >1  .2  .3  <>%v+-*d<    >[3, "\01\02\03"]< >+1 .2  .3  <>%v*.*d<    >[4, 3, "\01\02\03"]< > 001. 002. 003<>%v0*.*d<   >[4, 3, "\01\02\03"]< >0001.0002.0003<>%*v0*d<    >['-', 2, "\0\7\13"]< >00-07-11<>%e<        >1234.875<    >1.234875e+03<>%e<        >0.000012345< >1.234500e-05<>%e<        >1234567E96<  >1.234567e+102<>%e<        >0<           >0.000000e+00<>%e<        >.1234567E-101< >1.234567e-102<>%+e<       >1234.875<    >+1.234875e+03<>%#e<       >1234.875<    >1.234875e+03<>%e<        >-1234.875<   >-1.234875e+03<>%+e<       >-1234.875<   >-1.234875e+03<>%#e<       >-1234.875<   >-1.234875e+03<>%.0e<      >1234.875<    >1e+03<>%#.0e<     >1234.875<    >1.e+03<>%.*e<      >[0, 1234.875]< >1e+03<>%.1e<      >1234.875<    >1.2e+03<>%-12.4e<   >1234.875<    >1.2349e+03  <>%12.4e<    >1234.875<    >  1.2349e+03<>%+-12.4e<  >1234.875<    >+1.2349e+03 <>%+12.4e<   >1234.875<    > +1.2349e+03<>%+-12.4e<  >-1234.875<   >-1.2349e+03 <>%+12.4e<   >-1234.875<   > -1.2349e+03<>%f<        >1234.875<    >1234.875000<>%+f<       >1234.875<    >+1234.875000<>%#f<       >1234.875<    >1234.875000<>%f<        >-1234.875<   >-1234.875000<>%+f<       >-1234.875<   >-1234.875000<>%#f<       >-1234.875<   >-1234.875000<>%6f<       >1234.875<    >1234.875000<>%*f<       >[6, 1234.875]< >1234.875000<>%.0f<      >1234.875<    >1235<>%.1f<      >1234.875<    >1234.9<>%-8.1f<    >1234.875<    >1234.9  <>%8.1f<     >1234.875<    >  1234.9<>%+-8.1f<   >1234.875<    >+1234.9 <>%+8.1f<    >1234.875<    > +1234.9<>%+-8.1f<   >-1234.875<   >-1234.9 <>%+8.1f<    >-1234.875<   > -1234.9<>%*.*f<     >[5, 2, 12.3456]< >12.35<>%f<        >0<           >0.000000<>%.0f<      >0<           >0<>%.0f<      >2**38<       >274877906944<   >Should have exact int'l rep'n<>%.0f<      >0.1<         >0<>%.0f<      >0.6<         >1<              >Known to fail with sfio and (irix|nonstop-ux|powerux)<>%.0f<      >-0.6<        >-1<             >Known to fail with sfio and (irix|nonstop-ux|powerux)<>%.0f<      >1<           >1<>%#.0f<     >1<           >1.<>%g<        >12345.6789<  >12345.7<>%+g<       >12345.6789<  >+12345.7<>%#g<       >12345.6789<  >12345.7<>%.0g<      >12345.6789<  >1e+04<>%#.0g<     >12345.6789<  >1.e+04<>%.2g<      >12345.6789<  >1.2e+04<>%.*g<      >[2, 12345.6789]< >1.2e+04<>%.9g<      >12345.6789<  >12345.6789<>%12.9g<    >12345.6789<  >  12345.6789<>%012.9g<   >12345.6789<  >0012345.6789<>%-12.9g<   >12345.6789<  >12345.6789  <>%*.*g<     >[-12, 9, 12345.6789]< >12345.6789  <>%-012.9g<  >12345.6789<  >12345.6789  <>%g<        >-12345.6789< >-12345.7<>%+g<       >-12345.6789< >-12345.7<>%g<        >1234567.89<  >1.23457e+06<>%+g<       >1234567.89<  >+1.23457e+06<>%#g<       >1234567.89<  >1.23457e+06<>%g<        >-1234567.89< >-1.23457e+06<>%+g<       >-1234567.89< >-1.23457e+06<>%#g<       >-1234567.89< >-1.23457e+06<>%g<        >0.00012345<  >0.00012345<>%g<        >0.000012345< >1.2345e-05<>%g<        >1234567E96<  >1.23457e+102<>%g<        >.1234567E-101< >1.23457e-102<>%g<        >0<           >0<>%13g<      >1234567.89<  >  1.23457e+06<>%+13g<     >1234567.89<  > +1.23457e+06<>%013g<      >1234567.89< >001.23457e+06<>%-13g<      >1234567.89< >1.23457e+06  <>%h<        >''<          >%h INVALID<>%i<        >123456.789<  >123456<         >Synonym for %d<>%j<        >''<          >%j INVALID<>%k<        >''<          >%k INVALID<>%l<        >''<          >%l INVALID<>%m<        >''<          >%m INVALID<>%s< >sprintf('%%n%n %d', $n, $n)< >%n 2< >Slight sneakiness to test %n<>%o<        >2**32-1<     >37777777777<>%+o<       >2**32-1<     >37777777777<>%#o<       >2**32-1<     >037777777777<>%d< >$p=sprintf('%p',$p);$p=~/^[0-9a-f]+$/< >1< >Coarse hack: hex from %p?<>%#p<       >''<          >%#p INVALID<>%q<        >''<          >%q INVALID<>%r<        >''<          >%r INVALID<>%s<        >'string'<    >string<>%10s<      >'string'<    >    string<>%+10s<     >'string'<    >    string<>%#10s<     >'string'<    >    string<>%010s<     >'string'<    >0000string<>%0*s<      >[10, 'string']< >0000string<>%-10s<     >'string'<    >string    <>%3s<       >'string'<    >string<>%.3s<      >'string'<    >str<>%.*s<      >[3, 'string']< >str<>%t<        >''<          >%t INVALID<>%u<        >2**32-1<     >4294967295<>%+u<       >2**32-1<     >4294967295<>%#u<       >2**32-1<     >4294967295<>%12u<      >2**32-1<     >  4294967295<>%012u<     >2**32-1<     >004294967295<>%-12u<     >2**32-1<     >4294967295  <>%-012u<    >2**32-1<     >4294967295  <>%v<        >''<          >%v INVALID<>%w<        >''<          >%w INVALID<>%x<        >2**32-1<     >ffffffff<>%+x<       >2**32-1<     >ffffffff<>%#x<       >2**32-1<     >0xffffffff<>%10x<      >2**32-1<     >  ffffffff<>%010x<     >2**32-1<     >00ffffffff<>%-10x<     >2**32-1<     >ffffffff  <>%-010x<    >2**32-1<     >ffffffff  <>%0-10x<    >2**32-1<     >ffffffff  <>%0*x<      >[-10, ,2**32-1]< >ffffffff  <>%y<        >''<          >%y INVALID<>%z<        >''<          >%z INVALID<

⌨️ 快捷键说明

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