X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fop%2Flex_assign.t;h=fb9fe4e95c0e646013ab71b94995bca5a7dbf1e4;hb=a4c04bdcc508b6a45f83e703d0f82401445aa55b;hp=d35f39c2c378a8995f06fd455865e1ec4afe698f;hpb=317982ace1c0c548db99fd9a1eb48374c5d480cb;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/op/lex_assign.t b/t/op/lex_assign.t index d35f39c..fb9fe4e 100755 --- a/t/op/lex_assign.t +++ b/t/op/lex_assign.t @@ -5,13 +5,15 @@ BEGIN { @INC = '../lib'; } +$| = 1; umask 0; $xref = \ ""; +$runme = ($^O eq 'VMS' ? 'MCR ' : '') . $^X; @a = (1..5); %h = (1..6); $aref = \@a; $href = \%h; -open OP, qq{$^X -le 'print "aaa Ok ok" while \$i++ < 100'|}; +open OP, qq{$runme -le "print 'aaa Ok ok' for 1..100"|}; $chopit = 'aaaaaa'; @chopar = (113 .. 119); $posstr = '123456'; @@ -21,19 +23,101 @@ $nn = $n = 2; sub subb {"in s"} @INPUT = ; -print "1..", (scalar @INPUT), "\n"; +@simple_input = grep /^\s*\w+\s*\$\w+\s*[#\n]/, @INPUT; +print "1..", (10 + @INPUT + @simple_input), "\n"; $ord = 0; sub wrn {"@_"} +# Check correct optimization of ucfirst etc +$ord++; +my $a = "AB"; +my $b = "\u\L$a"; +print "not " unless $b eq 'Ab'; +print "ok $ord\n"; + +# Check correct destruction of objects: +my $dc = 0; +sub A::DESTROY {$dc += 1} +$a=8; +my $b; +{ my $c = 6; $b = bless \$c, "A"} + +$ord++; +print "not " unless $dc == 0; +print "ok $ord\n"; + +$b = $a+5; + +$ord++; +print "not " unless $dc == 1; +print "ok $ord\n"; + +$ord++; +my $xxx = 'b'; +$xxx = 'c' . ($xxx || 'e'); +print "not " unless $xxx eq 'cb'; +print "ok $ord\n"; + +{ # Check calling STORE + my $sc = 0; + sub B::TIESCALAR {bless [11], 'B'} + sub B::FETCH { -(shift->[0]) } + sub B::STORE { $sc++; my $o = shift; $o->[0] = 17 + shift } + + my $m; + tie $m, 'B'; + $m = 100; + + $ord++; + print "not " unless $sc == 1; + print "ok $ord\n"; + + my $t = 11; + $m = $t + 89; + + $ord++; + print "not " unless $sc == 2; + print "ok $ord\n"; + + $ord++; + print "# $m\nnot " unless $m == -117; + print "ok $ord\n"; + + $m += $t; + + $ord++; + print "not " unless $sc == 3; + print "ok $ord\n"; + + $ord++; + print "# $m\nnot " unless $m == 89; + print "ok $ord\n"; + +} + +# Chains of assignments + +my ($l1, $l2, $l3, $l4); +my $zzzz = 12; +$zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 1 + $zzzz; + +$ord++; +print "# $zzz1 = $l1 = $l2 = $zzz2 = $l3 = $l4 = 13\nnot " + unless $zzz1 == 13 and $zzz2 == 13 and $l1 == 13 + and $l2 == 13 and $l3 == 13 and $l4 == 13; +print "ok $ord\n"; + for (@INPUT) { $ord++; ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/; $comment = $op unless defined $comment; + chomp; $op = "$op==$op" unless $op =~ /==/; ($op, $expectop) = $op =~ /(.*)==(.*)/; - $skip = ($op =~ /^'\?\?\?'/) ? "skip" : "not"; + $skip = ($op =~ /^'\?\?\?'/ or $comment =~ /skip\(.*\Q$^O\E.*\)/i) + ? "skip" : "# '$_'\nnot"; $integer = ($comment =~ /^i_/) ? "use integer" : '' ; (print "#skipping $comment:\nok $ord\n"), next if $skip eq 'skip'; @@ -54,15 +138,43 @@ EOE print "# skipping $comment: unimplemented:\nok $ord\n"; } else { warn $@; - print "not ok $ord\n"; + print "# '$_'\nnot ok $ord\n"; + } + } +} + +for (@simple_input) { + $ord++; + ($op, undef, $comment) = /^([^\#]+)(\#\s+(.*))?/; + $comment = $op unless defined $comment; + chomp; + ($operator, $variable) = /^\s*(\w+)\s*\$(\w+)/ or warn "misprocessed '$_'\n"; + eval < # glob # readline 'faked' # rcatline @@ -132,7 +244,7 @@ lc $cstr # lc quotemeta $cstr # quotemeta @$aref # rv2av @$undefed # rv2av undef -each %h==1 # each +(each %h) % 2 == 1 # each values %h # values keys %h # keys %$href # rv2hv @@ -178,7 +290,7 @@ chmod 'non-existent' # chmod utime 'non-existent' # utime rename 'non-existent', 'non-existent1' # rename link 'non-existent', 'non-existent1' # link -symlink 'non-existent', 'non-existent1' # symlink +'???' # symlink readlink 'non-existent', 'non-existent1' # readlink '???' # mkdir '???' # rmdir @@ -186,18 +298,18 @@ readlink 'non-existent', 'non-existent1' # readlink '???' # fork '???' # wait '???' # waitpid -system 'sh -c true' # system +system "$runme -e 0" # system skip(VMS) '???' # exec -kill 0, $$ # kill +'???' # kill getppid # getppid getpgrp # getpgrp '???' # setpgrp getpriority $$, $$ # getpriority '???' # setpriority time # time -localtime # localtime -gmtime # gmtime -sleep 1 # sleep +localtime $^T # localtime +gmtime $^T # gmtime +'???' # sleep: can randomly fail '???' # alarm '???' # shmget '???' # shmctl