tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }