| Index: test/mjsunit/string-external-cached.js
|
| diff --git a/test/mjsunit/string-externalize.js b/test/mjsunit/string-external-cached.js
|
| similarity index 58%
|
| copy from test/mjsunit/string-externalize.js
|
| copy to test/mjsunit/string-external-cached.js
|
| index 9edb615ef7a649bb632f7efbb1ff075d1d9072d4..b2f8f06aa468aa84be1192841606e90247213e98 100644
|
| --- a/test/mjsunit/string-externalize.js
|
| +++ b/test/mjsunit/string-external-cached.js
|
| @@ -26,69 +26,10 @@
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| // Flags: --expose-externalize-string --expose-gc
|
| -
|
| -var size = 1024;
|
| +// Test data pointer caching of external strings.
|
|
|
| function test() {
|
| - var str = "";
|
| -
|
| - // Build an ascii cons string.
|
| - for (var i = 0; i < size; i++) {
|
| - str += String.fromCharCode(i & 0x7f);
|
| - }
|
| - assertTrue(isAsciiString(str));
|
| -
|
| - var twoByteExternalWithAsciiData =
|
| - "AAAAAAAA" + (function() { return "A"; })();
|
| - externalizeString(twoByteExternalWithAsciiData, true /* force two-byte */);
|
| - assertFalse(isAsciiString(twoByteExternalWithAsciiData));
|
| -
|
| - var realTwoByteExternalString =
|
| - "\u1234\u1234\u1234\u1234" + (function() { return "\u1234"; })();
|
| - externalizeString(realTwoByteExternalString);
|
| - assertFalse(isAsciiString(realTwoByteExternalString));
|
| -
|
| - assertTrue(isAsciiString(["a", twoByteExternalWithAsciiData].join("")));
|
| -
|
| - // Appending a two-byte string that contains only ascii chars should
|
| - // still produce an ascii cons.
|
| - var str1 = str + twoByteExternalWithAsciiData;
|
| - assertTrue(isAsciiString(str1));
|
| -
|
| - // Force flattening of the string.
|
| - var old_length = str1.length - twoByteExternalWithAsciiData.length;
|
| - for (var i = 0; i < old_length; i++) {
|
| - assertEquals(String.fromCharCode(i & 0x7f), str1[i]);
|
| - }
|
| - for (var i = old_length; i < str1.length; i++) {
|
| - assertEquals("A", str1[i]);
|
| - }
|
| -
|
| - // Flattened string should still be ascii.
|
| - assertTrue(isAsciiString(str1));
|
| -
|
| - // Lower-casing an ascii string should produce ascii.
|
| - assertTrue(isAsciiString(str1.toLowerCase()));
|
| -
|
| - assertFalse(isAsciiString(["a", realTwoByteExternalString].join("")));
|
| -
|
| - // Appending a real two-byte string should produce a two-byte cons.
|
| - var str2 = str + realTwoByteExternalString;
|
| - assertFalse(isAsciiString(str2));
|
| -
|
| - // Force flattening of the string.
|
| - old_length = str2.length - realTwoByteExternalString.length;
|
| - for (var i = 0; i < old_length; i++) {
|
| - assertEquals(String.fromCharCode(i & 0x7f), str2[i]);
|
| - }
|
| - for (var i = old_length; i < str.length; i++) {
|
| - assertEquals("\u1234", str2[i]);
|
| - }
|
| -
|
| - // Flattened string should still be two-byte.
|
| - assertFalse(isAsciiString(str2));
|
| -
|
| - // Test buffered external strings.
|
| + // Test string.charAt.
|
| var charat_str = new Array(5);
|
| charat_str[0] = "0123456789ABCDEF0123456789ABCDEF\
|
| 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\
|
| @@ -111,6 +52,30 @@ function test() {
|
| assertEquals('A', charat_str[i].charAt(3*16 + 10));
|
| assertEquals('B', charat_str[i].charAt(3*16 + 11));
|
| }
|
| +
|
| + // Test regexp.
|
| + var re = /(A|B)/;
|
| + var rere = /(T.{1,2}B)/;
|
| + var ascii = "ABCDEFGHIJKLMNOPQRST";
|
| + var twobyte = "_ABCDEFGHIJKLMNOPQRST";
|
| + try {
|
| + externalizeString(ascii, false);
|
| + externalizeString(twobyte, true);
|
| + } catch (ex) { }
|
| + assertTrue(isAsciiString(ascii));
|
| + assertFalse(isAsciiString(twobyte));
|
| + var ascii_slice = ascii.slice(1,-1);
|
| + var twobyte_slice = twobyte.slice(2,-1);
|
| + var ascii_cons = ascii + ascii;
|
| + var twobyte_cons = twobyte + twobyte;
|
| + for (var i = 0; i < 2; i++) {
|
| + assertEquals(["A", "A"], re.exec(ascii));
|
| + assertEquals(["B", "B"], re.exec(ascii_slice));
|
| + assertEquals(["TAB", "TAB"], rere.exec(ascii_cons));
|
| + assertEquals(["A", "A"], re.exec(twobyte));
|
| + assertEquals(["B", "B"], re.exec(twobyte_slice));
|
| + assertEquals(["T_AB", "T_AB"], rere.exec(twobyte_cons));
|
| + }
|
| }
|
|
|
| // Run the test many times to ensure IC-s don't break things.
|
|
|