Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vrurg/raku-test-async

Asynchronous, thread-sage testing and more!
https://github.com/vrurg/raku-test-async

Last synced: 3 months ago
JSON representation

Asynchronous, thread-sage testing and more!

Awesome Lists containing this project

README

        

README

hr,
img {
box-sizing: content-box
}
body::after,
body::before,
hr::after,
hr::before {
display: table;
content: ""
}
a,
a:not([href]) {
text-decoration: none
}

hr,
svg:not(:root) {
overflow: hidden
}

img,
table tr {
background-color: #fff
}

pre,
table {
overflow: auto
}

dl,
dl dt,
hr,
pre code,
pre>code,
td,
th {
padding: 0
}

input,
pre code {
overflow: visible
}

pre,
pre code {
word-wrap: normal
}

body {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
color: #333;
font-family: "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
width: 820px;
margin: 2em auto;
}

a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
color: #4078c0
}

a:active,
a:hover {
outline-width: 0;
text-decoration: underline
}

h1 {
margin: .67em 0
}

img {
border-style: none;
max-width: 100%
}

h1,
h2 {
padding-bottom: .3em;
border-bottom: 1px solid #eee
}

input {
font: inherit;
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit
}

* {
box-sizing: border-box
}

strong {
font-weight: 600
}

body::after,
hr::after {
clear: both
}

table {
border-spacing: 0;
border-collapse: collapse;
display: block;
width: 100%
}

blockquote {
margin: 0;
padding: 0 1em;
color: #777;
border-left: .25em solid #ddd
}

ol ol,
ul ol {
list-style-type: lower-roman
}

ol ol ol,
ol ul ol,
ul ol ol,
ul ul ol {
list-style-type: lower-alpha
}

dd {
margin-left: 0
}

code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace
}

pre {
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace
}

input {
-webkit-font-feature-settings: "liga" 0;
font-feature-settings: "liga" 0
}

body>:first-child {
margin-top: 0!important
}

body>:last-child {
margin-bottom: 0!important
}

a:not([href]) {
color: inherit
}

blockquote,
dl,
ol,
p,
pre,
table,
ul {
margin-top: 0;
margin-bottom: 16px
}

hr {
background: #e7e7e7;
height: .25em;
margin: 24px 0;
border: 0
}

blockquote>:first-child {
margin-top: 0
}

blockquote>:last-child {
margin-bottom: 0
}

h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25
}

dl dt,
table th {
font-weight: 700
}

h1 code,
h1 tt,
h2 code,
h2 tt,
h3 code,
h3 tt,
h4 code,
h4 tt,
h5 code,
h5 tt,
h6 code,
h6 tt {
font-size: inherit
}

h1 {
font-size: 2em
}

h2 {
font-size: 1.5em
}

h3 {
font-size: 1.25em
}

h4 {
font-size: 1em
}

h5 {
font-size: .875em
}

h6 {
font-size: .85em;
color: #777
}

ol,
ul {
padding-left: 2em
}

ol ol,
ol ul,
ul ol,
ul ul {
margin-top: 0;
margin-bottom: 0
}

li>p {
margin-top: 16px
}

li+li {
margin-top: .25em
}

dl dt {
margin-top: 16px;
font-size: 1em;
font-style: italic
}

dl dd {
padding: 0 16px;
margin-bottom: 16px
}

table td,
table th {
padding: 6px 13px;
border: 1px solid #ddd
}

table tr {
border-top: 1px solid #ccc
}

table tr:nth-child(2n) {
background-color: #f8f8f8
}

code {
padding: .2em 0;
margin: 0;
font-size: 85%;
background-color: rgba(0, 0, 0, .04);
border-radius: 3px
}

code::after,
code::before {
letter-spacing: -.2em;
content: "\00a0"
}

pre>code {
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: 0 0;
border: 0
}

pre {
padding: 16px;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px
}

pre code {
display: inline;
max-width: auto;
margin: 0;
line-height: inherit;
background-color: transparent;
border: 0
}

pre code::after,
pre code::before {
content: normal
}

kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: 1px solid #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
}

hr {
border-bottom-color: #eee
}


.toc-level-1 .toc-text { padding-left: 1.5em; }
.toc-level-2 .toc-text { padding-left: 2.5em; }
.toc-level-3 .toc-text { padding-left: 3.5em; }
.toc-level-4 .toc-text { padding-left: 4.5em; }
.toc-level-5 .toc-text { padding-left: 5.5em; }
#TOC * { border-width: 0; }
li > p { margin: inherit; }
li > .pod-block-code { margin-top: 16px; }


Table of Contents


1NAME
2SYNOPSYS
3DESCRIPTION
4WAY MORE IN
5COPYRIGHT
6LICENSE


NAME


Test::Async - asynchronous, thread-sage testing


SYNOPSYS


use Test::Async;

plan 2, :parallel;

subtest "Async 1" => {
plan 1;
pass "a test"
}

subtest "Async 2" => {
plan 1;
pass "another test"
}


DESCRIPTION


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


Here is the key features provided:




  • event-driven, threaded, and OO core




  • easy development of 3rd party test bundles




  • asynchronous and/or random execution of subtests




  • 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 parallel and random modes of operation.


WAY MORE IN



COPYRIGHT


(c) 2023, Vadim Belman <[email protected]>


LICENSE


Artistic License 2.0


See the LICENSE file in this distribution.