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

Function testMemoryGrow4Gb

deps/v8/test/mjsunit/wasm/grow-memory-resizable-buffer.js:392–449  ·  view source on GitHub ↗
(growMem)

Source from the content-addressed store, hash-verified

390testMemoryGrowInternalMaxTraps(growMemViaRAB);
391
392function testMemoryGrow4Gb(growMem) {
393 print(arguments.callee.name);
394 var builder = genMemoryGrowBuilder();
395 builder.addMemory(1, kV8MaxPages);
396 builder.exportMemoryAs("memory");
397 var module = builder.instantiate();
398 var offset, val;
399 function peek() { return module.exports.load(offset); }
400 function poke(value) { return module.exports.store(offset, value); }
401
402 // Check first 5 offsets.
403 for (offset = 0; offset <= 4 * 4; offset += 4) {
404 poke(100000 - offset);
405 assertEquals(100000 - offset, peek());
406 }
407
408 // Check last 5 offsets.
409 for (offset = (kPageSize - 5 * 4); offset <= (kPageSize - 4); offset += 4) {
410 poke(100000 - offset);
411 assertEquals(100000 - offset, peek());
412 }
413
414 let result = growMem(module, kV8MaxPages - 1);
415 if (result == 1) {
416 // Check first 5 offsets.
417 for (offset = 0; offset <= 4 * 4; offset += 4) {
418 assertEquals(100000 - offset, peek());
419 }
420
421 // Check last 5 offsets.
422 for (offset = (kPageSize - 5 * 4); offset <= (kPageSize - 4); offset += 4) {
423 assertEquals(100000 - offset, peek());
424 }
425
426 // Bounds check for large mem size.
427 let kMemSize = (kV8MaxPages * kPageSize);
428 let kLastValidOffset = kMemSize - 4; // Accommodate a 4-byte read/write.
429 // Check first 5 offsets of last page.
430 for (offset = kMemSize - kPageSize; offset <= kMemSize - kPageSize + 4 * 4;
431 offset += 4) {
432 poke(0xaced);
433 assertEquals(0xaced, peek());
434 }
435 for (offset = kLastValidOffset - 5 * 4; offset <= kLastValidOffset;
436 offset += 4) {
437 poke(0xaced);
438 assertEquals(0xaced, peek());
439 }
440
441 for (offset = kLastValidOffset + 1; offset < kMemSize; offset++) {
442 assertTraps(kTrapMemOutOfBounds, poke);
443 }
444 } else {
445 // Allocating big chunks of memory can fail on gc_stress, especially on 32
446 // bit platforms. When grow_memory fails, expected result is -1.
447 assertEquals(-1, result);
448 }
449}

Callers 1

Calls 10

genMemoryGrowBuilderFunction · 0.70
pokeFunction · 0.70
peekFunction · 0.70
growMemFunction · 0.70
assertTrapsFunction · 0.70
printFunction · 0.50
assertEqualsFunction · 0.50
addMemoryMethod · 0.45
exportMemoryAsMethod · 0.45
instantiateMethod · 0.45

Tested by

no test coverage detected