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 }