summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/shared-memory/shared-array-workers.js
blob: 231b1f4a3fee34ed19f4dcadd45bc965bdc1bdf1 (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
// 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: --shared-string-table --harmony-struct
// --allow-natives-syntax

'use strict';

if (this.Worker) {
  (function TestSharedArrayPostMessage() {
    let workerScript = `onmessage = function(arr) {
         arr[0][0] = 42;
         arr[1] = "worker";
         arr[2].payload = "updated";
         postMessage("done");
       };
       postMessage("started");`;

    let worker = new Worker(workerScript, {type: 'string'});
    let started = worker.getMessage();
    assertEquals('started', started);

    let outer_arr = new SharedArray(3);
    outer_arr[0] = new SharedArray(1);
    outer_arr[1] = 'main';
    let Struct = new SharedStructType(['payload']);
    let struct = new Struct();
    struct.payload = 'original';
    outer_arr[2] = struct;
    assertEquals('main', outer_arr[1]);
    assertEquals(undefined, outer_arr[0][0]);
    worker.postMessage(outer_arr);
    assertEquals('done', worker.getMessage());
    assertEquals('worker', outer_arr[1]);
    assertEquals(42, outer_arr[0][0]);
    assertEquals('updated', outer_arr[2].payload);

    worker.terminate();
  })();
}