view release on metacpan or search on metacpan
stdlib/test-modules/test/worker_contract.zzm view on Meta::CPAN
function require_worker () {
if ( Worker â¡ null ) {
skip_all( "module std/worker is unavailable" );
}
return Worker;
}
function require_worker_phase ( Number phase ) {
let Worker := require_worker();
return Worker;
}
async function await_worker_failure ( task ) {
try {
let result := await {
task;
};
die `worker task unexpectedly succeeded: ${result}`;
}
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();
stdlib/tests/std/worker/_001-import.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(1);
ok( Worker can "spawn", "Worker exposes spawn" );
done_testing();
stdlib/tests/std/worker/_002-return-scalar.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(1);
async function main () {
let task := Worker.spawn(
function ( x ) {
return x * 2;
},
[ 21 ],
);
is( typeof task, "Task", "Worker.spawn returns a Task" );
stdlib/tests/std/worker/_003-return-collection.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(1);
async function main () {
let result := await {
Worker.spawn(
function () {
return {
array: [ 1, 2, 3 ],
dict: { name: "Ada", score: 42 },
set: << "red", "blue", "red" >>,
bag: <<< 1, 1, 2 >>>,
stdlib/tests/std/worker/_004-copy-isolation.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(1);
async function main () {
let data := [ 1, 2 ];
let task := Worker.spawn(
function ( copy ) {
return [ copy[0], copy.length(), copy.get( 2, "missing" ) ];
},
[ data ],
);
stdlib/tests/std/worker/_005-worker-throws.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase, await_worker_failure;
let Worker := require_worker_phase(2);
async function main () {
let err := await {
await_worker_failure(
Worker.spawn(
function () {
die "worker-boom";
},
[],
),
stdlib/tests/std/worker/_006-deny-fs.zzs view on Meta::CPAN
from std/eval import eval;
from test/more import *;
from test/worker_contract import require_worker_phase, await_worker_failure;
let Worker := require_worker_phase(2);
async function main () {
let system_denials := await {
Worker.spawn(
function () {
return [
__system__{deny_fs},
__system__{deny_net},
__system__{deny_perl},
__system__{deny_js},
stdlib/tests/std/worker/_008-function-argument.zzs view on Meta::CPAN
from test/more import *;
from test/worker_phase5/functions import worker_phase5_imported_add;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
const worker_phase2_offset := 10;
function worker_phase2_add_offset ( x ) {
return x + worker_phase2_offset;
}
async function main () {
let result := await {
Worker.spawn(
stdlib/tests/std/worker/_009-object-method-argument.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
class WorkerPhase2Box {
let Number value with get, set := 0;
method label ( String prefix ) -> String {
return prefix _ ":" _ value;
}
}
async function main () {
stdlib/tests/std/worker/_010-class-trait-argument.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
trait WorkerPhase2Labelled {
method label () -> String {
return "trait:" _ self.get_name();
}
}
class WorkerPhase2Thing with WorkerPhase2Labelled {
let String name with get := "Ada";
}
stdlib/tests/std/worker/_011-return-object.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
class WorkerPhase2ReturnBox {
let String name with get, set := "unset";
method label () -> String {
return "box:" _ name;
}
}
async function main () {
stdlib/tests/std/worker/_012-unmarshalable-input.zzs view on Meta::CPAN
from std/marshal import MarshallingException, dump;
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
let err := exception( function () {
Worker.spawn(
function ( value ) {
return value;
},
[ dump ],
);
} );
stdlib/tests/std/worker/_013-unmarshalable-return.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase, await_worker_failure;
let Worker := require_worker_phase(3);
async function main () {
let err := await {
await_worker_failure(
Worker.spawn(
function () {
from std/marshal import dump;
return dump;
},
[],
stdlib/tests/std/worker/_014-deny-fs-before-load.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase, await_worker_failure;
let Worker := require_worker_phase(3);
class WorkerPhase2FsLoadBox {
method __on_load__ () {
from std/io import Path;
return new Path("not-read.txt").slurp_utf8();
}
}
async function main () {
let err := await {
stdlib/tests/std/worker/_015-cancel-running-worker.zzs view on Meta::CPAN
from std/task import sleep;
from test/more import *;
from test/worker_contract import require_worker_phase, await_cancelled;
let Worker := require_worker_phase(4);
async function main () {
let task := Worker.spawn(
function () {
from std/task import sleep;
return sleep(5);
},
[],
);
stdlib/tests/std/worker/_016-worker-failure-parent-survives.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase, await_worker_failure;
let Worker := require_worker_phase(4);
async function main () {
let err := await {
await_worker_failure(
Worker.spawn(
function () {
throw new Exception( message: "first worker failed" );
},
[],
),
stdlib/tests/std/worker/_017-detached-worker-shutdown.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(4);
Worker.spawn(
function () {
from std/task import sleep;
return sleep(5);
},
[],
);
pass( "detached worker does not block script completion" );
stdlib/tests/std/worker/_018-independent-workers.zzs view on Meta::CPAN
from std/task import all;
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(4);
async function main () {
let original := [ "parent" ];
let first := Worker.spawn(
function ( copy ) {
copy.push("first");
return copy;
},
[ original ],
);
stdlib/tests/std/worker/_019-cooperative-yield-cancel.zzs view on Meta::CPAN
from std/task import sleep;
from test/more import *;
from test/worker_contract import require_worker_phase, await_cancelled;
let Worker := require_worker_phase(4);
async function main () {
let task := Worker.spawn(
async function () {
from std/task import yield;
let i := 0;
while ( i < 1000000 ) {
i := i + 1;
if ( i mod 100 = 0 ) {
await {
stdlib/tests/std/worker/_020-result-convenience.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker_phase;
let Worker := require_worker_phase(3);
async function main () {
let plain := await {
Worker.spawn(
function () {
return { answer: 42 };
},
[],
);
};
stdlib/tests/std/worker/_021-handle-basic.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker;
let Worker := require_worker();
if ( not( Worker can "spawn_handle" ) ) {
skip_all( "Worker.spawn_handle is unavailable" );
}
async function main () {
let handle := Worker.spawn_handle(
async function ( inbox, prefix ) {
let value := await {
inbox.recv();
stdlib/tests/std/worker/_022-handle-ordering.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker;
let Worker := require_worker();
if ( not( Worker can "spawn_handle" ) ) {
skip_all( "Worker.spawn_handle is unavailable" );
}
async function main () {
let handle := Worker.spawn_handle(
async function ( inbox ) {
let first := await {
inbox.recv();
stdlib/tests/std/worker/_023-handle-marshal-values.zzs view on Meta::CPAN
from std/result import Result;
from test/more import *;
from test/worker_contract import require_worker;
let Worker := require_worker();
if ( not( Worker can "spawn_handle" ) ) {
skip_all( "Worker.spawn_handle is unavailable" );
}
class WorkerHandleBox {
let String name with get, set := "unset";
method label () {
return "box:" _ name;
stdlib/tests/std/worker/_024-handle-close-cancel.zzs view on Meta::CPAN
from test/more import *;
from test/worker_contract import require_worker, await_cancelled;
let Worker := require_worker();
if ( not( Worker can "spawn_handle" ) ) {
skip_all( "Worker.spawn_handle is unavailable" );
}
async function main () {
let closer := Worker.spawn_handle(
function ( inbox ) {
inbox.close();
return "closed";