Rebol Programming/assert

USAGE:

edit
ASSERT conditions /type 

DESCRIPTION:

edit

Assert that condition is true, else throw an assertion error.

ASSERT is a function value.

ARGUMENTS

edit
  • conditions -- (Type: block)

REFINEMENTS

edit
  • /type -- Safely check datatypes of variables (words)

(SPECIAL ATTRIBUTES)

edit
  • catch
  • throw

SOURCE CODE

edit
assert: func [
    {Assert that condition is true, else throw an assertion error.} 
    [catch throw] 
    conditions [block!] 
    /type "Safely check datatypes of variables (words)" 
    /local w t
][throw-on-error [
        either type [
            parse conditions [any [
                    [set w word! | set w skip (
                            cause-error 'script 'invalid-arg type? get/any 'w
                        )] 
                    [set t [block! | word!] (
                            unless find to-typeset t type? get/any w [
                                make error! join "datatype assertion failed for: " w
                            ]
                        ) | set t skip (
                            cause-error 'script 'invalid-arg type? get/any 't
                        )]
                ]]
        ] [
            any [
                all conditions 
                make error! join "assertion failed for: " mold conditions
            ]
        ]
    ]]