Zuzu
view release on metacpan or search on metacpan
stdlib/tests/std/worker.zzs view on Meta::CPAN
from std/eval import eval;
from std/task import sleep;
from test/more import *;
from test/worker_contract import
await_cancelled,
await_worker_failure,
require_worker;
from test/worker_phase5/functions import worker_phase5_imported_add;
let Worker := require_worker();
const worker_suite_offset := 10;
function worker_suite_add_offset ( x ) {
return x + worker_suite_offset;
}
trait WorkerSuiteLabelled {
method label () -> String {
return "trait:" _ self.get_name();
}
}
class WorkerSuiteThing with WorkerSuiteLabelled {
let String name with get := "Ada";
}
class WorkerSuiteBox {
let Number value with get, set := 0;
method label ( String prefix ) -> String {
return prefix _ ":" _ value;
}
}
class WorkerSuiteReturnBox {
let String name with get, set := "unset";
method label () -> String {
return "box:" _ name;
}
}
async function test_spawn_values () {
ok( Worker can "spawn", "Worker exposes spawn" );
let scalar_task := Worker.spawn(
function ( x ) {
return x * 2;
},
[ 21 ],
);
is( typeof scalar_task, "Task", "Worker.spawn returns a Task" );
is( await { scalar_task; }, 42, "worker returns scalar result" );
let collection := await {
Worker.spawn(
function () {
return {
array: [ 1, 2, 3 ],
dict: { name: "Ada", score: 42 },
set: << "red", "blue", "red" >>,
bag: <<< 1, 1, 2 >>>,
};
},
[],
);
};
is( collection{array}, [ 1, 2, 3 ], "worker returns array" );
is( collection{dict}{name}, "Ada", "worker returns dict field" );
( run in 0.788 second using v1.01-cache-2.11-cpan-f03e8824b8d )