| Index: test/mjsunit/string-indexof.js
|
| diff --git a/test/mjsunit/string-indexof.js b/test/mjsunit/string-indexof.js
|
| index 5b37a48196535761e6df5416bfdc8e239940e177..f732c9e6064851174a923719893e932eeb2dd179 100644
|
| --- a/test/mjsunit/string-indexof.js
|
| +++ b/test/mjsunit/string-indexof.js
|
| @@ -27,6 +27,12 @@
|
|
|
| var s = "test test test";
|
|
|
| +assertEquals(0, s.indexOf("t"));
|
| +assertEquals(3, s.indexOf("t", 1));
|
| +assertEquals(5, s.indexOf("t", 4));
|
| +assertEquals(1, s.indexOf("e"));
|
| +assertEquals(2, s.indexOf("s"));
|
| +
|
| assertEquals(5, s.indexOf("test", 4));
|
| assertEquals(5, s.indexOf("test", 5));
|
| assertEquals(10, s.indexOf("test", 6));
|
| @@ -47,3 +53,104 @@ assertEquals(4, reString.indexOf("[a-z]+"));
|
| assertEquals(10, reString.indexOf("(asdf)?"));
|
|
|
| assertEquals(1, String.prototype.indexOf.length);
|
| +
|
| +// Random greek letters
|
| +var twoByteString = "\u039a\u0391\u03a3\u03a3\u0395";
|
| +
|
| +// Test single char pattern
|
| +assertEquals(0, twoByteString.indexOf("\u039a"), "Lamda");
|
| +assertEquals(1, twoByteString.indexOf("\u0391"), "Alpha");
|
| +assertEquals(2, twoByteString.indexOf("\u03a3"), "First Sigma");
|
| +assertEquals(3, twoByteString.indexOf("\u03a3",3), "Second Sigma");
|
| +assertEquals(4, twoByteString.indexOf("\u0395"), "Epsilon");
|
| +assertEquals(-1, twoByteString.indexOf("\u0392"), "Not beta");
|
| +
|
| +// Test multi-char pattern
|
| +assertEquals(0, twoByteString.indexOf("\u039a\u0391"), "lambda Alpha");
|
| +assertEquals(1, twoByteString.indexOf("\u0391\u03a3"), "Alpha Sigma");
|
| +assertEquals(2, twoByteString.indexOf("\u03a3\u03a3"), "Sigma Sigma");
|
| +assertEquals(3, twoByteString.indexOf("\u03a3\u0395"), "Sigma Epsilon");
|
| +
|
| +assertEquals(-1, twoByteString.indexOf("\u0391\u03a3\u0395"),
|
| + "Not Alpha Sigma Epsilon");
|
| +
|
| +//single char pattern
|
| +assertEquals(4, twoByteString.indexOf("\u0395"));
|
| +
|
| +// Test complex string indexOf algorithms. Only trigger for long strings.
|
| +
|
| +// Long string that isn't a simple repeat of a shorter string.
|
| +var long = "A";
|
| +for(var i = 66; i < 76; i++) { // from 'B' to 'K'
|
| + long = long + String.fromCharCode(i) + long;
|
| +}
|
| +
|
| +// pattern of 15 chars, repeated every 16 chars in long
|
| +var pattern = "ABACABADABACABA";
|
| +for(var i = 0; i < long.length - pattern.length; i+= 7) {
|
| + var index = long.indexOf(pattern, i);
|
| + assertEquals((i + 15) & ~0xf, index, "Long ABACABA...-string at index " + i);
|
| +}
|
| +assertEquals(510, long.indexOf("AJABACA"), "Long AJABACA, First J");
|
| +assertEquals(1534, long.indexOf("AJABACA", 511), "Long AJABACA, Second J");
|
| +
|
| +pattern = "JABACABADABACABA";
|
| +assertEquals(511, long.indexOf(pattern), "Long JABACABA..., First J");
|
| +assertEquals(1535, long.indexOf(pattern, 512), "Long JABACABA..., Second J");
|
| +
|
| +
|
| +var lipsum = "lorem ipsum per se esse fugiendum. itaque aiunt hanc quasi "
|
| + + "naturalem atque insitam in animis nostris inesse notionem, ut "
|
| + + "alterum esse appetendum, alterum aspernandum sentiamus. Alii autem,"
|
| + + " quibus ego assentior, cum a philosophis compluribus permulta "
|
| + + "dicantur, cur nec voluptas in bonis sit numeranda nec in malis "
|
| + + "dolor, non existimant oportere nimium nos causae confidere, sed et"
|
| + + " argumentandum et accurate disserendum et rationibus conquisitis de"
|
| + + " voluptate et dolore disputandum putant.\n"
|
| + + "Sed ut perspiciatis, unde omnis iste natus error sit voluptatem "
|
| + + "accusantium doloremque laudantium, totam rem aperiam eaque ipsa,"
|
| + + "quae ab illo inventore veritatis et quasi architecto beatae vitae "
|
| + + "dicta sunt, explicabo. nemo enim ipsam voluptatem, quia voluptas"
|
| + + "sit, aspernatur aut odit aut fugit, sed quia consequuntur magni"
|
| + + " dolores eos, qui ratione voluptatem sequi nesciunt, neque porro"
|
| + + " quisquam est, qui dolorem ipsum, quia dolor sit, amet, "
|
| + + "consectetur, adipisci velit, sed quia non numquam eius modi"
|
| + + " tempora incidunt, ut labore et dolore magnam aliquam quaerat "
|
| + + "voluptatem. ut enim ad minima veniam, quis nostrum exercitationem "
|
| + + "ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi "
|
| + + "consequatur? quis autem vel eum iure reprehenderit, qui in ea "
|
| + + "voluptate velit esse, quam nihil molestiae consequatur, vel illum, "
|
| + + "qui dolorem eum fugiat, quo voluptas nulla pariatur?\n"
|
| + + "At vero eos et accusamus et iusto odio dignissimos ducimus, qui "
|
| + + "blanditiis praesentium voluptatum deleniti atque corrupti, quos "
|
| + + "dolores et quas molestias excepturi sint, obcaecati cupiditate "
|
| + + "non provident, similique sunt in culpa, qui officia deserunt "
|
| + + "mollitia animi, id est laborum et dolorum fuga. et harum quidem "
|
| + + "rerum facilis est et expedita distinctio. nam libero tempore, "
|
| + + "cum soluta nobis est eligendi optio, cumque nihil impedit, quo "
|
| + + "minus id, quod maxime placeat, facere possimus, omnis voluptas "
|
| + + "assumenda est, omnis dolor repellendus. temporibus autem "
|
| + + "quibusdam et aut officiis debitis aut rerum necessitatibus "
|
| + + "saepe eveniet, ut et voluptates repudiandae sint et molestiae "
|
| + + "non recusandae. itaque earum rerum hic tenetur a sapiente "
|
| + + "delectus, ut aut reiciendis voluptatibus maiores alias consequatur "
|
| + + "aut perferendis doloribus asperiores repellat.";
|
| +
|
| +assertEquals(893, lipsum.indexOf("lorem ipsum, quia dolor sit, amet"),
|
| + "Lipsum");
|
| +// test a lot of substrings of differing length and start-position.
|
| +for(var i = 255; i < lipsum.length; i += 3) {
|
| + for(var len = 661; i + len < lipsum.length; len += 4) {
|
| + var substring = lipsum.substring(i, i + len);
|
| + var index = -1;
|
| + do {
|
| + index = lipsum.indexOf(substring, index + 1);
|
| + assertTrue(index != -1,
|
| + "Lipsum substring " + i + ".." + (i + len-1) + " not found");
|
| + assertEquals(lipsum.substring(index, index + len), substring,
|
| + "Wrong lipsum substring found: " + i + ".." + (i + len - 1) + "/" +
|
| + index + ".." + (index + len - 1));
|
| + } while (index >= 0 && index < i);
|
| + assertEquals(i, index, "Lipsum match at " + i + ".." + (i + len - 1));
|
| + }
|
| +}
|
|
|