(size, load_fn, store_fn)
| 44 | |
| 45 | |
| 46 | function testMemoryGrowReadWriteBase(size, load_fn, store_fn) { |
| 47 | // size is the number of bytes for load and stores. |
| 48 | var builder = genMemoryGrowBuilder(); |
| 49 | builder.addMemory(1, undefined); |
| 50 | var module = builder.instantiate(); |
| 51 | var offset; |
| 52 | var load = module.exports[load_fn]; |
| 53 | var store = module.exports[store_fn]; |
| 54 | function peek() { return load(offset); } |
| 55 | function poke(value) { return store(offset, value); } |
| 56 | function growMem(pages) { return module.exports.grow_memory(pages); } |
| 57 | |
| 58 | // Instead of checking every n-th offset, check the first 5. |
| 59 | for(offset = 0; offset <= (4*size); offset+=size) { |
| 60 | poke(20); |
| 61 | assertEquals(20, peek()); |
| 62 | } |
| 63 | for (offset = kPageSize - (size - 1); offset < kPageSize + size; offset++) { |
| 64 | assertTraps(kTrapMemOutOfBounds, poke); |
| 65 | assertTraps(kTrapMemOutOfBounds, peek); |
| 66 | } |
| 67 | |
| 68 | assertEquals(1, growMem(3)); |
| 69 | |
| 70 | for (let n = 1; n <= 3; n++) { |
| 71 | for (offset = n * kPageSize - 5 * size; offset <= n * kPageSize + 4 * size; |
| 72 | offset += size) { |
| 73 | // Check the 5 offsets to the before and after the n-th page. |
| 74 | // page n-1 page n page n+1 |
| 75 | // +---- ... ------------+---------- ... +------ ... |
| 76 | // | | | ... | | | | | | | | | | | | ... | | | | ... |
| 77 | // <+> ^ ^ |
| 78 | // | first offset last offset |
| 79 | // +-> size bytes |
| 80 | poke(20); |
| 81 | assertEquals(20, peek()); |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | // Check the last 5 valid offsets of the last page. |
| 86 | for (offset = 4*kPageSize-size-(4*size); offset <= 4*kPageSize -size; offset+=size) { |
| 87 | poke(20); |
| 88 | assertEquals(20, peek()); |
| 89 | } |
| 90 | |
| 91 | for (offset = 4*kPageSize - (size-1); offset < 4*kPageSize + size; offset++) { |
| 92 | assertTraps(kTrapMemOutOfBounds, poke); |
| 93 | assertTraps(kTrapMemOutOfBounds, peek); |
| 94 | } |
| 95 | |
| 96 | assertEquals(4, growMem(15)); |
| 97 | |
| 98 | for (offset = 4*kPageSize - (size-1); offset <= 4*kPageSize + size; offset+=size) { |
| 99 | poke(20); |
| 100 | assertEquals(20, peek()); |
| 101 | } |
| 102 | for (offset = 19*kPageSize - 10; offset <= 19*kPageSize - size; offset+=size) { |
| 103 | poke(20); |
no test coverage detected