dslinux/user/perl/t/base cond.t if.t lex.t num.t pat.t rs.t term.t
cayenne
dslinux_cayenne at user.in-berlin.de
Mon Dec 4 18:01:48 CET 2006
Update of /cvsroot/dslinux/dslinux/user/perl/t/base
In directory antilope:/tmp/cvs-serv17422/t/base
Added Files:
cond.t if.t lex.t num.t pat.t rs.t term.t
Log Message:
Adding fresh perl source to HEAD to branch from
--- NEW FILE: pat.t ---
#!./perl
# $RCSfile: pat.t,v $$Revision: 1.2 $$Date: 2006-12-04 17:01:45 $
print "1..2\n";
# first test to see if we can run the tests.
$_ = 'test';
if (/^test/) { print "ok 1\n"; } else { print "not ok 1\n";}
if (/^foo/) { print "not ok 2\n"; } else { print "ok 2\n";}
--- NEW FILE: term.t ---
#!./perl
# $RCSfile: term.t,v $$Revision: 1.2 $$Date: 2006-12-04 17:01:46 $
BEGIN {
chdir 't' if -d 't';
}
print "1..7\n";
# check "" interpretation
$x = "\n";
# 10 is ASCII/Iso Latin, 13 is Mac OS, 21 is EBCDIC.
if ($x eq chr(10)) { print "ok 1\n";}
elsif ($x eq chr(13)) { print "ok 1 # Mac OS\n"; }
elsif ($x eq chr(21)) { print "ok 1 # EBCDIC\n"; }
else {print "not ok 1\n";}
# check `` processing
$x = `$^X -le "print 'hi there'"`;
if ($x eq "hi there\n") {print "ok 2\n";} else {print "not ok 2\n";}
# check $#array
$x[0] = 'foo';
$x[1] = 'foo';
$tmp = $#x;
print "#3\t:$tmp: == :1:\n";
if ($#x == '1') {print "ok 3\n";} else {print "not ok 3\n";}
# check numeric literal
$x = 1;
if ($x == '1') {print "ok 4\n";} else {print "not ok 4\n";}
$x = '1E2';
if (($x | 1) == 101) {print "ok 5\n";} else {print "not ok 5\n";}
# check <> pseudoliteral
if ($^O eq 'MacOS') {
open(try,"Dev:Null") || (die "Can't open /dev/null.");
} else {
open(try, "/dev/null") || open(try,"nla0:") || (die "Can't open /dev/null.");
}
if (<try> eq '') {
print "ok 6\n";
}
else {
print "not ok 6\n";
die "/dev/null IS NOT A CHARACTER SPECIAL FILE!!!!\n" unless -c '/dev/null';
}
open(try, "harness") || (die "Can't open harness.");
if (<try> ne '') {print "ok 7\n";} else {print "not ok 7\n";}
--- NEW FILE: cond.t ---
#!./perl
# $RCSfile: cond.t,v $$Revision: 1.2 $$Date: 2006-12-04 17:01:45 $
# make sure conditional operators work
print "1..4\n";
$x = '0';
$x eq $x && (print "ok 1\n");
$x ne $x && (print "not ok 1\n");
$x eq $x || (print "not ok 2\n");
$x ne $x || (print "ok 2\n");
$x == $x && (print "ok 3\n");
$x != $x && (print "not ok 3\n");
$x == $x || (print "not ok 4\n");
$x != $x || (print "ok 4\n");
--- NEW FILE: num.t ---
#!./perl
print "1..50\n";
# First test whether the number stringification works okay.
# (Testing with == would exercize the IV/NV part, not the PV.)
$a = 1; "$a";
print $a eq "1" ? "ok 1\n" : "not ok 1 # $a\n";
$a = -1; "$a";
print $a eq "-1" ? "ok 2\n" : "not ok 2 # $a\n";
$a = 1.; "$a";
print $a eq "1" ? "ok 3\n" : "not ok 3 # $a\n";
$a = -1.; "$a";
print $a eq "-1" ? "ok 4\n" : "not ok 4 # $a\n";
$a = 0.1; "$a";
print $a eq "0.1" ? "ok 5\n" : "not ok 5 # $a\n";
$a = -0.1; "$a";
print $a eq "-0.1" ? "ok 6\n" : "not ok 6 # $a\n";
$a = .1; "$a";
print $a eq "0.1" ? "ok 7\n" : "not ok 7 # $a\n";
$a = -.1; "$a";
print $a eq "-0.1" ? "ok 8\n" : "not ok 8 # $a\n";
$a = 10.01; "$a";
print $a eq "10.01" ? "ok 9\n" : "not ok 9 # $a\n";
$a = 1e3; "$a";
print $a eq "1000" ? "ok 10\n" : "not ok 10 # $a\n";
$a = 10.01e3; "$a";
print $a eq "10010" ? "ok 11\n" : "not ok 11 # $a\n";
$a = 0b100; "$a";
print $a eq "4" ? "ok 12\n" : "not ok 12 # $a\n";
$a = 0100; "$a";
print $a eq "64" ? "ok 13\n" : "not ok 13 # $a\n";
$a = 0x100; "$a";
print $a eq "256" ? "ok 14\n" : "not ok 14 # $a\n";
$a = 1000; "$a";
print $a eq "1000" ? "ok 15\n" : "not ok 15 # $a\n";
# Okay, now test the numerics.
# We may be assuming too much, given the painfully well-known floating
# point sloppiness, but the following are still quite reasonable
# assumptions which if not working would confuse people quite badly.
$a = 1; "$a"; # Keep the stringification as a potential troublemaker.
print $a + 1 == 2 ? "ok 16\n" : "not ok 16 #" . $a + 1 . "\n";
# Don't know how useful printing the stringification of $a + 1 really is.
$a = -1; "$a";
print $a + 1 == 0 ? "ok 17\n" : "not ok 17 #" . $a + 1 . "\n";
$a = 1.; "$a";
print $a + 1 == 2 ? "ok 18\n" : "not ok 18 #" . $a + 1 . "\n";
$a = -1.; "$a";
print $a + 1 == 0 ? "ok 19\n" : "not ok 19 #" . $a + 1 . "\n";
sub ok { # Can't assume too much of floating point numbers.
my ($a, $b, $c) = @_;
abs($a - $b) <= $c;
}
$a = 0.1; "$a";
print ok($a + 1, 1.1, 0.05) ? "ok 20\n" : "not ok 20 #" . $a + 1 . "\n";
$a = -0.1; "$a";
print ok($a + 1, 0.9, 0.05) ? "ok 21\n" : "not ok 21 #" . $a + 1 . "\n";
$a = .1; "$a";
print ok($a + 1, 1.1, 0.005) ? "ok 22\n" : "not ok 22 #" . $a + 1 . "\n";
$a = -.1; "$a";
print ok($a + 1, 0.9, 0.05) ? "ok 23\n" : "not ok 23 #" . $a + 1 . "\n";
$a = 10.01; "$a";
print ok($a + 1, 11.01, 0.005) ? "ok 24\n" : "not ok 24 #" . $a + 1 . "\n";
$a = 1e3; "$a";
print $a + 1 == 1001 ? "ok 25\n" : "not ok 25 #" . $a + 1 . "\n";
$a = 10.01e3; "$a";
print $a + 1 == 10011 ? "ok 26\n" : "not ok 26 #" . $a + 1 . "\n";
$a = 0b100; "$a";
print $a + 1 == 0b101 ? "ok 27\n" : "not ok 27 #" . $a + 1 . "\n";
$a = 0100; "$a";
print $a + 1 == 0101 ? "ok 28\n" : "not ok 28 #" . $a + 1 . "\n";
$a = 0x100; "$a";
print $a + 1 == 0x101 ? "ok 29\n" : "not ok 29 #" . $a + 1 . "\n";
$a = 1000; "$a";
print $a + 1 == 1001 ? "ok 30\n" : "not ok 30 #" . $a + 1 . "\n";
# back to some basic stringify tests
# we expect NV stringification to work according to C sprintf %.*g rules
if ($^O eq 'os2') { # In the long run, fix this. For 5.8.0, deal.
$a = 0.01; "$a";
print $a eq "0.01" || $a eq '1e-02' ? "ok 31\n" : "not ok 31 # $a\n";
$a = 0.001; "$a";
print $a eq "0.001" || $a eq '1e-03' ? "ok 32\n" : "not ok 32 # $a\n";
$a = 0.0001; "$a";
print $a eq "0.0001" || $a eq '1e-04' ? "ok 33\n" : "not ok 33 # $a\n";
} else {
$a = 0.01; "$a";
print $a eq "0.01" ? "ok 31\n" : "not ok 31 # $a\n";
$a = 0.001; "$a";
print $a eq "0.001" ? "ok 32\n" : "not ok 32 # $a\n";
$a = 0.0001; "$a";
print $a eq "0.0001" ? "ok 33\n" : "not ok 33 # $a\n";
}
$a = 0.00009; "$a";
print $a eq "9e-05" || $a eq "9e-005" ? "ok 34\n" : "not ok 34 # $a\n";
$a = 1.1; "$a";
print $a eq "1.1" ? "ok 35\n" : "not ok 35 # $a\n";
$a = 1.01; "$a";
print $a eq "1.01" ? "ok 36\n" : "not ok 36 # $a\n";
$a = 1.001; "$a";
print $a eq "1.001" ? "ok 37\n" : "not ok 37 # $a\n";
$a = 1.0001; "$a";
print $a eq "1.0001" ? "ok 38\n" : "not ok 38 # $a\n";
$a = 1.00001; "$a";
print $a eq "1.00001" ? "ok 39\n" : "not ok 39 # $a\n";
$a = 1.000001; "$a";
print $a eq "1.000001" ? "ok 40\n" : "not ok 40 # $a\n";
$a = 0.; "$a";
print $a eq "0" ? "ok 41\n" : "not ok 41 # $a\n";
$a = 100000.; "$a";
print $a eq "100000" ? "ok 42\n" : "not ok 42 # $a\n";
$a = -100000.; "$a";
print $a eq "-100000" ? "ok 43\n" : "not ok 43 # $a\n";
$a = 123.456; "$a";
print $a eq "123.456" ? "ok 44\n" : "not ok 44 # $a\n";
$a = 1e34; "$a";
unless ($^O eq 'posix-bc')
{ print $a eq "1e+34" || $a eq "1e+034" ? "ok 45\n" : "not ok 45 $a\n"; }
else
{ print "ok 45 # skipped on $^O\n"; }
# see bug #15073
$a = 0.00049999999999999999999999999999999999999;
$b = 0.0005000000000000000104;
print $a <= $b ? "ok 46\n" : "not ok 46\n";
if ($^O eq 'ultrix' || $^O eq 'VMS') {
# Ultrix enters looong nirvana over this. VMS blows up when configured with
# D_FLOAT (but with G_FLOAT or IEEE works fine). The test should probably
# make the number of 0's a function of NV_DIG, but that's not in Config and
# we probably don't want to suck Config into a base test anyway.
print "ok 47\n";
} else {
$a = 0.00000000000000000000000000000000000000000000000000000000000000000001;
print $a > 0 ? "ok 47\n" : "not ok 47\n";
}
$a = 80000.0000000000000000000000000;
print $a == 80000.0 ? "ok 48\n" : "not ok 48\n";
$a = 1.0000000000000000000000000000000000000000000000000000000000000000000e1;
print $a == 10.0 ? "ok 49\n" : "not ok 49\n";
# From Math/Trig - number has to be long enough to exceed at least DBL_DIG
$a = 57.295779513082320876798154814169;
print ok($a*10,572.95779513082320876798154814169,1e-10) ? "ok 50\n" :
"not ok 50 # $a\n";
--- NEW FILE: lex.t ---
#!./perl
print "1..55\n";
$x = 'x';
print "#1 :$x: eq :x:\n";
if ($x eq 'x') {print "ok 1\n";} else {print "not ok 1\n";}
$x = $#; # this is the register $#
if ($x eq '') {print "ok 2\n";} else {print "not ok 2\n";}
$x = $#x;
if ($x eq '-1') {print "ok 3\n";} else {print "not ok 3\n";}
$x = '\\'; # ';
if (length($x) == 1) {print "ok 4\n";} else {print "not ok 4\n";}
eval 'while (0) {
print "foo\n";
}
/^/ && (print "ok 5\n");
';
eval '$foo{1} / 1;';
if (!$@) {print "ok 6\n";} else {print "not ok 6 $@\n";}
eval '$foo = 123+123.4+123e4+123.4E5+123.4e+5+.12;';
$foo = int($foo * 100 + .5);
if ($foo eq 2591024652) {print "ok 7\n";} else {print "not ok 7 :$foo:\n";}
print <<'EOF';
ok 8
EOF
$foo = 'ok 9';
print <<EOF;
$foo
EOF
eval <<\EOE, print $@;
print <<'EOF';
ok 10
EOF
$foo = 'ok 11';
print <<EOF;
$foo
EOF
EOE
print <<'EOS' . <<\EOF;
ok 12 - make sure single quotes are honored \nnot ok
EOS
ok 13
EOF
print qq/ok 14\n/;
print qq(ok 15\n);
print qq
[ok 16\n]
;
print q<ok 17
>;
print <<; # Yow!
ok 18
# previous line intentionally left blank.
print <<E1 eq "foo\n\n" ? "ok 19\n" : "not ok 19\n";
@{[ <<E2 ]}
foo
E2
E1
print <<E1 eq "foo\n\n" ? "ok 20\n" : "not ok 20\n";
@{[
<<E2
foo
E2
]}
E1
$foo = FOO;
$bar = BAR;
$foo{$bar} = BAZ;
$ary[0] = ABC;
print "$foo{$bar}" eq "BAZ" ? "ok 21\n" : "not ok 21\n";
print "${foo}{$bar}" eq "FOO{BAR}" ? "ok 22\n" : "not ok 22\n";
print "${foo{$bar}}" eq "BAZ" ? "ok 23\n" : "not ok 23\n";
print "FOO:" =~ /$foo[:]/ ? "ok 24\n" : "not ok 24\n";
print "ABC" =~ /^$ary[$A]$/ ? "ok 25\n" : "not ok 25\n";
print "FOOZ" =~ /^$foo[$A-Z]$/ ? "ok 26\n" : "not ok 26\n";
# MJD 19980425
($X, @X) = qw(a b c d);
print "d" =~ /^$X[-1]$/ ? "ok 27\n" : "not ok 27\n";
print "a1" !~ /^$X[-1]$/ ? "ok 28\n" : "not ok 28\n";
print (((q{{\{\(}} . q{{\)\}}}) eq '{{\(}{\)}}') ? "ok 29\n" : "not ok 29\n");
$foo = "not ok 30\n";
$foo =~ s/^not /substr(<<EOF, 0, 0)/e;
Ignored
EOF
print $foo;
# Tests for new extended control-character variables
# MJD 19990227
{ my $CX = "\cX";
my $CXY ="\cXY";
$ {$CX} = 17;
$ {$CXY} = 23;
if ($ {^XY} != 23) { print "not " }
print "ok 31\n";
# Does the syntax where we use the literal control character still work?
if (eval "\$ {\cX}" != 17 or $@) { print "not " }
print "ok 32\n";
eval "\$\cQ = 24"; # Literal control character
if ($@ or ${"\cQ"} != 24) { print "not " }
print "ok 33\n";
if ($^Q != 24) { print "not " } # Control character escape sequence
print "ok 34\n";
# Does the old UNBRACED syntax still do what it used to?
if ("$^XY" ne "17Y") { print "not " }
print "ok 35\n";
sub XX () { 6 }
$ {"\cQ\cXX"} = 119;
$^Q = 5; # This should be an unused ^Var.
$N = 5;
# The second caret here should be interpreted as an xor
if (($^Q^XX) != 3) { print "not " }
print "ok 36\n";
# if (($N ^ XX()) != 3) { print "not " }
# print "ok 32\n";
# These next two tests are trying to make sure that
# $^FOO is always global; it doesn't make sense to `my' it.
#
eval 'my $^X;';
print "not " unless index ($@, 'Can\'t use global $^X in "my"') > -1;
print "ok 37\n";
# print "($@)\n" if $@;
eval 'my $ {^XYZ};';
print "not " unless index ($@, 'Can\'t use global $^XYZ in "my"') > -1;
print "ok 38\n";
# print "($@)\n" if $@;
# Now let's make sure that caret variables are all forced into the main package.
package Someother;
$^Q = 'Someother';
$ {^Quixote} = 'Someother 2';
$ {^M} = 'Someother 3';
package main;
print "not " unless $^Q eq 'Someother';
print "ok 39\n";
print "not " unless $ {^Quixote} eq 'Someother 2';
print "ok 40\n";
print "not " unless $ {^M} eq 'Someother 3';
print "ok 41\n";
}
# see if eval '', s///e, and heredocs mix
sub T {
my ($where, $num) = @_;
my ($p,$f,$l) = caller;
print "# $p:$f:$l vs /$where/\nnot " unless "$p:$f:$l" =~ /$where/;
print "ok $num\n";
}
my $test = 42;
{
# line 42 "plink"
local $_ = "not ok ";
eval q{
s/^not /<<EOT/e and T '^main:\(eval \d+\):2$', $test++;
# fuggedaboudit
EOT
print $_, $test++, "\n";
T('^main:\(eval \d+\):6$', $test++);
# line 1 "plunk"
T('^main:plunk:1$', $test++);
};
print "# $@\nnot ok $test\n" if $@;
T '^main:plink:53$', $test++;
}
# tests 47--51 start here
# tests for new array interpolation semantics:
# arrays now *always* interpolate into "..." strings.
# 20000522 MJD (mjd at plover.com)
{
my $test = 47;
eval(q(">@nosuch<" eq "><")) || print "# $@", "not ";
print "ok $test\n";
++$test;
# Look at this! This is going to be a common error in the future:
eval(q("fred at example.com" eq "fred.com")) || print "# $@", "not ";
print "ok $test\n";
++$test;
# Let's make sure that normal array interpolation still works right
# For some reason, this appears not to be tested anywhere else.
my @a = (1,2,3);
print +((">@a<" eq ">1 2 3<") ? '' : 'not '), "ok $test\n";
++$test;
# Ditto.
eval(q{@nosuch = ('a', 'b', 'c'); ">@nosuch<" eq ">a b c<"})
|| print "# $@", "not ";
print "ok $test\n";
++$test;
# This isn't actually a lex test, but it's testing the same feature
sub makearray {
my @array = ('fish', 'dog', 'carrot');
*R::crackers = \@array;
}
eval(q{makearray(); ">@R::crackers<" eq ">fish dog carrot<"})
|| print "# $@", "not ";
print "ok $test\n";
++$test;
}
# Tests 52-54
# => should only quote foo::bar if it isn't a real sub. AMS, 20010621
sub xyz::foo { "bar" }
my %str = (
foo => 1,
xyz::foo => 1,
xyz::bar => 1,
);
my $test = 52;
print ((exists $str{foo} ? "" : "not ")."ok $test\n"); ++$test;
print ((exists $str{bar} ? "" : "not ")."ok $test\n"); ++$test;
print ((exists $str{xyz::bar} ? "" : "not ")."ok $test\n"); ++$test;
sub foo::::::bar { print "ok $test\n"; $test++ }
foo::::::bar;
--- NEW FILE: rs.t ---
#!./perl
# Test $!
print "1..16\n";
$teststring = "1\n12\n123\n1234\n1234\n12345\n\n123456\n1234567\n";
# Create our test datafile
1 while unlink 'foo'; # in case junk left around
rmdir 'foo';
open TESTFILE, ">./foo" or die "error $! $^E opening";
binmode TESTFILE;
print TESTFILE $teststring;
close TESTFILE or die "error $! $^E closing";
open TESTFILE, "<./foo";
binmode TESTFILE;
# Check the default $/
$bar = <TESTFILE>;
if ($bar eq "1\n") {print "ok 1\n";} else {print "not ok 1\n";}
# explicitly set to \n
$/ = "\n";
$bar = <TESTFILE>;
if ($bar eq "12\n") {print "ok 2\n";} else {print "not ok 2\n";}
# Try a non line terminator
$/ = 3;
$bar = <TESTFILE>;
if ($bar eq "123") {print "ok 3\n";} else {print "not ok 3\n";}
# Eat the line terminator
$/ = "\n";
$bar = <TESTFILE>;
# How about a larger terminator
$/ = "34";
$bar = <TESTFILE>;
if ($bar eq "1234") {print "ok 4\n";} else {print "not ok 4\n";}
# Eat the line terminator
$/ = "\n";
$bar = <TESTFILE>;
# Does paragraph mode work?
$/ = '';
$bar = <TESTFILE>;
if ($bar eq "1234\n12345\n\n") {print "ok 5\n";} else {print "not ok 5\n";}
# Try slurping the rest of the file
$/ = undef;
$bar = <TESTFILE>;
if ($bar eq "123456\n1234567\n") {print "ok 6\n";} else {print "not ok 6\n";}
# try the record reading tests. New file so we don't have to worry about
# the size of \n.
close TESTFILE;
unlink "./foo";
open TESTFILE, ">./foo";
print TESTFILE "1234567890123456789012345678901234567890";
binmode TESTFILE;
close TESTFILE;
open TESTFILE, "<./foo";
binmode TESTFILE;
# Test straight number
$/ = \2;
$bar = <TESTFILE>;
if ($bar eq "12") {print "ok 7\n";} else {print "not ok 7\n";}
# Test stringified number
$/ = \"2";
$bar = <TESTFILE>;
if ($bar eq "34") {print "ok 8\n";} else {print "not ok 8\n";}
# Integer variable
$foo = 2;
$/ = \$foo;
$bar = <TESTFILE>;
if ($bar eq "56") {print "ok 9\n";} else {print "not ok 9\n";}
# String variable
$foo = "2";
$/ = \$foo;
$bar = <TESTFILE>;
if ($bar eq "78") {print "ok 10\n";} else {print "not ok 10\n";}
close TESTFILE;
# Now for the tricky bit--full record reading
if ($^O eq 'VMS') {
# Create a temp file. We jump through these hoops 'cause CREATE really
# doesn't like our methods for some reason.
open FDLFILE, "> ./foo.fdl";
print FDLFILE "RECORD\n FORMAT VARIABLE\n";
close FDLFILE;
open CREATEFILE, "> ./foo.com";
print CREATEFILE '$ DEFINE/USER SYS$INPUT NL:', "\n";
print CREATEFILE '$ DEFINE/USER SYS$OUTPUT NL:', "\n";
print CREATEFILE '$ OPEN YOW []FOO.BAR/WRITE', "\n";
print CREATEFILE '$ CLOSE YOW', "\n";
print CREATEFILE "\$EXIT\n";
close CREATEFILE;
$throwaway = `\@\[\]foo`, "\n";
open(TEMPFILE, ">./foo.bar") or print "# open failed $! $^E\n";
print TEMPFILE "foo\nfoobar\nbaz\n";
close TEMPFILE;
open TESTFILE, "<./foo.bar";
$/ = \10;
$bar = <TESTFILE>;
if ($bar eq "foo\n") {print "ok 11\n";} else {print "not ok 11\n";}
$bar = <TESTFILE>;
if ($bar eq "foobar\n") {print "ok 12\n";} else {print "not ok 12\n";}
# can we do a short read?
$/ = \2;
$bar = <TESTFILE>;
if ($bar eq "ba") {print "ok 13\n";} else {print "not ok 13\n";}
# do we get the rest of the record?
$bar = <TESTFILE>;
if ($bar eq "z\n") {print "ok 14\n";} else {print "not ok 14\n";}
close TESTFILE;
1 while unlink qw(foo.bar foo.com foo.fdl);
} else {
# Nobody else does this at the moment (well, maybe OS/390, but they can
# put their own tests in) so we just punt
foreach $test (11..14) {print "ok $test # skipped on non-VMS system\n"};
}
$/ = "\n";
# see if open/readline/close work on our and my variables
{
if (open our $T, "./foo") {
my $line = <$T>;
print "# $line\n";
length($line) == 40 or print "not ";
close $T or print "not ";
}
else {
print "not ";
}
print "ok 15\n";
}
{
if (open my $T, "./foo") {
my $line = <$T>;
print "# $line\n";
length($line) == 40 or print "not ";
close $T or print "not ";
}
else {
print "not ";
}
print "ok 16\n";
}
# Get rid of the temp file
END { unlink "./foo"; }
--- NEW FILE: if.t ---
#!./perl
# $RCSfile: if.t,v $$Revision: 1.2 $$Date: 2006-12-04 17:01:45 $
print "1..2\n";
# first test to see if we can run the tests.
$x = 'test';
if ($x eq $x) { print "ok 1\n"; } else { print "not ok 1\n";}
if ($x ne $x) { print "not ok 2\n"; } else { print "ok 2\n";}
More information about the dslinux-commit
mailing list