Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Flags: --expose-wasm --expose-gc --stress-compaction | 5 // Flags: --expose-wasm --expose-gc --stress-compaction |
| 6 | 6 |
| 7 load("test/mjsunit/wasm/wasm-constants.js"); | 7 load("test/mjsunit/wasm/wasm-constants.js"); |
| 8 load("test/mjsunit/wasm/wasm-module-builder.js"); | 8 load("test/mjsunit/wasm/wasm-module-builder.js"); |
| 9 | 9 |
| 10 var kPageSize = 0x10000; | 10 var kPageSize = 0x10000; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 | 25 |
| 26 function testGrowMemoryReadWrite() { | 26 function testGrowMemoryReadWrite() { |
| 27 var builder = genGrowMemoryBuilder(); | 27 var builder = genGrowMemoryBuilder(); |
| 28 builder.addMemory(1, 1, false); | 28 builder.addMemory(1, 1, false); |
| 29 var module = builder.instantiate(); | 29 var module = builder.instantiate(); |
| 30 var offset; | 30 var offset; |
| 31 function peek() { return module.exports.load(offset); } | 31 function peek() { return module.exports.load(offset); } |
| 32 function poke(value) { return module.exports.store(offset, value); } | 32 function poke(value) { return module.exports.store(offset, value); } |
| 33 function growMem(pages) { return module.exports.grow_memory(pages); } | 33 function growMem(pages) { return module.exports.grow_memory(pages); } |
| 34 | 34 |
| 35 for(offset = 0; offset <= (kPageSize - 4); offset++) { | 35 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { |
|
ahaas
2016/09/08 12:23:34
For this test it is actually better to write to ev
gdeepti
2016/09/08 22:44:50
It is better to test at every offset, but introduc
| |
| 36 poke(20); | 36 poke(20); |
| 37 assertEquals(20, peek()); | 37 assertEquals(20, peek()); |
| 38 } | 38 } |
| 39 for (offset = kPageSize - 3; offset < kPageSize + 4; offset++) { | 39 for (offset = kPageSize - 3; offset < kPageSize + 4; offset++) { |
| 40 assertTraps(kTrapMemOutOfBounds, poke); | 40 assertTraps(kTrapMemOutOfBounds, poke); |
| 41 assertTraps(kTrapMemOutOfBounds, peek); | 41 assertTraps(kTrapMemOutOfBounds, peek); |
| 42 } | 42 } |
| 43 | 43 |
| 44 assertEquals(1, growMem(3)); | 44 assertEquals(1, growMem(3)); |
| 45 | 45 |
| 46 for (offset = kPageSize; offset <= 4*kPageSize -4; offset++) { | 46 for (offset = kPageSize; offset <= 4*kPageSize -4; offset+=4) { |
|
ahaas
2016/09/08 12:23:34
same here.
| |
| 47 poke(20); | 47 poke(20); |
| 48 assertEquals(20, peek()); | 48 assertEquals(20, peek()); |
| 49 } | 49 } |
| 50 for (offset = 4*kPageSize - 3; offset < 4*kPageSize + 4; offset++) { | 50 for (offset = 4*kPageSize - 3; offset < 4*kPageSize + 4; offset++) { |
| 51 assertTraps(kTrapMemOutOfBounds, poke); | 51 assertTraps(kTrapMemOutOfBounds, poke); |
| 52 assertTraps(kTrapMemOutOfBounds, peek); | 52 assertTraps(kTrapMemOutOfBounds, peek); |
| 53 } | 53 } |
| 54 | 54 |
| 55 assertEquals(4, growMem(15)); | 55 assertEquals(4, growMem(15)); |
| 56 | 56 |
| 57 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset++) { | 57 for (offset = 4*kPageSize - 3; offset <= 4*kPageSize + 4; offset+=4) { |
|
ahaas
2016/09/08 12:23:34
same here.
| |
| 58 poke(20); | 58 poke(20); |
| 59 assertEquals(20, peek()); | 59 assertEquals(20, peek()); |
| 60 } | 60 } |
| 61 for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 4; offset++) { | 61 for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - 4; offset+=4) { |
|
ahaas
2016/09/08 12:23:34
same here.
| |
| 62 poke(20); | 62 poke(20); |
| 63 assertEquals(20, peek()); | 63 assertEquals(20, peek()); |
| 64 } | 64 } |
| 65 for (offset = 19*kPageSize - 3; offset < 19*kPageSize + 5; offset++) { | 65 for (offset = 19*kPageSize - 3; offset < 19*kPageSize + 5; offset++) { |
| 66 assertTraps(kTrapMemOutOfBounds, poke); | 66 assertTraps(kTrapMemOutOfBounds, poke); |
| 67 assertTraps(kTrapMemOutOfBounds, peek); | 67 assertTraps(kTrapMemOutOfBounds, peek); |
| 68 } | 68 } |
| 69 } | 69 } |
| 70 | 70 |
| 71 testGrowMemoryReadWrite(); | 71 testGrowMemoryReadWrite(); |
| 72 | 72 |
| 73 function testGrowMemoryZeroInitialSize() { | 73 function testGrowMemoryZeroInitialSize() { |
| 74 var builder = genGrowMemoryBuilder(); | 74 var builder = genGrowMemoryBuilder(); |
| 75 var module = builder.instantiate(); | 75 var module = builder.instantiate(); |
| 76 var offset; | 76 var offset; |
| 77 function peek() { return module.exports.load(offset); } | 77 function peek() { return module.exports.load(offset); } |
| 78 function poke(value) { return module.exports.store(offset, value); } | 78 function poke(value) { return module.exports.store(offset, value); } |
| 79 function growMem(pages) { return module.exports.grow_memory(pages); } | 79 function growMem(pages) { return module.exports.grow_memory(pages); } |
| 80 | 80 |
| 81 assertTraps(kTrapMemOutOfBounds, peek); | 81 assertTraps(kTrapMemOutOfBounds, peek); |
| 82 assertTraps(kTrapMemOutOfBounds, poke); | 82 assertTraps(kTrapMemOutOfBounds, poke); |
| 83 | 83 |
| 84 assertEquals(0, growMem(1)); | 84 assertEquals(0, growMem(1)); |
| 85 | 85 |
| 86 for(offset = 0; offset <= kPageSize - 4; offset++) { | 86 for(offset = 0; offset <= kPageSize - 4; offset+=4) { |
|
ahaas
2016/09/08 12:23:34
same here.
gdeepti
2016/09/08 22:44:50
Changing this back to the way it was for now.
| |
| 87 poke(20); | 87 poke(20); |
| 88 assertEquals(20, peek()); | 88 assertEquals(20, peek()); |
| 89 } | 89 } |
| 90 | 90 |
| 91 //TODO(gdeepti): Fix tests with correct write boundaries | 91 //TODO(gdeepti): Fix tests with correct write boundaries |
| 92 //when runtime function is fixed. | 92 //when runtime function is fixed. |
| 93 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { | 93 for(offset = kPageSize; offset <= kPageSize + 5; offset++) { |
| 94 assertTraps(kTrapMemOutOfBounds, peek); | 94 assertTraps(kTrapMemOutOfBounds, peek); |
| 95 } | 95 } |
| 96 } | 96 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 .exportFunc(); | 137 .exportFunc(); |
| 138 var module = builder.instantiate(); | 138 var module = builder.instantiate(); |
| 139 function growMem(pages) { return module.exports.grow_memory(pages); } | 139 function growMem(pages) { return module.exports.grow_memory(pages); } |
| 140 function MemSize() { return module.exports.memory_size(); } | 140 function MemSize() { return module.exports.memory_size(); } |
| 141 assertEquals(65536, MemSize()); | 141 assertEquals(65536, MemSize()); |
| 142 assertEquals(1, growMem(1)); | 142 assertEquals(1, growMem(1)); |
| 143 assertEquals(131072, MemSize()); | 143 assertEquals(131072, MemSize()); |
| 144 } | 144 } |
| 145 | 145 |
| 146 testGrowMemoryCurrentMemory(); | 146 testGrowMemoryCurrentMemory(); |
| 147 | |
| 148 function testGrowMemoryPreservesDataMemOp32() { | |
| 149 var builder = genGrowMemoryBuilder(); | |
| 150 builder.addMemory(1, 1, false); | |
| 151 var module = builder.instantiate(); | |
| 152 var offset, val; | |
| 153 function peek() { return module.exports.load(offset); } | |
| 154 function poke(value) { return module.exports.store(offset, value); } | |
| 155 function growMem(pages) { return module.exports.grow_memory(pages); } | |
| 156 | |
| 157 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | |
| 158 poke(100000 - offset); | |
| 159 assertEquals(100000 - offset, peek()); | |
| 160 } | |
| 161 | |
| 162 assertEquals(1, growMem(3)); | |
| 163 | |
| 164 for(offset = 0; offset <= (kPageSize - 4); offset+=4) { | |
| 165 assertEquals(100000 - offset, peek()); | |
| 166 } | |
| 167 } | |
| 168 | |
| 169 testGrowMemoryPreservesDataMemOp32(); | |
| 170 | |
| 171 function testGrowMemoryPreservesDataMemOp16() { | |
| 172 var builder = genGrowMemoryBuilder(); | |
| 173 builder.addMemory(1, 1, false); | |
| 174 builder.addFunction("load16", kSig_i_i) | |
| 175 .addBody([kExprGetLocal, 0, kExprI32LoadMem16U, 0, 0]) | |
| 176 .exportFunc(); | |
| 177 builder.addFunction("store16", kSig_i_ii) | |
| 178 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem16, 0, 0]) | |
| 179 .exportFunc(); | |
| 180 var module = builder.instantiate(); | |
| 181 var offset, val; | |
| 182 function peek() { return module.exports.load16(offset); } | |
| 183 function poke(value) { return module.exports.store16(offset, value); } | |
| 184 function growMem(pages) { return module.exports.grow_memory(pages); } | |
| 185 | |
| 186 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { | |
| 187 poke(65535 - offset); | |
| 188 assertEquals(65535 - offset, peek()); | |
| 189 } | |
| 190 | |
| 191 assertEquals(1, growMem(3)); | |
| 192 | |
| 193 for(offset = 0; offset <= (kPageSize - 2); offset+=2) { | |
| 194 assertEquals(65535 - offset, peek()); | |
| 195 } | |
| 196 } | |
| 197 | |
| 198 testGrowMemoryPreservesDataMemOp16(); | |
| 199 | |
| 200 function testGrowMemoryPreservesDataMemOp8() { | |
| 201 var builder = genGrowMemoryBuilder(); | |
| 202 builder.addMemory(1, 1, false); | |
| 203 builder.addFunction("load8", kSig_i_i) | |
| 204 .addBody([kExprGetLocal, 0, kExprI32LoadMem8U, 0, 0]) | |
| 205 .exportFunc(); | |
| 206 builder.addFunction("store8", kSig_i_ii) | |
| 207 .addBody([kExprGetLocal, 0, kExprGetLocal, 1, kExprI32StoreMem8, 0, 0]) | |
| 208 .exportFunc(); | |
| 209 var module = builder.instantiate(); | |
| 210 var offset, val = 0; | |
| 211 function peek() { return module.exports.load8(offset); } | |
| 212 function poke(value) { return module.exports.store8(offset, value); } | |
| 213 function growMem(pages) { return module.exports.grow_memory(pages); } | |
| 214 | |
| 215 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { | |
| 216 poke(val); | |
| 217 assertEquals(val, peek()); | |
| 218 if (val == 255) val = 0; | |
| 219 } | |
| 220 | |
| 221 assertEquals(1, growMem(3)); | |
| 222 | |
| 223 val = 0; | |
| 224 | |
| 225 for(offset = 0; offset <= (kPageSize - 1); offset++, val++) { | |
| 226 assertEquals(val, peek()); | |
| 227 if (val == 255) val = 0; | |
| 228 } | |
| 229 } | |
| 230 | |
| 231 testGrowMemoryPreservesDataMemOp8(); | |
| OLD | NEW |