{"id":16302220,"url":"https://github.com/vrurg/raku-test-async","last_synced_at":"2025-10-25T13:32:01.562Z","repository":{"id":60324171,"uuid":"255494800","full_name":"vrurg/raku-Test-Async","owner":"vrurg","description":"Asynchronous, thread-sage testing and more!","archived":false,"fork":false,"pushed_at":"2024-04-10T14:17:40.000Z","size":1030,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-04-10T17:12:18.558Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Raku","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"artistic-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vrurg.png","metadata":{"files":{"readme":"README.html","changelog":"ChangeLog.html","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-04-14T02:52:56.000Z","updated_at":"2022-05-28T17:36:54.000Z","dependencies_parsed_at":"2023-12-10T02:24:48.699Z","dependency_job_id":"c03b13ed-6341-4ef6-b6dd-fb2e28a022c4","html_url":"https://github.com/vrurg/raku-Test-Async","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vrurg%2Fraku-Test-Async","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vrurg%2Fraku-Test-Async/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vrurg%2Fraku-Test-Async/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vrurg%2Fraku-Test-Async/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vrurg","download_url":"https://codeload.github.com/vrurg/raku-Test-Async/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219865555,"owners_count":16555929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T20:56:46.561Z","updated_at":"2025-10-25T13:32:01.157Z","avatar_url":"https://github.com/vrurg.png","language":"Raku","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\u003cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"\u003e\n    \u003ctitle\u003eREADME\u003c/title\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cstyle\u003ehr,\nimg {\n    box-sizing: content-box\n}\nbody::after,\nbody::before,\nhr::after,\nhr::before {\n    display: table;\n    content: \"\"\n}\na,\na:not([href]) {\n    text-decoration: none\n}\n\nhr,\nsvg:not(:root) {\n    overflow: hidden\n}\n\nimg,\ntable tr {\n    background-color: #fff\n}\n\npre,\ntable {\n    overflow: auto\n}\n\ndl,\ndl dt,\nhr,\npre code,\npre\u003ecode,\ntd,\nth {\n    padding: 0\n}\n\ninput,\npre code {\n    overflow: visible\n}\n\npre,\npre code {\n    word-wrap: normal\n}\n\nbody {\n    -ms-text-size-adjust: 100%;\n    -webkit-text-size-adjust: 100%;\n    color: #333;\n    font-family: \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    font-size: 16px;\n    line-height: 1.5;\n    word-wrap: break-word;\n    width: 820px;\n    margin: 2em auto;\n}\n\na {\n    background-color: transparent;\n    -webkit-text-decoration-skip: objects;\n    color: #4078c0\n}\n\na:active,\na:hover {\n    outline-width: 0;\n    text-decoration: underline\n}\n\nh1 {\n    margin: .67em 0\n}\n\nimg {\n    border-style: none;\n    max-width: 100%\n}\n\nh1,\nh2 {\n    padding-bottom: .3em;\n    border-bottom: 1px solid #eee\n}\n\ninput {\n    font: inherit;\n    margin: 0;\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit\n}\n\n* {\n    box-sizing: border-box\n}\n\nstrong {\n    font-weight: 600\n}\n\nbody::after,\nhr::after {\n    clear: both\n}\n\ntable {\n    border-spacing: 0;\n    border-collapse: collapse;\n    display: block;\n    width: 100%\n}\n\nblockquote {\n    margin: 0;\n    padding: 0 1em;\n    color: #777;\n    border-left: .25em solid #ddd\n}\n\nol ol,\nul ol {\n    list-style-type: lower-roman\n}\n\nol ol ol,\nol ul ol,\nul ol ol,\nul ul ol {\n    list-style-type: lower-alpha\n}\n\ndd {\n    margin-left: 0\n}\n\ncode {\n    font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace\n}\n\npre {\n    font: 12px Consolas, \"Liberation Mono\", Menlo, Courier, monospace\n}\n\ninput {\n    -webkit-font-feature-settings: \"liga\" 0;\n    font-feature-settings: \"liga\" 0\n}\n\nbody\u003e:first-child {\n    margin-top: 0!important\n}\n\nbody\u003e:last-child {\n    margin-bottom: 0!important\n}\n\na:not([href]) {\n    color: inherit\n}\n\nblockquote,\ndl,\nol,\np,\npre,\ntable,\nul {\n    margin-top: 0;\n    margin-bottom: 16px\n}\n\nhr {\n    background: #e7e7e7;\n    height: .25em;\n    margin: 24px 0;\n    border: 0\n}\n\nblockquote\u003e:first-child {\n    margin-top: 0\n}\n\nblockquote\u003e:last-child {\n    margin-bottom: 0\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n    margin-top: 24px;\n    margin-bottom: 16px;\n    font-weight: 600;\n    line-height: 1.25\n}\n\ndl dt,\ntable th {\n    font-weight: 700\n}\n\nh1 code,\nh1 tt,\nh2 code,\nh2 tt,\nh3 code,\nh3 tt,\nh4 code,\nh4 tt,\nh5 code,\nh5 tt,\nh6 code,\nh6 tt {\n    font-size: inherit\n}\n\nh1 {\n    font-size: 2em\n}\n\nh2 {\n    font-size: 1.5em\n}\n\nh3 {\n    font-size: 1.25em\n}\n\nh4 {\n    font-size: 1em\n}\n\nh5 {\n    font-size: .875em\n}\n\nh6 {\n    font-size: .85em;\n    color: #777\n}\n\nol,\nul {\n    padding-left: 2em\n}\n\nol ol,\nol ul,\nul ol,\nul ul {\n    margin-top: 0;\n    margin-bottom: 0\n}\n\nli\u003ep {\n    margin-top: 16px\n}\n\nli+li {\n    margin-top: .25em\n}\n\ndl dt {\n    margin-top: 16px;\n    font-size: 1em;\n    font-style: italic\n}\n\ndl dd {\n    padding: 0 16px;\n    margin-bottom: 16px\n}\n\ntable td,\ntable th {\n    padding: 6px 13px;\n    border: 1px solid #ddd\n}\n\ntable tr {\n    border-top: 1px solid #ccc\n}\n\ntable tr:nth-child(2n) {\n    background-color: #f8f8f8\n}\n\ncode {\n    padding: .2em 0;\n    margin: 0;\n    font-size: 85%;\n    background-color: rgba(0, 0, 0, .04);\n    border-radius: 3px\n}\n\ncode::after,\ncode::before {\n    letter-spacing: -.2em;\n    content: \"\\00a0\"\n}\n\npre\u003ecode {\n    margin: 0;\n    font-size: 100%;\n    word-break: normal;\n    white-space: pre;\n    background: 0 0;\n    border: 0\n}\n\npre {\n    padding: 16px;\n    font-size: 85%;\n    line-height: 1.45;\n    background-color: #f7f7f7;\n    border-radius: 3px\n}\n\npre code {\n    display: inline;\n    max-width: auto;\n    margin: 0;\n    line-height: inherit;\n    background-color: transparent;\n    border: 0\n}\n\npre code::after,\npre code::before {\n    content: normal\n}\n\nkbd {\n    display: inline-block;\n    padding: 3px 5px;\n    font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    line-height: 10px;\n    color: #555;\n    vertical-align: middle;\n    background-color: #fcfcfc;\n    border: 1px solid #ccc;\n    border-bottom-color: #bbb;\n    border-radius: 3px;\n    box-shadow: inset 0 -1px 0 #bbb\n}\n\nhr {\n    border-bottom-color: #eee\n}\n\u003c/style\u003e\n\n    \n\u003cstyle class=\"build-tools-gen-doc\"\u003e.toc-level-1 .toc-text { padding-left: 1.5em; }\n.toc-level-2 .toc-text { padding-left: 2.5em; }\n.toc-level-3 .toc-text { padding-left: 3.5em; }\n.toc-level-4 .toc-text { padding-left: 4.5em; }\n.toc-level-5 .toc-text { padding-left: 5.5em; }\n#TOC * { border-width: 0; }\nli \u003e p { margin: inherit; }\nli \u003e .pod-block-code { margin-top: 16px; }\n\u003c/style\u003e\u003c/head\u003e\n\n\u003cbody class=\"pod\"\u003e\n    \u003cdiv id=\"___top\"\u003e\u003c/div\u003e\n    \u003cnav class=\"indexgroup\"\u003e\n\u003ctable id=\"TOC\"\u003e\n\u003ccaption\u003e\u003ch2 id=\"TOC_Title\"\u003eTable of Contents\u003c/h2\u003e\u003c/caption\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e1\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#NAME\"\u003eNAME\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e2\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#SYNOPSYS\"\u003eSYNOPSYS\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e3\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#DESCRIPTION\"\u003eDESCRIPTION\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e4\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#WAY_MORE_IN\"\u003eWAY MORE IN\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e5\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#COPYRIGHT\"\u003eCOPYRIGHT\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"toc-level-1\"\u003e\u003ctd class=\"toc-number\"\u003e6\u003c/td\u003e\u003ctd class=\"toc-text\"\u003e\u003ca href=\"#LICENSE\"\u003eLICENSE\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\n\n\u003c/table\u003e\n\u003c/nav\u003e\n\n\n    \u003cdiv class=\"pod-body\"\u003e\n    \u003ch1 id=\"NAME\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eNAME\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eTest::Async\u003c/code\u003e - asynchronous, thread-sage testing\u003c/p\u003e\n\u003ch1 id=\"SYNOPSYS\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eSYNOPSYS\u003c/a\u003e\u003c/h1\u003e\n\u003cpre class=\"pod-block-code\"\u003euse Test::Async;\n\nplan 2, :parallel;\n\nsubtest \"Async 1\" =\u0026gt; {\n    plan 1;\n    pass \"a test\"\n}\n\nsubtest \"Async 2\" =\u0026gt; {\n    plan 1;\n    pass \"another test\"\n}\n\u003c/pre\u003e\n\u003ch1 id=\"DESCRIPTION\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eDESCRIPTION\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eTest::Async\u003c/code\u003e provides a framework and a base set of tests tools compatible with the standard Raku \u003ccode\u003eTest\u003c/code\u003e module. But contrary to the standard, \u003ccode\u003eTest::Async\u003c/code\u003e has been developed with two primary goals in mind: concurrency and extensibility.\u003c/p\u003e\n\u003cp\u003eHere is the key features provided:\u003c/p\u003e\n\u003cul\u003e\u003cli\u003e\u003cp\u003eevent-driven, threaded, and OO core\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eeasy development of 3rd party test bundles\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003easynchronous and/or random execution of subtests\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003esupport of threaded user code\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe 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.\u003c/p\u003e\n\u003cp\u003eWith\u003c/p\u003e\n\u003cpre class=\"pod-block-code\"\u003eplan $count, :random;\u003c/pre\u003e\n\u003cp\u003esubtests 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.\u003c/p\u003e\n\u003cp\u003eIt is also possible to combine both \u003cem\u003eparallel\u003c/em\u003e and \u003cem\u003erandom\u003c/em\u003e modes of operation.\u003c/p\u003e\n\u003ch1 id=\"WAY_MORE_IN\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eWAY MORE IN\u003c/a\u003e\u003c/h1\u003e\n\u003cul\u003e\u003cli\u003e\u003cp\u003e\u003ca href=\"docs/html/Test/Async/Manual.html\"\u003e\u003ccode\u003eTest::Async::Manual\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ca href=\"docs/html/Test/Async/CookBook.html\"\u003e\u003ccode\u003eTest::Async::CookBook\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ca href=\"docs/html/Test/Async.html\"\u003e\u003ccode\u003eTest::Async\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ca href=\"docs/html/Test/Async/Base.html\"\u003e\u003ccode\u003eTest::Async::Base\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ca href=\"ChangeLog.html\"\u003e\u003ccode\u003eChangeLog\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003ca href=\"INDEX.html\"\u003e\u003ccode\u003eINDEX\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"COPYRIGHT\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eCOPYRIGHT\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003e(c) 2023, Vadim Belman \u0026lt;vrurg@cpan.org\u0026gt;\u003c/p\u003e\n\u003ch1 id=\"LICENSE\"\u003e\u003ca class=\"u\" href=\"#___top\" title=\"go to top of document\"\u003eLICENSE\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eArtistic License 2.0\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"LICENSE\"\u003e\u003cem\u003eLICENSE\u003c/em\u003e\u003c/a\u003e file in this distribution.\u003c/p\u003e\n\n    \u003c/div\u003e\n\n    \n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvrurg%2Fraku-test-async","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvrurg%2Fraku-test-async","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvrurg%2Fraku-test-async/lists"}