string-codePointAt-surrogate.js (2773B)
1 function testLinear() { 2 var s = "\u{10000}\u{10001}\u{10002}\u{10003}\u{10004}\u{10005}\u{10006}\u{10007}"; 3 4 for (var i = 0; i < 200; ++i) { 5 // Iterate over all possible string indices, which includes reading 6 // unpaired lead surrogates. 7 var index = i % s.length; 8 9 var c = s.codePointAt(index); 10 var e = ((index & 1) ? 0xdc00 : 0x10000) + (index >> 1); 11 assertEq(c, e); 12 } 13 } 14 for (var i = 0; i < 2; ++i) { 15 testLinear(); 16 } 17 18 function testLinearOnlyValidCodePoints() { 19 var s = "\u{10000}\u{10001}\u{10002}\u{10003}\u{10004}\u{10005}\u{10006}\u{10007}"; 20 21 for (var i = 0; i < 200; ++i) { 22 // Iterator over all valid code point indices. (Code points are at all even 23 // string indices.) 24 var index = (i % s.length) & ~1; 25 26 var c = s.codePointAt(index); 27 var e = ((index & 1) ? 0xdc00 : 0x10000) + (index >> 1); 28 assertEq(c, e); 29 } 30 } 31 for (var i = 0; i < 2; ++i) { 32 testLinearOnlyValidCodePoints(); 33 } 34 35 function testRope() { 36 var left = "\u{10000}\u{10001}\u{10002}\u{10003}\u{10004}\u{10005}\u{10006}\u{10007}"; 37 var right = "\u{10008}\u{10009}\u{1000A}\u{1000B}\u{1000C}\u{1000D}\u{1000E}\u{1000F}"; 38 39 for (var i = 0; i < 200; ++i) { 40 var s = newRope(left, right); 41 42 // Iterate over all possible string indices, which includes reading 43 // unpaired lead surrogates. 44 var index = i % s.length; 45 46 var c = s.codePointAt(index); 47 var e = ((index & 1) ? 0xdc00 : 0x10000) + (index >> 1); 48 assertEq(c, e); 49 } 50 } 51 for (var i = 0; i < 2; ++i) { 52 testRope(); 53 } 54 55 function testRopeOnlyValidCodePoints() { 56 var left = "\u{10000}\u{10001}\u{10002}\u{10003}\u{10004}\u{10005}\u{10006}\u{10007}"; 57 var right = "\u{10008}\u{10009}\u{1000A}\u{1000B}\u{1000C}\u{1000D}\u{1000E}\u{1000F}"; 58 59 for (var i = 0; i < 200; ++i) { 60 var s = newRope(left, right); 61 62 // Iterator over all valid code point indices. (Code points are at all even 63 // string indices.) 64 var index = (i % s.length) & ~1; 65 66 var c = s.codePointAt(index); 67 var e = ((index & 1) ? 0xdc00 : 0x10000) + (index >> 1); 68 assertEq(c, e); 69 } 70 } 71 for (var i = 0; i < 2; ++i) { 72 testRopeOnlyValidCodePoints(); 73 } 74 75 function testUnpairedLead() { 76 var s = "\u{d800}\u{d801}\u{d802}\u{d803}\u{d804}\u{d805}\u{d806}\u{d807}"; 77 78 for (var i = 0; i < 200; ++i) { 79 var index = i % s.length; 80 81 var c = s.codePointAt(index); 82 var e = 0xd800 + index; 83 assertEq(c, e); 84 } 85 } 86 for (var i = 0; i < 2; ++i) { 87 testUnpairedLead(); 88 } 89 90 function testUnpairedTail() { 91 var s = "\u{dc00}\u{dc01}\u{dc02}\u{dc03}\u{dc04}\u{dc05}\u{dc06}\u{dc07}"; 92 93 for (var i = 0; i < 200; ++i) { 94 var index = i % s.length; 95 96 var c = s.codePointAt(index); 97 var e = 0xdc00 + index; 98 assertEq(c, e); 99 } 100 } 101 for (var i = 0; i < 2; ++i) { 102 testUnpairedTail(); 103 }