https://github.com/shalomb/p6-assertions
Runtime assertions for Perl 6
https://github.com/shalomb/p6-assertions
assertions module perl6 perl6-module perl6-scripts
Last synced: 2 days ago
JSON representation
Runtime assertions for Perl 6
- Host: GitHub
- URL: https://github.com/shalomb/p6-assertions
- Owner: shalomb
- License: artistic-2.0
- Created: 2017-07-05T22:18:33.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-06T01:59:56.000Z (almost 9 years ago)
- Last Synced: 2025-02-27T20:33:26.909Z (over 1 year ago)
- Topics: assertions, module, perl6, perl6-module, perl6-scripts
- Language: Perl6
- Size: 9.77 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NAME
Assertions - Runtime assertions for Perl 6
# SYNOPSIS
use Assertions
my $x = 42;
assert $x; # Assert $x is defined and evaluates to something truthy
assert x %% 5; # Assert a simple expression. `assertion failed.`
assert $x² < 1729, # Include a user-friendly error message
'Ramanujan was slightly off the mark';
assert { ($x+1).is-prime }; # Assert a block
assert {
((1/$x¹, 1/$x², 1/$x³ … { $_ < 1/($x**$x) }).elems) == $x;
},
"No magic found with $x";
assert { $frodo.has-ring },
{ Logger.log('Oops, he did it again!'); }
## Non-fatal assertions
In line with `assert` available in languages like C, C++, Python, etc `assert`
throws an exception if the test expression fails. To make assertions non-fatal
and log failure messages to STDERR instead, use the `:non-fatal` flag.
my $x = (-20,-15 ... 30).pick;
assert $x.sqrt !~~ NaN, :non-fatal; # $x might be a negative number
with $x { do something(); } # control resumes here
…
In fact, `:non-fatal` may be needed when the test expression or block itself may
throw an (inadvertent) exception.
assert { die "See you later, I'm out …" }, # :non-fatal handles exceptions in this block
{ note "But wait, I live again …" }, # so that this block is called
:non-fatal
# DESCRIPTION
`Assertions` provides an assertion mechanism for Perl 6 in the style of
[assert.h](http://en.wikipedia.org/wiki/Assert.h) (NOTE: Unlike `assert` from
`assert.h`, these are subroutines and are not available at compilation time).
## Note
Perl6's type system, sub/method signatures and return types, exceptions, etc
somewhat make assertions an unneeded feature of the language and you should
defer to the features of the language over the use of `assert` from this module
for performance and stability (amongst other) reasons.
# TODO
* Make use of `DEBUG` and `NDEBUG` to control assertions.
* Enable tracing to track triggered assertions.
* Consider if Smart Comments may be of use.
# SEE ALSO
* [assert.h](http://en.wikipedia.org/wiki/Assert.h) - Wikipedia page on `assert.h`
* [assertions](http://search.cpan.org/perldoc?assertions) - Assertions for Perl >= 5.9.0