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 |