REBOL Programming/assert

From Wikibooks, open books for an open world
< REBOL Programming
Jump to: navigation, search

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
            ]
        ]
    ]]