resizable-array-buffers.js (3815B)
1 const scopes = [ 2 "SameProcess", 3 "DifferentProcess", 4 "DifferentProcessForIndexedDB", 5 ]; 6 7 function testInt32Array(scope) { 8 var length = 4; 9 var byteLength = length * Int32Array.BYTES_PER_ELEMENT; 10 var maxByteLength = 2 * byteLength; 11 12 var ab = new ArrayBuffer(byteLength, {maxByteLength}); 13 assertEq(ab.resizable, true); 14 assertEq(ab.byteLength, byteLength); 15 assertEq(ab.maxByteLength, maxByteLength); 16 17 var ta1 = new Int32Array(ab); 18 assertEq(ta1.byteLength, byteLength); 19 ta1.set([1, 87654321, -123]); 20 assertEq(ta1.toString(), "1,87654321,-123,0"); 21 22 var clonebuf = serialize(ta1, undefined, {scope}); 23 var ta2 = deserialize(clonebuf); 24 assertEq(ta2 instanceof Int32Array, true); 25 assertEq(ta2.byteLength, byteLength); 26 assertEq(ta2.toString(), "1,87654321,-123,0"); 27 assertEq(ta2.buffer.resizable, true); 28 assertEq(ta2.buffer.byteLength, byteLength); 29 assertEq(ta2.buffer.maxByteLength, maxByteLength); 30 31 ta2.buffer.resize(maxByteLength); 32 assertEq(ta2.byteLength, maxByteLength); 33 } 34 scopes.forEach(testInt32Array); 35 36 function testFloat64Array(scope) { 37 var length = 4; 38 var byteLength = length * Float64Array.BYTES_PER_ELEMENT; 39 var maxByteLength = 2 * byteLength; 40 41 var ab = new ArrayBuffer(byteLength, {maxByteLength}); 42 assertEq(ab.resizable, true); 43 assertEq(ab.byteLength, byteLength); 44 assertEq(ab.maxByteLength, maxByteLength); 45 46 var ta1 = new Float64Array(ab); 47 assertEq(ta1.byteLength, byteLength); 48 ta1.set([NaN, 3.14, 0, 0]); 49 assertEq(ta1.toString(), "NaN,3.14,0,0"); 50 51 var clonebuf = serialize(ta1, undefined, {scope}); 52 var ta2 = deserialize(clonebuf); 53 assertEq(ta2 instanceof Float64Array, true); 54 assertEq(ta2.byteLength, byteLength); 55 assertEq(ta2.toString(), "NaN,3.14,0,0"); 56 assertEq(ta2.buffer.resizable, true); 57 assertEq(ta2.buffer.byteLength, byteLength); 58 assertEq(ta2.buffer.maxByteLength, maxByteLength); 59 60 ta2.buffer.resize(maxByteLength); 61 assertEq(ta2.byteLength, maxByteLength); 62 } 63 scopes.forEach(testFloat64Array); 64 65 function testDataView(scope) { 66 var length = 4; 67 var byteLength = length * Uint8Array.BYTES_PER_ELEMENT; 68 var maxByteLength = 2 * byteLength; 69 70 var ab = new ArrayBuffer(byteLength, {maxByteLength}); 71 assertEq(ab.resizable, true); 72 assertEq(ab.byteLength, byteLength); 73 assertEq(ab.maxByteLength, maxByteLength); 74 75 var ta = new Uint8Array(ab); 76 ta.set([5, 0, 255]); 77 assertEq(ta.toString(), "5,0,255,0"); 78 var dv1 = new DataView(ab); 79 assertEq(dv1.byteLength, byteLength); 80 81 var clonebuf = serialize(dv1, undefined, {scope}); 82 var dv2 = deserialize(clonebuf); 83 assertEq(dv2 instanceof DataView, true); 84 assertEq(dv2.byteLength, byteLength); 85 assertEq(new Uint8Array(dv2.buffer).toString(), "5,0,255,0"); 86 assertEq(dv2.buffer.resizable, true); 87 assertEq(dv2.buffer.byteLength, byteLength); 88 assertEq(dv2.buffer.maxByteLength, maxByteLength); 89 90 dv2.buffer.resize(maxByteLength); 91 assertEq(dv2.byteLength, maxByteLength); 92 } 93 scopes.forEach(testDataView); 94 95 function testArrayBuffer(scope) { 96 var length = 4; 97 var byteLength = length * Uint8Array.BYTES_PER_ELEMENT; 98 var maxByteLength = 2 * byteLength; 99 100 var ab = new ArrayBuffer(byteLength, {maxByteLength}); 101 assertEq(ab.resizable, true); 102 assertEq(ab.byteLength, byteLength); 103 assertEq(ab.maxByteLength, maxByteLength); 104 105 var ta = new Uint8Array(ab); 106 ta.set([33, 44, 55, 66]); 107 assertEq(ta.toString(), "33,44,55,66"); 108 109 var clonebuf = serialize(ab, undefined, {scope}); 110 var ab2 = deserialize(clonebuf); 111 assertEq(ab2 instanceof ArrayBuffer, true); 112 assertEq(new Uint8Array(ab2).toString(), "33,44,55,66"); 113 assertEq(ab2.resizable, true); 114 assertEq(ab2.byteLength, byteLength); 115 assertEq(ab2.maxByteLength, maxByteLength); 116 117 ab2.resize(maxByteLength); 118 assertEq(ab2.byteLength, maxByteLength); 119 } 120 scopes.forEach(testArrayBuffer);