Zuzu

 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";



( run in 1.070 second using v1.01-cache-2.11-cpan-f03e8824b8d )