Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Perl 6 test suite

tree: ebb9ec5713

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 S01-perl-5-integration
Octocat-spinner-32 S02-lexical-conventions
Octocat-spinner-32 S02-lists
Octocat-spinner-32 S02-literals
Octocat-spinner-32 S02-magicals
Octocat-spinner-32 S02-names-vars
Octocat-spinner-32 S02-names
Octocat-spinner-32 S02-one-pass-parsing
Octocat-spinner-32 S02-types
Octocat-spinner-32 S03-binding
Octocat-spinner-32 S03-feeds
Octocat-spinner-32 S03-junctions
Octocat-spinner-32 S03-metaops
Octocat-spinner-32 S03-operators
Octocat-spinner-32 S03-sequence
Octocat-spinner-32 S03-smartmatch
Octocat-spinner-32 S04-blocks-and-statements
Octocat-spinner-32 S04-declarations
Octocat-spinner-32 S04-exception-handlers
Octocat-spinner-32 S04-exceptions
Octocat-spinner-32 S04-phasers
Octocat-spinner-32 S04-statement-modifiers
Octocat-spinner-32 S04-statement-parsing
Octocat-spinner-32 S04-statements
Octocat-spinner-32 S05-capture
Octocat-spinner-32 S05-grammar
Octocat-spinner-32 S05-interpolation
Octocat-spinner-32 S05-mass
Octocat-spinner-32 S05-match
Octocat-spinner-32 S05-metachars
Octocat-spinner-32 S05-metasyntax
Octocat-spinner-32 S05-modifier
Octocat-spinner-32 S05-nonstrings [t] warning suppression May 02, 2009
Octocat-spinner-32 S05-substitution
Octocat-spinner-32 S05-syntactic-categories [t/spec] add 'use MONKEY_TYPING' where appropriate March 13, 2010
Octocat-spinner-32 S05-transliteration
Octocat-spinner-32 S06-advanced
Octocat-spinner-32 S06-currying
Octocat-spinner-32 S06-macros
Octocat-spinner-32 S06-multi
Octocat-spinner-32 S06-operator-overloading
Octocat-spinner-32 S06-other
Octocat-spinner-32 S06-routine-modifiers
Octocat-spinner-32 S06-signature
Octocat-spinner-32 S06-traits
Octocat-spinner-32 S07-iterators s/done_testing/done/ as per recent S24 changes December 31, 2010
Octocat-spinner-32 S09-autovivification
Octocat-spinner-32 S09-hashes
Octocat-spinner-32 S09-subscript
Octocat-spinner-32 S09-typed-arrays
Octocat-spinner-32 S10-packages
Octocat-spinner-32 S11-modules
Octocat-spinner-32 S12-attributes
Octocat-spinner-32 S12-class
Octocat-spinner-32 S12-construction
Octocat-spinner-32 S12-enums
Octocat-spinner-32 S12-introspection
Octocat-spinner-32 S12-methods
Octocat-spinner-32 S12-subset
Octocat-spinner-32 S12-traits
Octocat-spinner-32 S13-overloading
Octocat-spinner-32 S13-syntax movie sub/hash syntax August 11, 2013
Octocat-spinner-32 S13-type-casting RT #72834 March 30, 2012
Octocat-spinner-32 S14-roles
Octocat-spinner-32 S14-traits
Octocat-spinner-32 S16-filehandles
Octocat-spinner-32 S16-io
Octocat-spinner-32 S16-unfiled
Octocat-spinner-32 S17-async
Octocat-spinner-32 S19-command-line-options
Octocat-spinner-32 S19-command-line
Octocat-spinner-32 S24-testing pugs fudge March 08, 2012
Octocat-spinner-32 S26-documentation
Octocat-spinner-32 S28-named-variables
Octocat-spinner-32 S29-any
Octocat-spinner-32 S29-context
Octocat-spinner-32 S29-conversions
Octocat-spinner-32 S29-os
Octocat-spinner-32 S29-type
Octocat-spinner-32 S32-array
Octocat-spinner-32 S32-basics Untodo tests reliably passing after is_run fix. September 25, 2013
Octocat-spinner-32 S32-container
Octocat-spinner-32 S32-exceptions
Octocat-spinner-32 S32-hash
Octocat-spinner-32 S32-io
Octocat-spinner-32 S32-list
Octocat-spinner-32 S32-num
Octocat-spinner-32 S32-scalar
Octocat-spinner-32 S32-str
Octocat-spinner-32 S32-temporal
Octocat-spinner-32 S32-trig
Octocat-spinner-32 integration
Octocat-spinner-32 packages
Octocat-spinner-32 .gitignore
Octocat-spinner-32 README
Octocat-spinner-32 TODO
Octocat-spinner-32 fudge
Octocat-spinner-32 fudgeall Added quotes in case fudge path has spaces. (Tested on Linux and Win3… June 18, 2008
Octocat-spinner-32 test_summary
	The Official Perl 6 Test Suite (someday...)

This is the Official Perl 6 test suite. It evolved out of the pugs
test suite, and is now maintained in a separate repository.

Its purpose is to validate implementations that wish to be known
as a conforming Perl 6 implementation. 

Please consider this test suite to be the result
of an ongoing negotiation: since many of these tests are inspired
by seeing how the various prototype implementations are screwed up
(or even more likely, how the design of Perl 6 is screwed up), this
test suite should be considered a work in progress until one or more
of the implementations gets close to passing the entire test suite,
at which point we will freeze version 6.0 of the test suite, and any
implementation that passes it can then call itself Perl 6.

As they develop, different implementations will certainly be in
different states of readiness with respect to the test suite, so
in order for the various implementations to track their progress
independently, we've established a mechanism for "fudging" the
tests in a kind of failsoft fashion.  To pass a test officially,
an implementation must be able to run a test file unmodified, but an
implementation may (temporarily) skip tests or mark them as "todo" via
the fudging mechanism, which is implemented via the fudge preprocessor.
Individual implementations are not allowed to modify the actual test
code, but may insert line comments before each actual test (or block
of tests) that changes how those tests are to be treated for this
platform.  The fudge preprocessor pays attention only to the comments
that belong to the current platform and ignores all the rest.  If your
platform is named "humpty" then your special comment lines look like:

    #?humpty: [NUM] VERB ARGS

(The colon is optional.)

The optional NUM says how many statements or blocks to apply the
verb to.  (If not supplied, a value of 1 is assumed).  A statement
is arbitrarily defined as one or more lines starting with a test call
and ending in semicolon (with an optional comment).

VERBs include:

    skip "reason"	# skip test entirely
    eval "reason"	# eval the test because it doesn't parse yet
    try "reason"	# try the test because it throws exception
    todo "reason"	# mark "todo" because "not ok" is expected
    emit code		# insert code (such as "skip_rest();") inline

All fudged tests return an exit code of 1 by default, so the test harness
will mark it as "dubious" even if all the tests supposedly pass.

There is also the following directive which modifies the test count of
the next construct:

    #?DOES count

The count may be an expression as long as any variables referenced in
the expression are in scope at the location fudge eventually inserts a
"skip()" call.

When applied to a subsequent sub definition, registers the sub name as
doing that many tests when called.  Note, however, that any skipping
is done at the point of the call, not within the subroutine, so the count
may not refer to any parameter of the sub.

When you run the fudge preprocessor, if it decides the test needs
fudging, it returns the new fudged filename; otherwise it returns
the original filename.  (Generally you don't run "fudge" directly,
but your test harness runs the "fudgeall" program for you; see below.)
If there is already a fudged program in the directory that is newer
than the unfudged version, fudge just returns the fudged version
without regenerating it.  If the fudged version is older, it removes
it and then decides anew whether to regenerate it based on the internal
fudge comments.

The "fudgeall" program may be called to process all the needed fudging
for a particular platform:

    fudgeall humpty */*.t */*/*.t

will use the "fudge" program to translate any fudged files to a new
file where the extension is not *.t but instead is *.humpty to indicate
the platform dependency.  It also returns the fudged list of filenames
to run, where unfudged tests are just passed through unchanged as *.t.
Each test comes through as either fudged or not, but never both.
The test harness then runs the selected test files as it normally
would (it shouldn't care whether they are named *.t or *.humpty).

In cases where the current working directory makes a difference, the tests
assume that the working directory is the root of the test suite, so that the
relative path to itself is t/spec/S\d\d-$section/$filename.
Something went wrong with that request. Please try again.