tor-browser

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

read-aligned.js (1322B)


      1 // Test aligned read access.
      2 
      3 load(libdir + "dataview.js");
      4 
      5 // Create a new test function for each scalar type.
      6 function createRead(data) {
      7  const name = typeName(data.type);
      8  const offset = 0;
      9 
     10  return Function("data", `
     11    const {values, littleEndian, bigEndian} = data;
     12 
     13    // Load from array so that Ion doesn't treat as constants.
     14    const True = [true, 1];
     15    const False = [false, 0];
     16 
     17    const ab = new ArrayBuffer(${data.values.length * data.type.BYTES_PER_ELEMENT + offset});
     18    const dv = new DataView(ab);
     19 
     20    new ${data.type.name}(ab, 0, ${data.values.length}).set(values);
     21 
     22    new Uint8Array(ab).copyWithin(${offset}, 0);
     23 
     24    for (let i = 0; i < 100; ++i) {
     25      let j = i % values.length;
     26      let index = j * ${data.type.BYTES_PER_ELEMENT} + ${offset};
     27 
     28      let v1 = dv.get${name}(index);
     29      assertEq(v1, bigEndian[j]);
     30 
     31      let v2 = dv.get${name}(index, true);
     32      assertEq(v2, littleEndian[j]);
     33 
     34      let v3 = dv.get${name}(index, false);
     35      assertEq(v3, bigEndian[j]);
     36 
     37      let v4 = dv.get${name}(index, True[i & 1]);
     38      assertEq(v4, littleEndian[j]);
     39 
     40      let v5 = dv.get${name}(index, False[i & 1]);
     41      assertEq(v5, bigEndian[j]);
     42    }
     43  `);
     44 }
     45 
     46 for (let data of createTestData()) {
     47  let f = createRead(data);
     48 
     49  for (let i = 0; i < 2; ++i) {
     50    f(data);
     51  }
     52 }