uvchr_to_utf8() and utf8n_to_uvchr() are mathoms on ASCII based
[p5sagit/p5-mst-13.2.git] / t / op / index.t
index 0b08f08..d223265 100755 (executable)
 #!./perl
 
-# $RCSfile: index.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:59 $
+BEGIN {
+    chdir 't' if -d 't';
+    @INC = '../lib';
+}
 
-print "1..20\n";
+use strict;
+require './test.pl';
+plan( tests => 46 );
 
+my $foo = 'Now is the time for all good men to come to the aid of their country.';
 
-$foo = 'Now is the time for all good men to come to the aid of their country.';
+my $first = substr($foo,0,index($foo,'the'));
+is($first, "Now is ");
 
-$first = substr($foo,0,index($foo,'the'));
-print ($first eq "Now is " ? "ok 1\n" : "not ok 1\n");
-
-$last = substr($foo,rindex($foo,'the'),100);
-print ($last eq "their country." ? "ok 2\n" : "not ok 2\n");
+my $last = substr($foo,rindex($foo,'the'),100);
+is($last, "their country.");
 
 $last = substr($foo,index($foo,'Now'),2);
-print ($last eq "No" ? "ok 3\n" : "not ok 3\n");
+is($last, "No");
 
 $last = substr($foo,rindex($foo,'Now'),2);
-print ($last eq "No" ? "ok 4\n" : "not ok 4\n");
+is($last, "No");
 
 $last = substr($foo,index($foo,'.'),100);
-print ($last eq "." ? "ok 5\n" : "not ok 5\n");
+is($last, ".");
 
 $last = substr($foo,rindex($foo,'.'),100);
-print ($last eq "." ? "ok 6\n" : "not ok 6\n");
-
-print index("ababa","a",-1) == 0 ? "ok 7\n" : "not ok 7\n";
-print index("ababa","a",0) == 0 ? "ok 8\n" : "not ok 8\n";
-print index("ababa","a",1) == 2 ? "ok 9\n" : "not ok 9\n";
-print index("ababa","a",2) == 2 ? "ok 10\n" : "not ok 10\n";
-print index("ababa","a",3) == 4 ? "ok 11\n" : "not ok 11\n";
-print index("ababa","a",4) == 4 ? "ok 12\n" : "not ok 12\n";
-print index("ababa","a",5) == -1 ? "ok 13\n" : "not ok 13\n";
-
-print rindex("ababa","a",-1) == -1 ? "ok 14\n" : "not ok 14\n";
-print rindex("ababa","a",0) == 0 ? "ok 15\n" : "not ok 15\n";
-print rindex("ababa","a",1) == 0 ? "ok 16\n" : "not ok 16\n";
-print rindex("ababa","a",2) == 2 ? "ok 17\n" : "not ok 17\n";
-print rindex("ababa","a",3) == 2 ? "ok 18\n" : "not ok 18\n";
-print rindex("ababa","a",4) == 4 ? "ok 19\n" : "not ok 19\n";
-print rindex("ababa","a",5) == 4 ? "ok 20\n" : "not ok 20\n";
+is($last, ".");
+
+is(index("ababa","a",-1), 0);
+is(index("ababa","a",0), 0);
+is(index("ababa","a",1), 2);
+is(index("ababa","a",2), 2);
+is(index("ababa","a",3), 4);
+is(index("ababa","a",4), 4);
+is(index("ababa","a",5), -1);
+
+is(rindex("ababa","a",-1), -1);
+is(rindex("ababa","a",0), 0);
+is(rindex("ababa","a",1), 0);
+is(rindex("ababa","a",2), 2);
+is(rindex("ababa","a",3), 2);
+is(rindex("ababa","a",4), 4);
+is(rindex("ababa","a",5), 4);
+
+$a = "foo \x{1234}bar";
+
+is(index($a, "\x{1234}"), 4);
+is(index($a, "bar",    ), 5);
+
+is(rindex($a, "\x{1234}"), 4);
+is(rindex($a, "foo",    ), 0);
+
+{
+    my $needle = "\x{1230}\x{1270}";
+    my @needles = split ( //, $needle );
+    my $haystack = "\x{1228}\x{1228}\x{1230}\x{1270}";
+    foreach ( @needles ) {
+       my $a = index ( "\x{1228}\x{1228}\x{1230}\x{1270}", $_ );
+       my $b = index ( $haystack, $_ );
+       is($a, $b, q{[perl #22375] 'split'/'index' problem for utf8});
+    }
+    $needle = "\x{1270}\x{1230}"; # Transpose them.
+    @needles = split ( //, $needle );
+    foreach ( @needles ) {
+       my $a = index ( "\x{1228}\x{1228}\x{1230}\x{1270}", $_ );
+       my $b = index ( $haystack, $_ );
+       is($a, $b, q{[perl #22375] 'split'/'index' problem for utf8});
+    }
+}
+
+{
+    my $search = "foo \xc9 bar";
+    my $text = "a\xa3\xa3a $search    $search quux";
+
+    my $text_utf8 = $text;
+    utf8::upgrade($text_utf8);
+    my $search_utf8 = $search;
+    utf8::upgrade($search_utf8);
+
+    is (index($text, $search), 5);
+    is (rindex($text, $search), 18);
+    is (index($text, $search_utf8), 5);
+    is (rindex($text, $search_utf8), 18);
+    is (index($text_utf8, $search), 5);
+    is (rindex($text_utf8, $search), 18);
+    is (index($text_utf8, $search_utf8), 5);
+    is (rindex($text_utf8, $search_utf8), 18);
+
+    my $text_octets = $text_utf8;
+    utf8::encode ($text_octets);
+    my $search_octets = $search_utf8;
+    utf8::encode ($search_octets);
+
+    is (index($text_octets, $search_octets), 7, "index octets, octets")
+       or _diag ($text_octets, $search_octets);
+    is (rindex($text_octets, $search_octets), 21, "rindex octets, octets");
+    is (index($text_octets, $search_utf8), -1);
+    is (rindex($text_octets, $search_utf8), -1);
+    is (index($text_utf8, $search_octets), -1);
+    is (rindex($text_utf8, $search_octets), -1);
+
+    is (index($text_octets, $search), -1);
+    is (rindex($text_octets, $search), -1);
+    is (index($text, $search_octets), -1);
+    is (rindex($text, $search_octets), -1);
+}