use strict;
use warnings;

use Test::More;

use Parallel::Async;

my $task = async {
    note $$;
    return (@_, $$);
};

subtest 'single task' => sub {
    my @res = $task->recv(1, 2, 3);
    is_deeply \@res, [1, 2, 3, $task->child_pid];

    @res = $task->reset->recv(4, 5, 6);
    is_deeply \@res, [4, 5, 6, $task->child_pid];
};

subtest 'multi task' => sub {
    my @tasks = map { $task->clone } 1..3;
    my $chain = $tasks[0]->join(@tasks[1, 2]);

    my @res = $chain->recv(1, 2, 3);
    is_deeply \@res, [
        [1, 2, 3, $tasks[0]->child_pid],
        [1, 2, 3, $tasks[1]->child_pid],
        [1, 2, 3, $tasks[2]->child_pid],
    ];

    @res = $chain->reset->recv(4, 5, 6);
    is_deeply \@res, [
        [4, 5, 6, $tasks[0]->child_pid],
        [4, 5, 6, $tasks[1]->child_pid],
        [4, 5, 6, $tasks[2]->child_pid],
    ];
};

done_testing;