immutable-array-buffers.js (3330B)
1 // |jit-test| --enable-arraybuffer-immutable; skip-if: !ArrayBuffer.prototype.transferToImmutable 2 3 const scopes = [ 4 "SameProcess", 5 "DifferentProcess", 6 "DifferentProcessForIndexedDB", 7 ]; 8 9 function testInt32Array(scope) { 10 var length = 4; 11 var byteLength = length * Int32Array.BYTES_PER_ELEMENT; 12 13 var ab = new ArrayBuffer(byteLength); 14 assertEq(ab.immutable, false); 15 assertEq(ab.byteLength, byteLength); 16 17 var ta = new Int32Array(ab); 18 ta.set([1, 87654321, -123]); 19 20 var ita1 = new Int32Array(ab.transferToImmutable()); 21 assertEq(ita1.byteLength, byteLength); 22 assertEq(ita1.toString(), "1,87654321,-123,0"); 23 assertEq(ita1.buffer.immutable, true); 24 25 var clonebuf = serialize(ita1, undefined, {scope}); 26 var ita2 = deserialize(clonebuf); 27 assertEq(ita2 instanceof Int32Array, true); 28 assertEq(ita2.byteLength, byteLength); 29 assertEq(ita2.toString(), "1,87654321,-123,0"); 30 assertEq(ita2.buffer.immutable, true); 31 assertEq(ita2.buffer.byteLength, byteLength); 32 } 33 scopes.forEach(testInt32Array); 34 35 function testFloat64Array(scope) { 36 var length = 4; 37 var byteLength = length * Float64Array.BYTES_PER_ELEMENT; 38 39 var ab = new ArrayBuffer(byteLength); 40 assertEq(ab.immutable, false); 41 assertEq(ab.byteLength, byteLength); 42 43 var ta = new Float64Array(ab); 44 ta.set([NaN, 3.14, 0, 0]); 45 46 var ita1 = new Float64Array(ab.transferToImmutable()); 47 assertEq(ita1.byteLength, byteLength); 48 assertEq(ita1.toString(), "NaN,3.14,0,0"); 49 assertEq(ita1.buffer.immutable, true); 50 51 var clonebuf = serialize(ita1, undefined, {scope}); 52 var ita2 = deserialize(clonebuf); 53 assertEq(ita2 instanceof Float64Array, true); 54 assertEq(ita2.byteLength, byteLength); 55 assertEq(ita2.toString(), "NaN,3.14,0,0"); 56 assertEq(ita2.buffer.immutable, true); 57 assertEq(ita2.buffer.byteLength, byteLength); 58 } 59 scopes.forEach(testFloat64Array); 60 61 function testDataView(scope) { 62 var length = 4; 63 var byteLength = length * Uint8Array.BYTES_PER_ELEMENT; 64 65 var ab = new ArrayBuffer(byteLength); 66 assertEq(ab.immutable, false); 67 assertEq(ab.byteLength, byteLength); 68 69 var ta = new Uint8Array(ab); 70 ta.set([5, 0, 255]); 71 assertEq(ta.toString(), "5,0,255,0"); 72 73 var idv1 = new DataView(ab.transferToImmutable()); 74 assertEq(idv1.byteLength, byteLength); 75 assertEq(idv1.buffer.immutable, true); 76 77 var clonebuf = serialize(idv1, undefined, {scope}); 78 var idv2 = deserialize(clonebuf); 79 assertEq(idv2 instanceof DataView, true); 80 assertEq(idv2.byteLength, byteLength); 81 assertEq(new Uint8Array(idv2.buffer).toString(), "5,0,255,0"); 82 assertEq(idv2.buffer.immutable, true); 83 assertEq(idv2.buffer.byteLength, byteLength); 84 } 85 scopes.forEach(testDataView); 86 87 function testArrayBuffer(scope) { 88 var length = 4; 89 var byteLength = length * Uint8Array.BYTES_PER_ELEMENT; 90 91 var ab = new ArrayBuffer(byteLength); 92 assertEq(ab.immutable, false); 93 assertEq(ab.byteLength, byteLength); 94 95 var ta = new Uint8Array(ab); 96 ta.set([33, 44, 55, 66]); 97 assertEq(ta.toString(), "33,44,55,66"); 98 99 var iab1 = ab.transferToImmutable(); 100 101 var clonebuf = serialize(iab1, undefined, {scope}); 102 var iab2 = deserialize(clonebuf); 103 assertEq(iab2 instanceof ArrayBuffer, true); 104 assertEq(new Uint8Array(iab2).toString(), "33,44,55,66"); 105 assertEq(iab2.immutable, true); 106 assertEq(iab2.byteLength, byteLength); 107 } 108 scopes.forEach(testArrayBuffer);