Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1431)

Unified Diff: test/mjsunit/string-external-cached.js

Issue 8680010: Add external strings support to regexp in generated code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixing small mistakes Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698