// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --multi-mapped-mock-allocator // Chosen for stress runs on 32-bit systems. Physical memory is not an issue // thanks to the mock allocator, but virtual address space is still limited. let kSize = 128 * 1024 * 1024; // Must be >= MultiMappedMockAllocator::kChunkSize in d8.cc. let kChunkSize = 2 * 1024 * 1024; let a = new Uint8Array(kSize); for (let i = 0; i < kChunkSize; i++) { a[i] = 42; } // Check that OOB accesses return undefined and all array elements are 42. // Importantly, nothing crashes. assertEquals(undefined, a[-kChunkSize - 1]); assertEquals(undefined, a[-kChunkSize]); assertEquals(undefined, a[-1]); assertEquals(42, a[0]); assertEquals(42, a[1]); // If this fails, then you probably tried to run this test without the // multi-mapped mock allocator. assertEquals(42, a[kChunkSize]); assertEquals(42, a[kChunkSize + 1]); assertEquals(42, a[kChunkSize + 1]); assertEquals(42, a[kSize - kChunkSize]); assertEquals(42, a[kSize - 1]); assertEquals(undefined, a[kSize]); assertEquals(undefined, a[kSize + 1]); assertEquals(undefined, a[kSize + kChunkSize]); assertEquals(undefined, a[kSize + kSize]); // Check that excessive requests throw (crbug.com/1042173, crbug.com/1042151). assertThrows(() => new ArrayBuffer(Number.MAX_SAFE_INTEGER));