summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/web-snapshot/web-snapshot-array-buffer.js
blob: ddf37d58c8179165a1ad4f6ff6a438d925d7e397 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright 2022 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: --experimental-d8-web-snapshot-api --allow-natives-syntax --harmony-rab-gsab --verify-heap

'use strict';

d8.file.execute('test/mjsunit/web-snapshot/web-snapshot-helpers.js');


(function TestSharedArrayBuffer() {
  function createObjects() {
    const growableArrayBuffer = new SharedArrayBuffer(5, { maxByteLength: 10 });
    globalThis.growableArrayBuffer = growableArrayBuffer;
    const array1 = new Uint8Array(growableArrayBuffer);
    for (let i = 0; i < 5; i++) {
      array1[i] = i;
    }

    const arrayBuffer = new SharedArrayBuffer(5);
    globalThis.arrayBuffer = arrayBuffer;
    const array2 = new Uint8Array(arrayBuffer);
    for (let i = 0; i < 5; i++) {
      array2[i] = i;
    }
  }
  const { growableArrayBuffer, arrayBuffer } = takeAndUseWebSnapshot(createObjects, ['growableArrayBuffer', 'arrayBuffer']);
  assertEquals(5, growableArrayBuffer.byteLength);
  assertEquals(10, growableArrayBuffer.maxByteLength);
  assertTrue(growableArrayBuffer.growable);
  const array1 = new Uint8Array(growableArrayBuffer);
  for (let i = 0; i < 5; i++) {
    assertEquals(array1[i], i);
  }

  assertEquals(arrayBuffer.byteLength, 5);
  assertEquals(arrayBuffer.maxByteLength, 5);
  assertFalse(arrayBuffer.growable, false);
  const array2 = new Uint8Array(arrayBuffer);
  for (let i = 0; i < 5; i++) {
    assertEquals(array2[i], i);
  }
})();

(function TestArrayBuffer() {
  function createObjects() {
    const resizableArrayBuffer = new ArrayBuffer(5, {maxByteLength: 10});
    globalThis.resizableArrayBuffer = resizableArrayBuffer;
    const array1 = new Uint8Array(resizableArrayBuffer);
    for (let i = 0; i < 5; i++) {
      array1[i] = i;
    }

    const arrayBuffer = new ArrayBuffer(5);
    globalThis.arrayBuffer = arrayBuffer;
    const array2 = new Uint8Array(arrayBuffer);
    for (let i = 0; i < 5; i++) {
      array2[i] = i;
    }

    const detachedArrayBuffer = new ArrayBuffer(5);
    %ArrayBufferDetach(detachedArrayBuffer);
    globalThis.detachedArrayBuffer = detachedArrayBuffer;
  }
  const { resizableArrayBuffer, arrayBuffer, detachedArrayBuffer } = takeAndUseWebSnapshot(createObjects, ['resizableArrayBuffer', 'arrayBuffer', 'detachedArrayBuffer']);
  assertEquals(5, resizableArrayBuffer.byteLength);
  assertEquals(10, resizableArrayBuffer.maxByteLength);
  assertTrue(resizableArrayBuffer.resizable)
  const array1 = new Uint8Array(resizableArrayBuffer);
  for (let i = 0; i < 5; i++) {
    assertEquals(array1[i], i);
  }

  assertEquals(5, arrayBuffer.byteLength);
  assertEquals(5, arrayBuffer.maxByteLength);
  assertFalse(arrayBuffer.resizable)
  const array2 = new Uint8Array(arrayBuffer);
  for (let i = 0; i < 5; i++) {
    assertEquals(array2[i], i);
  }

  assertEquals(0, detachedArrayBuffer.byteLength);
  assertEquals(0, detachedArrayBuffer.maxByteLength);
})()