Add t/op/lc.t to see if lc, uc, lcfirst, ucfirst, quotemeta work.
[p5sagit/p5-mst-13.2.git] / t / op / lex_assign.t
index 01e0ba0..fb9fe4e 100755 (executable)
@@ -2,9 +2,10 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    @INC = '../lib';
 }
 
+$| = 1;
 umask 0;
 $xref = \ "";
 $runme = ($^O eq 'VMS' ? 'MCR ' : '') . $^X;
@@ -22,7 +23,8 @@ $nn = $n = 2;
 sub subb {"in s"}
 
 @INPUT = <DATA>;
-print "1..", (8 + @INPUT), "\n";
+@simple_input = grep /^\s*\w+\s*\$\w+\s*[#\n]/, @INPUT;
+print "1..", (10 + @INPUT + @simple_input), "\n";
 $ord = 0;
 
 sub wrn {"@_"}
@@ -51,6 +53,12 @@ $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'}
@@ -88,15 +96,28 @@ 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 =~ /^'\?\?\?'/ or $comment =~ /skip\(.*\Q$^O\E.*\)/i)
-         ? "skip" : "not";
+         ? "skip" : "# '$_'\nnot";
   $integer = ($comment =~ /^i_/) ? "use integer" : '' ;
   (print "#skipping $comment:\nok $ord\n"), next if $skip eq 'skip';
   
@@ -117,14 +138,42 @@ 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 <<EOE;
+  local \$SIG{__WARN__} = \\&wrn;
+  my \$$variable = "Ac# Ca\\nxxx";
+  \$$variable = $operator \$$variable;
+  \$toself = \$$variable;
+  \$direct = $operator "Ac# Ca\\nxxx";
+  print "# \\\$$variable = $operator \\\$$variable\\nnot "
+    unless \$toself eq \$direct;
+  print "ok \$ord\\n";
+EOE
+  if ($@) {
+    if ($@ =~ /is unimplemented/) {
+      print "# skipping $comment: unimplemented:\nok $ord\n";
+    } elsif ($@ =~ /Can't (modify|take log of 0)/) {
+      print "# skipping $comment: syntax not good for selfassign:\nok $ord\n";
+    } else {
+      warn $@;
+      print "# '$_'\nnot ok $ord\n";
     }
   }
 }
 __END__
 ref $xref                      # ref
 ref $cstr                      # ref nonref
-`$runme -e "print qq[1\n]"`                            # backtick skip(MSWin32)
+`$runme -e "print qq[1\\n]"`                           # backtick skip(MSWin32)
 `$undefed`                     # backtick undef skip(MSWin32)
 <*>                            # glob
 <OP>                           # readline
@@ -195,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
@@ -260,7 +309,7 @@ getpriority $$, $$          # getpriority
 time                           # time
 localtime $^T                  # localtime
 gmtime $^T                     # gmtime
-sleep 1                                # sleep
+'???'                          # sleep: can randomly fail
 '???'                          # alarm
 '???'                          # shmget
 '???'                          # shmctl