()
| 29 | // Test data pointer caching of external strings. |
| 30 | |
| 31 | function test() { |
| 32 | // Test string.charAt. |
| 33 | var charat_str = new Array(5); |
| 34 | charat_str[0] = createExternalizableString('0123456789ABCDEF0123456789ABCDEF\ |
| 35 | 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\ |
| 36 | 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\ |
| 37 | 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF\ |
| 38 | 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'); |
| 39 | charat_str[1] = createExternalizableString('0123456789ABCDEF'); |
| 40 | for (var i = 0; i < 6; i++) charat_str[1] += charat_str[1]; |
| 41 | try { // String can only be externalized once |
| 42 | externalizeString(charat_str[0]); |
| 43 | externalizeString(charat_str[1]); |
| 44 | } catch (ex) { } |
| 45 | charat_str[2] = charat_str[0].slice(0, -1); |
| 46 | charat_str[3] = charat_str[1].slice(0, -1); |
| 47 | charat_str[4] = charat_str[0] + charat_str[0]; |
| 48 | |
| 49 | for (var i = 0; i < 5; i++) { |
| 50 | assertEquals('B', charat_str[i].charAt(6*16 + 11)); |
| 51 | assertEquals('C', charat_str[i].charAt(6*16 + 12)); |
| 52 | assertEquals('A', charat_str[i].charAt(3*16 + 10)); |
| 53 | assertEquals('B', charat_str[i].charAt(3*16 + 11)); |
| 54 | } |
| 55 | |
| 56 | charat_short = createExternalizableString('01234'); |
| 57 | try { // String can only be externalized once |
| 58 | externalizeString(charat_short); |
| 59 | } catch (ex) { } |
| 60 | assertEquals("1", charat_short.charAt(1)); |
| 61 | |
| 62 | // Test regexp and short substring. |
| 63 | var re = /(A|B)/; |
| 64 | var rere = /(T.{1,3}B)/u; |
| 65 | var ascii = createExternalizableString('ABCDEFGHIJKLMNOPQRST'); |
| 66 | var twobyte = createExternalizableString('_ABCDEFGHIJKLMNOPQRST🤓'); |
| 67 | try { // String can only be externalized once |
| 68 | externalizeString(ascii); |
| 69 | externalizeString(twobyte); |
| 70 | } catch (ex) { } |
| 71 | assertTrue(isOneByteString(ascii)); |
| 72 | assertFalse(isOneByteString(twobyte)); |
| 73 | var ascii_slice = ascii.slice(1,-1); |
| 74 | var twobyte_slice = twobyte.slice(2,-1); |
| 75 | var ascii_cons = ascii + ascii; |
| 76 | var twobyte_cons = twobyte + twobyte; |
| 77 | for (var i = 0; i < 2; i++) { |
| 78 | assertEquals(["A", "A"], re.exec(ascii)); |
| 79 | assertEquals(["B", "B"], re.exec(ascii_slice)); |
| 80 | assertEquals(["TAB", "TAB"], rere.exec(ascii_cons)); |
| 81 | assertEquals(["A", "A"], re.exec(twobyte)); |
| 82 | assertEquals(["B", "B"], re.exec(twobyte_slice)); |
| 83 | assertEquals(["T🤓_AB", "T🤓_AB"], rere.exec(twobyte_cons)); |
| 84 | assertEquals("DEFG", ascii_slice.substr(2, 4)); |
| 85 | assertEquals("DEFG", twobyte_slice.substr(2, 4)); |
| 86 | assertEquals("DEFG", ascii_cons.substr(3, 4)); |
| 87 | assertEquals("DEFG", twobyte_cons.substr(4, 4)); |
| 88 | } |
no test coverage detected
searching dependent graphs…