Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: test/mjsunit/wasm/grow-memory.js

Issue 2319983002: [wasm] GrowMemory should use array_buffer_allocator instead of realloc. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/runtime/runtime-wasm.cc ('K') | « src/runtime/runtime-wasm.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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();
OLDNEW
« src/runtime/runtime-wasm.cc ('K') | « src/runtime/runtime-wasm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698