{"id":14965975,"url":"https://github.com/raku/roast","last_synced_at":"2025-12-17T02:55:17.351Z","repository":{"id":1055393,"uuid":"888060","full_name":"Raku/roast","owner":"Raku","description":"🦋 Raku test suite","archived":false,"fork":false,"pushed_at":"2025-03-21T11:23:05.000Z","size":36285,"stargazers_count":184,"open_issues_count":135,"forks_count":135,"subscribers_count":133,"default_branch":"master","last_synced_at":"2025-03-25T06:15:35.753Z","etag":null,"topics":["hacktoberfest","raku"],"latest_commit_sha":null,"homepage":"https://raku.org/","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/Raku.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"publiccode":null,"codemeta":null}},"created_at":"2010-09-04T16:33:49.000Z","updated_at":"2025-03-21T11:23:10.000Z","dependencies_parsed_at":"2023-02-19T11:01:31.077Z","dependency_job_id":"f79e67bc-6980-4ede-bfd2-caa3586d7a9b","html_url":"https://github.com/Raku/roast","commit_stats":{"total_commits":17005,"total_committers":304,"mean_commits":55.9375,"dds":0.8845045574830932,"last_synced_commit":"05c4882fc759b229bbb7f1114577bc694aa6c76e"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raku%2Froast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raku%2Froast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raku%2Froast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Raku%2Froast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Raku","download_url":"https://codeload.github.com/Raku/roast/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246610835,"owners_count":20805255,"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":["hacktoberfest","raku"],"created_at":"2024-09-24T13:35:38.486Z","updated_at":"2025-12-17T02:55:17.339Z","avatar_url":"https://github.com/Raku.png","language":"Raku","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Official Raku Test Suite\n\nThe purpose of the test suite is to validate implementations that wish to be known\nas a conforming Raku.\n\n#### Contents\n\n-  [Introduction](#introduction)\n\n-  [Test Utilities](#test-utilities)\n\n-  [Environmental Variables](#environmental-variables)\n\n-  [Contributing](CONTRIBUTING.md)\n\n## Introduction\n\nPlease consider this test suite to be the bleeding edge of Raku\ndevelopment.  New tests, tests for proposed new features, etc.,\nwill live on this 'master' branch.  Once a specification is cut, a tag\nwill be created for that version of the spec, e.g., `6.c` for *Christmas*\nlanguage release.  If errata become available, they will be kept in an `-errata`\nbranch for that specific language version, e.g. `6.c-errata` for `6.c`.\n\nAs they develop, different implementations will certainly be in\ndifferent states of readiness with respect to the test suite, so\nin order for the various implementations to track their progress\nindependently, we've established a mechanism for _fudging_ the\ntests in a kind of failsoft fashion.  To pass a test officially,\nan implementation must be able to run a test file unmodified, but an\nimplementation may (temporarily) skip tests or mark them as \"todo\" via\nthe fudging mechanism, which is implemented via the `fudge` preprocessor.\nIndividual implementations are not allowed to modify the actual test\ncode, but may insert line comments before each actual test (or block\nof tests) that changes how those tests are to be treated for this\nplatform.  The `fudge` preprocessor pays attention only to the comments\nthat belong to the current implementation and ignores all the rest.  If your\nimplementation is named \"rakudo\" then your special comment lines look like:\n\n    #?rakudo: [NUM] VERB ARGS\n\n(The colon is optional.)\n\nThe optional NUM says how many statements or blocks to apply the\nverb to.  (If not supplied, a value of 1 is assumed).  A statement\nis arbitrarily defined as one or more lines starting with a test call\nand ending in a semicolon (with an optional comment).\n\nVERBs include:\n\n    skip \"reason\"\t# skip test entirely\n    eval \"reason\"\t# eval the test because it doesn't parse yet\n    try \"reason\"\t# try the test because it throws exception\n    todo \"reason\"\t# mark \"todo\" because \"not ok\" is expected\n    emit code\t\t# insert code (such as \"skip-rest();\") inline\n\nAll fudged tests return an exit code of 1 by default, so the test harness\nwill mark it as \"dubious\" even if all the tests supposedly pass.\n\nYou may also negate the test:\n\n    #!rakudo [NUM] VERB ARGS\n\nThis will apply the verb on any system that *isn't* rakudo.\n\nSometimes environment variables distinguish syntactic or semantic\nvariants, so you may apply a verb depending on the presence or absence\nof such a setting:\n\n    #?MYSPECIALVAR [NUM] VERB ARGS\n    #!MYSPECIALVAR [NUM] VERB ARGS\n\nThe environment variable must be uppercase.\n\nThere is also the following directive which modifies the test count of\nthe next construct:\n\n    #?DOES count\n\nThe count may be an expression as long as any variables referenced in\nthe expression are in scope at the location `fudge` eventually inserts a\n\"skip()\" call.\n\nWhen applied to a subsequent sub definition, `fudge` registers the sub name as\ndoing that many tests when called.  Note, however, that any skipping\nis done at the point of the call, not within the subroutine, so the count\nmay not refer to any parameter of the sub.\n\nWhen you run the `fudge` preprocessor, if it decides the test needs\nfudging, it returns the new fudged filename; otherwise it returns\nthe original filename.  (Generally you don't run `fudge` directly,\nbut your test harness runs the `fudgeall` program for you; see below.)\nIf there is already a fudged program in the directory that is newer\nthan the unfudged version, `fudge` just returns the fudged version\nwithout regenerating it.  If the fudged version is older, it removes\nit and then decides anew whether to regenerate it based on the internal\nfudge comments.\n\nThe `fudgeall` program may be called to process all the needed fudging\nfor a particular implementation:\n\n```\n$ fudgeall rakudo */*.t */*/*.t\n```\n\nProgram `fudgeall` will use the `fudge` program to translate any fudged files to a new\nfile where the extension is not `*.t` but instead is `*.rakudo` to indicate\nthe implementation dependency.  It also returns the fudged list of filenames\nto run, where unfudged tests are just passed through unchanged as `*.t`.\nEach test comes through as either fudged or not, but never both.\nThe test harness then runs the selected test files as it normally\nwould (it shouldn't care whether they are named `*.t` or `*.rakudo`).\n\nIn cases where the current working directory makes a difference, the tests\nassume that the working directory is the root of the test suite, so that the\nrelative path to itself is `t/spec/S\\d\\d-$section/$filename`.\n\nTo fudge and run `prove` on a specific file:\n\n    ./fudgeandrun S05-metasyntax/angle-brackets.t\n\n`fudgeandrun` does not assume any particular implementation but guesses by running\n`perl6` to look at special variables like `$*PERL`.  See `fudgeandrun` usage to\nspecify a different implementation and other options.\n\n## Test Utilities\n\nThis repository contains\n[`Test::Util` module](packages/Test-Helpers/lib/Test/Util.rakumod) with helper routines\nyou can use when writing tests.  See POD documentation included at the end of\nthe [module's source code](packages/Test-Helpers/lib/Test/Util.rakumod).  To include\nthe module, in your test file, you need to add `use lib` line to your test file.\n\n    use lib $?FILE.IO.parent(2).add: 'packages/Test-Helpers';\n    use Test::Util;\n    use Test;\n\nDepending on the location of your test file, the number inside `.parent(2)`\nmay need to be adjusted to go up the correct number of times from the test\nfiles's location to the root of the repository.\n\n## Appendices\n\nThe [`APPENDICES`](APPENDICES/) directory contains advisory tests implentations\nmay optionally choose to follow.  See the [`README`](APPENDICES/README.md)\nincluded in that directory for more information.\n\nAPPENDICES are not included in released versions of the specification.\n\n## Environmental Variables\n\n- **ROAST_TIMING_SCALE**\n\nSome tests rely on a process to complete in a certain amount of time.  If you're\nrunning on a slowish computer, try setting **ROAST_TIMING_SCALE** to a larger\nvalue that will be used as a multiplier for the time to wait.  We don't wait for\ntoo long a time by default so as to make the roast run faster.  Defaults to `1`.\n\n## Contributing\n\nRoast is Copyright © [The Raku Foundation](https://raku.foundation) and is\ndistributed under the terms of the Artistic License 2.0 (see [LICENSE](LICENSE)\nfile for details).\n\nTo contribute to Roast, please refer to [CONTRIBUTING.md](CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraku%2Froast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraku%2Froast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraku%2Froast/lists"}