resizable-dataview-byteoffset.js (1690B)
1 load(libdir + "asserts.js"); 2 3 function testResizableArrayBufferAutoLength() { 4 for (let i = 0; i < 4; ++i) { 5 let ab = new ArrayBuffer(i, {maxByteLength: i + 1}); 6 let ta = new DataView(ab); 7 for (let j = 0; j < 100; ++j) { 8 ab.resize(i); 9 assertEq(ta.byteOffset, 0); 10 11 ab.resize(i + 1); 12 assertEq(ta.byteOffset, 0); 13 14 if (i > 0) { 15 ab.resize(i - 1); 16 assertEq(ta.byteOffset, 0); 17 } 18 } 19 } 20 } 21 for (let i = 0; i < 2; ++i) testResizableArrayBufferAutoLength(); 22 23 function testResizableArrayBufferAutoLengthNonZeroOffset() { 24 for (let i = 1; i < 4 + 1; ++i) { 25 let ab = new ArrayBuffer(i, {maxByteLength: i + 1}); 26 let ta = new DataView(ab, 1); 27 for (let j = 0; j < 100; ++j) { 28 ab.resize(i); 29 assertEq(ta.byteOffset, 1); 30 31 ab.resize(i + 1); 32 assertEq(ta.byteOffset, 1); 33 34 ab.resize(i - 1); 35 if (i > 1) { 36 assertEq(ta.byteOffset, 1); 37 } else { 38 assertThrowsInstanceOf(() => ta.byteOffset, TypeError); 39 } 40 } 41 } 42 } 43 for (let i = 0; i < 2; ++i) testResizableArrayBufferAutoLengthNonZeroOffset(); 44 45 function testResizableArrayBufferNonZeroOffset() { 46 for (let i = 2; i < 4 + 2; ++i) { 47 let ab = new ArrayBuffer(i, {maxByteLength: i + 1}); 48 let ta = new DataView(ab, 1, 1); 49 for (let j = 0; j < 100; ++j) { 50 ab.resize(i); 51 assertEq(ta.byteOffset, 1); 52 53 ab.resize(i + 1); 54 assertEq(ta.byteOffset, 1); 55 56 ab.resize(i - 1); 57 if (i > 2) { 58 assertEq(ta.byteOffset, 1); 59 } else { 60 assertThrowsInstanceOf(() => ta.byteOffset, TypeError); 61 } 62 } 63 } 64 } 65 for (let i = 0; i < 2; ++i) testResizableArrayBufferNonZeroOffset();