=begin pod
=head1 NAME

Test::Async - asynchronous, thread-sage testing

=head1 SYNOPSYS

    use Test::Async;

    plan 2, :parallel;
    subtest "Async 1" => {
        plan 1;
        pass "a test";
    }
    subtest "Async 2" => {
        plan 1;
        pass "another test";
    }

=head1 DESCRIPTION

C<Test::Async> provides a framework and a base set of tests tools compatible with the standard Raku C<Test> module. But
contrary to the standard, C<Test::Async> has been developed with two primary goals in mind: concurrency and
extensibility.

Here is the key features provided:

=item event-driven, threaded, and OO core
=item easy development of 3rd party test bundles
=item asynchronous and/or random execution of subtests
=item support of threaded user code

The SYNOPSYS section provides an example where two subtests would be started in parallel, each in its own thread. This
allows to achieve two goals: speed up big test suits by splitting them in smaller chunks; and testing for
possible concurrency problems in tested code.

With

    plan $count, :random;

subtests will be executed in random order. In this mode it is possible to catch another class of errors caused by code
being dependent on the order execution.

It is also possible to combine both I<parallel> and I<random> modes of operation.

=head1 READ MORE

L<C<Test::Async::Manual>|https://github.com/vrurg/raku-Test-Async/blob/v0.0.13/docs/md/Test/Async/Manual.md>,
L<C<Test::Async::CookBook>|https://github.com/vrurg/raku-Test-Async/blob/v0.0.13/docs/md/Test/Async/CookBook.md>,
L<C<Test::Async>|https://github.com/vrurg/raku-Test-Async/blob/v0.0.13/docs/md/Test/Async.md>,
L<C<Test::Async::Base>|https://github.com/vrurg/raku-Test-Async/blob/v0.0.13/docs/md/Test/Async/Base.md>

=end pod
