Chromium Code Reviews| Index: test/mjsunit/wasm/grow-memory.js |
| diff --git a/test/mjsunit/wasm/grow-memory.js b/test/mjsunit/wasm/grow-memory.js |
| index 71eb4fec95a7971ab0b824480b66304ea565ef59..3222bba90c76e3183d862fb7448b27b4cf202b8e 100644 |
| --- a/test/mjsunit/wasm/grow-memory.js |
| +++ b/test/mjsunit/wasm/grow-memory.js |
| @@ -8,7 +8,7 @@ load("test/mjsunit/wasm/wasm-constants.js"); |
| load("test/mjsunit/wasm/wasm-module-builder.js"); |
| var kPageSize = 0x10000; |
| -var kV8MaxPages = 16384; |
| +var kV8MaxPages = 32767; |
| function genGrowMemoryBuilder() { |
| var builder = new WasmModuleBuilder(); |
| @@ -298,9 +298,8 @@ function testGrowMemoryTrapMaxPagesZeroInitialMemory() { |
| var builder = genGrowMemoryBuilder(); |
| builder.addMemory(0, kV8MaxPages, false); |
| var module = builder.instantiate(); |
| - var maxPages = 16385; |
| function growMem(pages) { return module.exports.grow_memory(pages); } |
| - assertEquals(-1, growMem(maxPages)); |
| + assertEquals(-1, growMem(kV8MaxPages + 1)); |
| } |
| testGrowMemoryTrapMaxPagesZeroInitialMemory(); |
| @@ -309,9 +308,8 @@ function testGrowMemoryTrapMaxPages() { |
| var builder = genGrowMemoryBuilder(); |
| builder.addMemory(1, 1, false); |
| var module = builder.instantiate(); |
| - var maxPages = 16384; |
| function growMem(pages) { return module.exports.grow_memory(pages); } |
| - assertEquals(-1, growMem(maxPages)); |
| + assertEquals(-1, growMem(kV8MaxPages)); |
| } |
| testGrowMemoryTrapMaxPages(); |
| @@ -493,3 +491,44 @@ function testGrowMemoryDeclaredSpecMaxTraps() { |
| } |
| testGrowMemoryDeclaredSpecMaxTraps(); |
| + |
| +function testGrowMemory2Gb() { |
| + print("testGrowMemory2Gb"); |
|
Eric Holk
2017/06/13 16:19:48
Thanks for printing the test name! This makes it a
gdeepti
2017/06/13 21:25:43
I agree it makes easier debugging. :)
I have an AI
|
| + var builder = genGrowMemoryBuilder(); |
| + builder.addMemory(1, kV8MaxPages, false); |
| + var module = builder.instantiate(); |
| + var offset, val; |
| + function peek() { return module.exports.load(offset); } |
| + function poke(value) { return module.exports.store(offset, value); } |
| + function growMem(pages) { return module.exports.grow_memory(pages); } |
| + |
| + for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
| + poke(100000 - offset); |
| + assertEquals(100000 - offset, peek()); |
| + } |
| + |
| + let result = growMem(kV8MaxPages - 1); |
| + if (result == 1 ){ |
| + for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
| + assertEquals(100000 - offset, peek()); |
| + } |
| + |
| + // Bounds check for large mem size |
| + for(offset = (kV8MaxPages - 1) * kPageSize; |
| + offset <= (kV8MaxPages * kPageSize - 4); offset+=4) { |
| + poke(0xaced); |
| + assertEquals(0xaced, peek()); |
| + } |
| + |
| + for (offset = kV8MaxPages * kPageSize - 3; |
| + offset <= kV8MaxPages * kPageSize + 4; offset++) { |
| + assertTraps(kTrapMemOutOfBounds, poke); |
|
Eric Holk
2017/06/13 16:19:48
I think it'd be good to test a couple of addresses
gdeepti
2017/06/13 21:25:43
Done.
|
| + } |
| + } else { |
| + // Allocating big chunks of memory can fail on gc_stress, especially on 32 |
| + // bit platforms. When grow_memory fails, expected result is -1. |
| + assertEquals(-1, result); |
| + } |
| +} |
| + |
| +testGrowMemory2Gb(); |