Chromium Code Reviews| Index: test/mjsunit/string-slices.js |
| diff --git a/test/mjsunit/substr.js b/test/mjsunit/string-slices.js |
| similarity index 69% |
| copy from test/mjsunit/substr.js |
| copy to test/mjsunit/string-slices.js |
| index f69a9c045c9aaec793ebb71ea162f9244accd05c..0a9b842a3bec40324e4ec58aa979a0e496da6a0a 100755 |
| --- a/test/mjsunit/substr.js |
| +++ b/test/mjsunit/string-slices.js |
| @@ -25,6 +25,8 @@ |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
Yang
2011/07/27 11:51:58
Mostly a copy of test/mjsunit/substr.js, but using
|
| +// Flags: --string-slices |
| + |
| var s = 'abcdefghijklmn'; |
| assertEquals(s, s.substr()); |
| assertEquals(s, s.substr(0)); |
| @@ -70,7 +72,7 @@ for (var i = 0; i < 25; i++) { |
| } |
| /x/.exec(x); // Try to force a flatten. |
| for (var i = 5; i < 25; i++) { |
| - for (var j = 0; j < 25; j++) { |
| + for (var j = 12; j < 25; j++) { |
| var z = x.substring(i, i+j); |
| var w = Math.random() * 42; // Allocate something new in new-space. |
| assertEquals(j, z.length); |
| @@ -79,8 +81,6 @@ for (var i = 5; i < 25; i++) { |
| } |
| } |
| } |
| - |
| - |
| // Then two-byte strings. |
| x = "UC16\u2028"; // Non-ascii char forces two-byte string. |
| for (var i = 0; i < 25; i++) { |
| @@ -98,7 +98,6 @@ for (var i = 5; i < 25; i++) { |
| } |
| } |
| - |
| // Keep creating strings to to force allocation failure on substring creation. |
| var x = "0123456789ABCDEF"; |
| x += x; // 2^5 |
| @@ -135,3 +134,56 @@ for (var i = 0; i < 10000; i++) { |
| assertEquals(xl - (i % xl), z.length); |
| cache.push(z); |
| } |
| + |
| +// Substring of substring. |
| +var cache = []; |
| +var last = x; |
| +var offset = 0; |
| +for (var i = 0; i < 64; i++) { |
| + var z = last.substring(i); |
| + last = z; |
| + cache.push(z); |
| + offset += i; |
| +} |
| +for (var i = 63; i >= 0; i--) { |
| + var z = cache.pop(); |
| + assertTrue(/\u2028123456789ABCDEF/.test(z)); |
| + assertEquals(xl - offset, z.length); |
| + offset -= i; |
| +} |
| + |
| +//Test charAt for different strings. |
|
antonm
2011/07/27 12:16:39
nit: missing space before Test.
|
| +flat = "abcdefghijkl12345"; |
| +cons = flat + flat.toUpperCase(); |
| +slice = "abcdefghijklmn12345".slice(1, -1); |
| +for ( var i = 0; i < 50; i++) { |
|
antonm
2011/07/27 12:16:39
nit: unnecessary space after ( (here and below)
|
| + assertEquals(String.fromCharCode(97+i%11), flat.charAt(i%11)); |
| + assertEquals(String.fromCharCode(97+i%11), cons.charAt(i%11)); |
| + assertEquals(String.fromCharCode(98+i%11), slice.charAt(i%11)); |
| + assertEquals(String.fromCharCode(101), slice.charAt(3)); |
| +} |
| +flat = "abcdefghijkl1\u20232345"; |
| +cons = flat + flat.toUpperCase(); |
| +slice = "abcdefghijklmn1\u20232345".slice(1, -1); |
| +for ( var i = 0; i < 50; i++) { |
| + assertEquals(String.fromCharCode(97+i%11), flat.charAt(i%11)); |
| + assertEquals(String.fromCharCode(97+i%11), cons.charAt(i%11)); |
| + assertEquals(String.fromCharCode(98+i%11), slice.charAt(i%11)); |
| + assertEquals(String.fromCharCode(101), slice.charAt(3)); |
| +} |
| + |
| +// Concatenate substrings. |
| +var ascii = 'abcdefghijklmnop'; |
| +var utf = '\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB'; |
| +assertEquals("klmno", ascii.substring(10,15) + ascii.substring(16)); |
| +assertEquals("\u03B4\u03B7", utf.substring(3,4) + utf.substring(6,7)); |
| +assertEquals("klp", ascii.substring(10,12) + ascii.substring(15,16)); |
| +assertEquals("\u03B1\u03B4\u03B5", utf.substring(0,1) + utf.substring(5,3)); |
| +assertEquals("", ascii.substring(16) + utf.substring(16)); |
| +assertEquals("bcdef\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9", |
| + ascii.substring(1,6) + utf.substring(3,9)); |
| +assertEquals("\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9abcdefghijklmnop", |
| + utf.substring(3,9) + ascii); |
| +assertEquals("\u03B2\u03B3\u03B4\u03B5\u03B4\u03B5\u03B6\u03B7", |
| + utf.substring(5,1) + utf.substring(3,7)); |
| + |