Source code
Revision control
Copy as Markdown
Other Tools
function toLatin1(s) {
assertEq(isLatin1(s), true);
return s;
}
function testSearchFlat() {
var s1 = toLatin1("fooBar12345");
var s2 = toLatin1("Bar1");
// Latin1 + Latin1
assertEq(s1.search(s2), 3);
assertEq(s2.search(s1), -1);
assertEq(s1.search(s1), 0);
// Latin1 + TwoByte
assertEq(s1.search(s2 + "\u1200"), -1);
assertEq(s1.search(("12345\u1200").slice(0, -1)), 6);
// TwoByte + Latin1
assertEq("fooBar12345\u1200".search(s1), 0);
assertEq("fooBar12345\u1200".search(s2), 3);
// TwoByte + TwoByte
assertEq("fooBar12345\u1200".search("5\u1200"), 10);
assertEq("fooBar12345\u1200".search("5\u1201"), -1);
}
testSearchFlat();
function testSearchRope() {
// Tests for the RopeMatch algorithm.
var s1 = "foobarbaz0123456789".repeat(10);
s1.indexOf("333"); // flatten
s1 = toLatin1(s1);
var ropeMixed = s1 + "abcdef\u1200";
assertEq(isLatin1(ropeMixed), false);
var abc = toLatin1("abc");
var baz = toLatin1("baz");
// Mixed + Latin1
assertEq(ropeMixed.search(abc), 190);
assertEq(ropeMixed.search(baz), 6);
// Mixed + TwoByte
assertEq(ropeMixed.search("def\u1200"), 193);
// Latin1 + Latin1
s1 = "foobarbaz0123456789".repeat(10);
s1.indexOf("333"); // flatten
s1 = toLatin1(s1);
var ropeLatin1 = s1 + toLatin1("abcdef\u00AA");
assertEq(isLatin1(ropeLatin1), true);
assertEq(ropeLatin1.search(abc), 190);
// Latin1 + TwoByte
assertEq(ropeLatin1.search("\u1200bc".substr(1)), 191);
// TwoByte + Latin1
s1 = "foobarbaz0123456789\u11AA".repeat(10);
var ropeTwoByte = s1 + "abcdef\u1200";
assertEq(ropeTwoByte.search(abc), 200);
// TwoByte + TwoByte
assertEq(ropeTwoByte.search("def\u1200"), 203);
}
testSearchRope();
function testSearchStringMatch() {
var re = /bar/;
// Latin1
assertEq(toLatin1("foobar1234").search(re), 3);
assertEq(toLatin1("foo1234").search(re), -1);
// TwoByte
assertEq("\u1200bar".search(re), 1);
assertEq("\u12001234".search(re), -1);
}
testSearchStringMatch();