+
+my $little = "\243\243";
+my $big = " \243 $little ! $little ! $little \243 ";
+my $right = rindex $big, $little;
+my $right1 = rindex $big, $little, 11;
+my $left = index $big, $little;
+my $left1 = index $big, $little, 4;
+
+cmp_ok ($right, ">", $right1, "Sanity check our rindex tests");
+cmp_ok ($left, "<", $left1, "Sanity check our index tests");
+
+foreach my $b ($big, UTF8Toggle->new($big)) {
+ foreach my $l ($little, UTF8Toggle->new($little),
+ UTF8Toggle->new($little, 1)) {
+ is (rindex ($b, $l), $right, "rindex");
+ is (rindex ($b, $l), $right, "rindex");
+ is (rindex ($b, $l), $right, "rindex");
+
+ is (rindex ($b, $l, 11), $right1, "rindex 11");
+ is (rindex ($b, $l, 11), $right1, "rindex 11");
+ is (rindex ($b, $l, 11), $right1, "rindex 11");
+
+ is (index ($b, $l), $left, "index");
+ is (index ($b, $l), $left, "index");
+ is (index ($b, $l), $left, "index");
+
+ is (index ($b, $l, 4), $left1, "index 4");
+ is (index ($b, $l, 4), $left1, "index 4");
+ is (index ($b, $l, 4), $left1, "index 4");
+ }
+}
+
+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"));
+}
+
+foreach my $value ("\243", UTF8Toggle->new("\243")) {
+ my $v;
+ $v = substr $value, 0, 1;
+ is ($v, "\243");
+ $v = substr $value, 0, 1;
+ is ($v, "\243");
+ $v = substr $value, 0, 1;
+ is ($v, "\243");
+}
+
+{
+ package RT69422;
+ use overload '""' => sub { $_[0]->{data} }
+}
+
+{
+ my $text = bless { data => "\x{3075}" }, 'RT69422';
+ my $p = substr $text, 0, 1;
+ is ($p, "\x{3075}");
+}
+
+END {
+ 1 while -f $tmpfile and unlink $tmpfile || die "unlink '$tmpfile': $!";
+}