| Index: test/mjsunit/string-external-cached.js
|
| diff --git a/test/mjsunit/string-externalize.js b/test/mjsunit/string-external-cached.js
|
| similarity index 60%
|
| copy from test/mjsunit/string-externalize.js
|
| copy to test/mjsunit/string-external-cached.js
|
| index a68711b99c173d67056db4a25928beae27866143..12312ac76aa385f9be26a1230ba61e02262f27ce 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 =
|
| - "AA" + (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\
|
| @@ -117,6 +58,30 @@ function test() {
|
| externalizeString(charat_short, true);
|
| } catch (ex) { }
|
| assertEquals("1", charat_short.charAt(1));
|
| +
|
| + // 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.
|
|
|