Make some casts explicit to keep VC++ 7 happy
[p5sagit/p5-mst-13.2.git] / t / op / length.t
index 3170beb..0c44484 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-print "1..13\n";
+print "1..20\n";
 
 print "not " unless length("")    == 0;
 print "ok 1\n";
@@ -33,7 +33,7 @@ print "ok 3\n";
 }
 
 {
-    my $a = pack("U", 0x80);
+    my $a = pack("U", 0xFF);
 
     print "not " unless length($a) == 1;
     print "ok 6\n";
@@ -42,12 +42,12 @@ print "ok 3\n";
     use bytes;
     if (ord('A') == 193)
      {
-      printf "#%vx for 0x80\n",$a;
-      print "not " unless $a eq "\x8a\x67" && length($a) == 2;
+      printf "#%vx for 0xFF\n",$a;
+      print "not " unless $a eq "\x8b\x73" && length($a) == 2;
      }
     else
      {
-      print "not " unless $a eq "\xc2\x80" && length($a) == 2;
+      print "not " unless $a eq "\xc3\xbf" && length($a) == 2;
      }
     print "ok 7\n";
     $test++;
@@ -133,3 +133,18 @@ print "ok 3\n";
     print "ok 15\n";
     $test++;
 }
+
+{
+    # Play around with Unicode strings,
+    # give a little workout to the UTF-8 length cache.
+    my $a = chr(256) x 100;
+    print length $a == 100 ? "ok 16\n" : "not ok 16\n";
+    chop $a;
+    print length $a ==  99 ? "ok 17\n" : "not ok 17\n";
+    $a .= $a;
+    print length $a == 198 ? "ok 18\n" : "not ok 18\n";
+    $a = chr(256) x 999;
+    print length $a == 999 ? "ok 19\n" : "not ok 19\n";
+    substr($a, 0, 1) = '';
+    print length $a == 998 ? "ok 20\n" : "not ok 20\n";
+}