| Index: test/mjsunit/wasm/grow-memory.js
|
| diff --git a/test/mjsunit/wasm/grow-memory.js b/test/mjsunit/wasm/grow-memory.js
|
| index ecc105ee0d1d589f85f08689446c8791a5b8cfe9..d15cd935df03ac4e3090e78e1fe65e24d4f8f23a 100644
|
| --- a/test/mjsunit/wasm/grow-memory.js
|
| +++ b/test/mjsunit/wasm/grow-memory.js
|
| @@ -38,6 +38,8 @@ function genGrowMemoryBuilder() {
|
| return builder;
|
| }
|
|
|
| +// TODO(gdeepti): Generate tests programatically for all the sizes instead of
|
| +// current implementation.
|
| function testGrowMemoryReadWrite32() {
|
| var builder = genGrowMemoryBuilder();
|
| builder.addMemory(1, 1, false);
|
| @@ -197,15 +199,96 @@ function testGrowMemoryZeroInitialSize() {
|
| assertEquals(20, peek());
|
| }
|
|
|
| - //TODO(gdeepti): Fix tests with correct write boundaries
|
| - //when runtime function is fixed.
|
| - for(offset = kPageSize; offset <= kPageSize + 5; offset++) {
|
| + for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) {
|
| assertTraps(kTrapMemOutOfBounds, peek);
|
| }
|
| +
|
| + offset = 3*kPageSize;
|
| + for (var i = 1; i < 4; i++) {
|
| + assertTraps(kTrapMemOutOfBounds, poke);
|
| + assertEquals(i, growMem(1));
|
| + }
|
| + poke(20);
|
| + assertEquals(20, peek());
|
| }
|
|
|
| testGrowMemoryZeroInitialSize();
|
|
|
| +function testGrowMemoryZeroInitialSize32() {
|
| + var builder = genGrowMemoryBuilder();
|
| + var module = builder.instantiate();
|
| + var offset;
|
| + 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); }
|
| +
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + assertTraps(kTrapMemOutOfBounds, poke);
|
| +
|
| + assertEquals(0, growMem(1));
|
| +
|
| + for(offset = 0; offset <= kPageSize - 4; offset++) {
|
| + poke(20);
|
| + assertEquals(20, peek());
|
| + }
|
| +
|
| + for(offset = kPageSize - 3; offset <= kPageSize + 5; offset++) {
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + }
|
| +}
|
| +
|
| +testGrowMemoryZeroInitialSize32();
|
| +
|
| +function testGrowMemoryZeroInitialSize16() {
|
| + var builder = genGrowMemoryBuilder();
|
| + var module = builder.instantiate();
|
| + var offset;
|
| + function peek() { return module.exports.load16(offset); }
|
| + function poke(value) { return module.exports.store16(offset, value); }
|
| + function growMem(pages) { return module.exports.grow_memory(pages); }
|
| +
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + assertTraps(kTrapMemOutOfBounds, poke);
|
| +
|
| + assertEquals(0, growMem(1));
|
| +
|
| + for(offset = 0; offset <= kPageSize - 2; offset++) {
|
| + poke(20);
|
| + assertEquals(20, peek());
|
| + }
|
| +
|
| + for(offset = kPageSize - 1; offset <= kPageSize + 5; offset++) {
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + }
|
| +}
|
| +
|
| +testGrowMemoryZeroInitialSize16();
|
| +
|
| +function testGrowMemoryZeroInitialSize8() {
|
| + var builder = genGrowMemoryBuilder();
|
| + var module = builder.instantiate();
|
| + var offset;
|
| + function peek() { return module.exports.load8(offset); }
|
| + function poke(value) { return module.exports.store8(offset, value); }
|
| + function growMem(pages) { return module.exports.grow_memory(pages); }
|
| +
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + assertTraps(kTrapMemOutOfBounds, poke);
|
| +
|
| + assertEquals(0, growMem(1));
|
| +
|
| + for(offset = 0; offset <= kPageSize - 1; offset++) {
|
| + poke(20);
|
| + assertEquals(20, peek());
|
| + }
|
| +
|
| + for(offset = kPageSize; offset <= kPageSize + 5; offset++) {
|
| + assertTraps(kTrapMemOutOfBounds, peek);
|
| + }
|
| +}
|
| +
|
| +testGrowMemoryZeroInitialSize8();
|
| +
|
| function testGrowMemoryTrapMaxPagesZeroInitialMemory() {
|
| var builder = genGrowMemoryBuilder();
|
| var module = builder.instantiate();
|
|
|