| // |jit-test| allow-oom |
| // Appending elements to a dense array should make the array sparse when the |
| // length exceeds the limit. |
| |
| function test() { |
| const MAX_DENSE_ELEMENTS_ALLOCATION = (1 << 28) - 1; |
| const VALUES_PER_HEADER = 2; |
| const MAX_DENSE_ELEMENTS_COUNT = MAX_DENSE_ELEMENTS_ALLOCATION - VALUES_PER_HEADER; |
| const SPARSE_DENSITY_RATIO = 8; |
| const MIN_DENSE = MAX_DENSE_ELEMENTS_COUNT / SPARSE_DENSITY_RATIO; |
| const MARGIN = 16; |
| |
| let a = []; |
| // Fill the beginning of array to make it keep dense until length exceeds |
| // MAX_DENSE_ELEMENTS_COUNT. |
| for (let i = 0; i < MIN_DENSE; i++) |
| a[i] = i; |
| |
| // Skip from MIN_DENSE to MAX_DENSE_ELEMENTS_COUNT - MARGIN, to reduce the |
| // time taken by test. |
| |
| // Fill the ending of array to make it sparse at MAX_DENSE_ELEMENTS_COUNT. |
| for (let i = MAX_DENSE_ELEMENTS_COUNT - MARGIN; i < MAX_DENSE_ELEMENTS_COUNT + MARGIN; i++) |
| a[i] = i; |
| |
| // Make sure the last element is defined. |
| assertEq(a.length, MAX_DENSE_ELEMENTS_COUNT + MARGIN); |
| assertEq(a[a.length - 1], MAX_DENSE_ELEMENTS_COUNT + MARGIN - 1); |
| |
| // Make sure elements around MAX_DENSE_ELEMENTS_COUNT are also defined. |
| assertEq(a[MAX_DENSE_ELEMENTS_COUNT - 1], MAX_DENSE_ELEMENTS_COUNT - 1); |
| assertEq(a[MAX_DENSE_ELEMENTS_COUNT], MAX_DENSE_ELEMENTS_COUNT); |
| assertEq(a[MAX_DENSE_ELEMENTS_COUNT + 1], MAX_DENSE_ELEMENTS_COUNT + 1); |
| } |
| |
| var config = getBuildConfiguration(); |
| // Takes too long time on debug build. |
| if (!config.debug) { |
| test(); |
| } |