Rand Stats

Asserter

zef:witawayar

Asserter

Be assertive in the form assert EXPR, MESSAGE?

use Asserter;

# Without a custom message, expression itself and its value are reported
my $val = Empty;
assert $val;
#= Assertion failed: `$val` is not true; it evaluates to `Empty`

# You can say what you like
assert $val.&prime-factors.pick.is-prime, "mathematics gone wrong";
#= Assertion failed: mathematics gone wrong

# If condition is truthful, short-circuits, i.e., MESSAGE is not evaluated
assert True, destroy-the-universe();
#= Universe is still fine at this point

# The error is CATCHable as:
{
    CATCH {
        when X::Assertion {
            ...
        }
    }
    assert ...;
}

# If more than 2 things are supplied, it errs in compile time
assert $val, "message", "and some more";
#`[
===SORRY!=== Error while compiling some/file.raku
That's too assertive; expected 1 or 2 things, got 3
at some/file.raku:5
------> assert $val, "message", "and some more"⏏;
]

.WHAT, .WHY, .HOW

Sometimes you want to make sure something is something in the program flow; assert does that for you, like in C, Java, Python and others. It compiles to something like die MESSAGE unless EXPR, which a programmer could be lazy enough not to write in full. So this module refines the main slang to do that with the word assert.

Installation

Using pakku:

pakku add Asserter