MCPcopy Create free account
hub / github.com/nodejs/node / BasicMemory64Tests

Function BasicMemory64Tests

deps/v8/test/mjsunit/wasm/memory64.js:15–101  ·  view source on GitHub ↗
(num_pages, use_atomic_ops)

Source from the content-addressed store, hash-verified

13const max_num_pages = 16 * GB / kPageSize;
14
15function BasicMemory64Tests(num_pages, use_atomic_ops) {
16 const num_bytes = num_pages * kPageSize;
17 print(`Testing ${num_bytes} bytes (${num_pages} pages) on ${
18 use_atomic_ops ? '' : 'non-'}atomic memory`);
19
20 let builder = new WasmModuleBuilder();
21 builder.addMemory64(num_pages, num_pages);
22 builder.exportMemoryAs('memory');
23
24 // A memory operation with alignment (2) and offset (0).
25 let op = (non_atomic, atomic) => use_atomic_ops ?
26 [kAtomicPrefix, atomic, 2, 0] :
27 [non_atomic, 2, 0];
28 builder.addFunction('load', makeSig([kWasmF64], [kWasmI32]))
29 .addBody([
30 kExprLocalGet, 0, // local.get 0
31 kExprI64UConvertF64, // i64.uconvert_sat.f64
32 ...op(kExprI32LoadMem, kExprI32AtomicLoad) // load
33 ])
34 .exportFunc();
35 builder.addFunction('store', makeSig([kWasmF64, kWasmI32], []))
36 .addBody([
37 kExprLocalGet, 0, // local.get 0
38 kExprI64UConvertF64, // i64.uconvert_sat.f64
39 kExprLocalGet, 1, // local.get 1
40 ...op(kExprI32StoreMem, kExprI32AtomicStore) // store
41 ])
42 .exportFunc();
43
44 let module = builder.instantiate();
45 let memory = module.exports.memory;
46 let load = module.exports.load;
47 let store = module.exports.store;
48
49 assertEquals(num_bytes, memory.buffer.byteLength);
50 // Test that we can create a TypedArray from that large buffer.
51 let array = new Int8Array(memory.buffer);
52 assertEquals(num_bytes, array.length);
53
54 const GB = Math.pow(2, 30);
55 let unalignedAndOobTrap =
56 use_atomic_ops ? kTrapUnalignedAccess : kTrapMemOutOfBounds;
57 assertEquals(0, load(num_bytes - 4));
58 assertTraps(kTrapMemOutOfBounds, () => load(num_bytes));
59 assertTraps(unalignedAndOobTrap, () => load(num_bytes - 3));
60 assertTraps(kTrapMemOutOfBounds, () => load(num_bytes - 4 + 4 * GB));
61 assertTraps(kTrapMemOutOfBounds, () => store(num_bytes));
62 assertTraps(unalignedAndOobTrap, () => store(num_bytes - 3));
63 assertTraps(kTrapMemOutOfBounds, () => store(num_bytes - 4 + 4 * GB));
64 if (use_atomic_ops) {
65 assertTraps(kTrapUnalignedAccess, () => load(num_bytes - 7));
66 assertTraps(kTrapUnalignedAccess, () => store(num_bytes - 7));
67 }
68
69 store(num_bytes - 4, 0x12345678);
70 assertEquals(0x12345678, load(num_bytes - 4));
71
72 let kStoreOffset = use_atomic_ops ? 40 : 27;

Callers 1

memory64.jsFile · 0.85

Calls 15

addMemory64Method · 0.95
exportMemoryAsMethod · 0.95
addFunctionMethod · 0.95
instantiateMethod · 0.95
randomMethod · 0.80
concatMethod · 0.80
makeSigFunction · 0.70
opFunction · 0.70
loadFunction · 0.70
assertTrapsFunction · 0.70
storeFunction · 0.70
printFunction · 0.50

Tested by

no test coverage detected