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();