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. |