Fix range operator
[p5sagit/p5-mst-13.2.git] / t / uni / overload.t
index ef61667..e4f4e13 100644 (file)
@@ -7,12 +7,12 @@ BEGIN {
     }
 }
 
-use Test::More tests => 190;
+use Test::More tests => 208;
 
 package UTF8Toggle;
 use strict;
 
-use overload '""' => 'stringify';
+use overload '""' => 'stringify', fallback => 1;
 
 sub new {
     my $class = shift;
@@ -48,46 +48,46 @@ foreach my $t ("ASCII", "B\366se") {
 my $u = UTF8Toggle->new("\311");
 my $lc = lc $u;
 is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
 $lc = lc $u;
 is (length $lc, 1);
-is ($lc, "\351", "E accute -> e accute");
+is ($lc, "\351", "E acute -> e acute");
 $lc = lc $u;
 is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
 
 $u = UTF8Toggle->new("\351");
 my $uc = uc $u;
 is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
 $uc = uc $u;
 is (length $uc, 1);
-is ($uc, "\311", "e accute -> E accute");
+is ($uc, "\311", "e acute -> E acute");
 $uc = uc $u;
 is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
 
 $u = UTF8Toggle->new("\311");
 $lc = lcfirst $u;
 is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
 $lc = lcfirst $u;
 is (length $lc, 1);
-is ($lc, "\351", "E accute -> e accute");
+is ($lc, "\351", "E acute -> e acute");
 $lc = lcfirst $u;
 is (length $lc, 1);
-is ($lc, "\311", "E accute -> e accute");
+is ($lc, "\311", "E acute -> e acute");
 
 $u = UTF8Toggle->new("\351");
 $uc = ucfirst $u;
 is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
 $uc = ucfirst $u;
 is (length $uc, 1);
-is ($uc, "\311", "e accute -> E accute");
+is ($uc, "\311", "e acute -> E acute");
 $uc = ucfirst $u;
 is (length $uc, 1);
-is ($uc, "\351", "e accute -> E accute");
+is ($uc, "\351", "e acute -> E acute");
 
 my $have_setlocale = 0;
 eval {
@@ -101,51 +101,53 @@ SKIP: {
        skip "No setlocale", 24;
     } elsif (!setlocale(&POSIX::LC_ALL, "en_GB.ISO8859-1")) {
        skip "Could not setlocale to en_GB.ISO8859-1", 24;
+    } elsif ($^O eq 'dec_osf' || $^O eq 'VMS') {
+       skip "$^O has broken en_GB.ISO8859-1 locale", 24;
     } else {
        use locale;
        my $u = UTF8Toggle->new("\311");
        my $lc = lc $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
        $lc = lc $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
        $lc = lc $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
 
        $u = UTF8Toggle->new("\351");
        my $uc = uc $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
        $uc = uc $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
        $uc = uc $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
 
        $u = UTF8Toggle->new("\311");
        $lc = lcfirst $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
        $lc = lcfirst $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
        $lc = lcfirst $u;
        is (length $lc, 1);
-       is ($lc, "\351", "E accute -> e accute");
+       is ($lc, "\351", "E acute -> e acute");
 
        $u = UTF8Toggle->new("\351");
        $uc = ucfirst $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
        $uc = ucfirst $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
        $uc = ucfirst $u;
        is (length $uc, 1);
-       is ($uc, "\311", "e accute -> E accute");
+       is ($uc, "\311", "e acute -> E acute");
     }
 }
 
@@ -160,6 +162,7 @@ foreach my $operator ('print', 'syswrite', 'syswrite len', 'syswrite off',
        my $u = UTF8Toggle->new("$pad\311\n$trail");
        my $l = UTF8Toggle->new("$pad\351\n$trail", 1);
        if ($operator eq 'print') {
+           no warnings 'utf8';
            print $fh $u;
            print $fh $u;
            print $fh $u;
@@ -243,6 +246,24 @@ foreach my $b ($big, UTF8Toggle->new($big)) {
     }
 }
 
+my $bits = "\311";
+foreach my $pieces ($bits, UTF8Toggle->new($bits)) {
+    like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+    like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+    like ($bits ^ $pieces, qr/\A\0+\z/, "something xor itself is zeros");
+
+    like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+    like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+    like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
+}
+
+foreach my $value ("\243", UTF8Toggle->new("\243")) {
+    is (pack ("A/A", $value), pack ("A/A", "\243"),
+       "pack copes with overloading");
+    is (pack ("A/A", $value), pack ("A/A", "\243"));
+    is (pack ("A/A", $value), pack ("A/A", "\243"));
+}
+
 END {
     1 while -f $tmpfile and unlink $tmpfile || die "unlink '$tmpfile': $!";
 }