| 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..b0b05eca366b3a490be84b32c088b6a14aa7e11e 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.
|
|
|
| +// Flags: --string-slices --expose-externalize-string
|
| +
|
| 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,65 @@ 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.
|
| +function f(s1, s2, s3, i) {
|
| + assertEquals(String.fromCharCode(97+i%11), s1.charAt(i%11));
|
| + assertEquals(String.fromCharCode(97+i%11), s2.charAt(i%11));
|
| + assertEquals(String.fromCharCode(98+i%11), s3.charAt(i%11));
|
| + assertEquals(String.fromCharCode(101), s3.charAt(3));
|
| +}
|
| +
|
| +flat = "abcdefghijkl12345";
|
| +cons = flat + flat.toUpperCase();
|
| +slice = "abcdefghijklmn12345".slice(1, -1);
|
| +for ( var i = 0; i < 1000; i++) {
|
| + f(flat, cons, slice, i);
|
| +}
|
| +flat = "abcdefghijkl1\u20232345";
|
| +cons = flat + flat.toUpperCase();
|
| +slice = "abcdefghijklmn1\u20232345".slice(1, -1);
|
| +for ( var i = 0; i < 1000; i++) {
|
| + f(flat, cons, slice, i);
|
| +}
|
| +
|
| +// 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));
|
| +
|
| +/*
|
| +// Externalizing strings.
|
| +var a = "123456789qwertyuiopasdfghjklzxcvbnm";
|
| +var b = a.slice(1,-1);
|
| +assertEquals(a.slice(1,-1), b);
|
| +externalizeString(a);
|
| +assertEquals(a.slice(1,-1), b);
|
| +*/
|
|
|