(growMem)
| 390 | testMemoryGrowInternalMaxTraps(growMemViaRAB); |
| 391 | |
| 392 | function testMemoryGrow4Gb(growMem) { |
| 393 | print(arguments.callee.name); |
| 394 | var builder = genMemoryGrowBuilder(); |
| 395 | builder.addMemory(1, kV8MaxPages); |
| 396 | builder.exportMemoryAs("memory"); |
| 397 | var module = builder.instantiate(); |
| 398 | var offset, val; |
| 399 | function peek() { return module.exports.load(offset); } |
| 400 | function poke(value) { return module.exports.store(offset, value); } |
| 401 | |
| 402 | // Check first 5 offsets. |
| 403 | for (offset = 0; offset <= 4 * 4; offset += 4) { |
| 404 | poke(100000 - offset); |
| 405 | assertEquals(100000 - offset, peek()); |
| 406 | } |
| 407 | |
| 408 | // Check last 5 offsets. |
| 409 | for (offset = (kPageSize - 5 * 4); offset <= (kPageSize - 4); offset += 4) { |
| 410 | poke(100000 - offset); |
| 411 | assertEquals(100000 - offset, peek()); |
| 412 | } |
| 413 | |
| 414 | let result = growMem(module, kV8MaxPages - 1); |
| 415 | if (result == 1) { |
| 416 | // Check first 5 offsets. |
| 417 | for (offset = 0; offset <= 4 * 4; offset += 4) { |
| 418 | assertEquals(100000 - offset, peek()); |
| 419 | } |
| 420 | |
| 421 | // Check last 5 offsets. |
| 422 | for (offset = (kPageSize - 5 * 4); offset <= (kPageSize - 4); offset += 4) { |
| 423 | assertEquals(100000 - offset, peek()); |
| 424 | } |
| 425 | |
| 426 | // Bounds check for large mem size. |
| 427 | let kMemSize = (kV8MaxPages * kPageSize); |
| 428 | let kLastValidOffset = kMemSize - 4; // Accommodate a 4-byte read/write. |
| 429 | // Check first 5 offsets of last page. |
| 430 | for (offset = kMemSize - kPageSize; offset <= kMemSize - kPageSize + 4 * 4; |
| 431 | offset += 4) { |
| 432 | poke(0xaced); |
| 433 | assertEquals(0xaced, peek()); |
| 434 | } |
| 435 | for (offset = kLastValidOffset - 5 * 4; offset <= kLastValidOffset; |
| 436 | offset += 4) { |
| 437 | poke(0xaced); |
| 438 | assertEquals(0xaced, peek()); |
| 439 | } |
| 440 | |
| 441 | for (offset = kLastValidOffset + 1; offset < kMemSize; offset++) { |
| 442 | assertTraps(kTrapMemOutOfBounds, poke); |
| 443 | } |
| 444 | } else { |
| 445 | // Allocating big chunks of memory can fail on gc_stress, especially on 32 |
| 446 | // bit platforms. When grow_memory fails, expected result is -1. |
| 447 | assertEquals(-1, result); |
| 448 | } |
| 449 | } |
no test coverage detected