assertions

Procs

proc raiseAssert(msg: string) {...}{.noinline, noreturn, raises: [AssertionError], tags: [].}
  Source Edit
proc failedAssertImpl(msg: string) {...}{.raises: [], tags: [].}
  Source Edit

Templates

template assert(cond: untyped; msg = "")

Raises AssertionError with msg if cond is false. Note that AssertionError is hidden from the effect system, so it doesn't produce {.raises: [AssertionError].}. This exception is only supposed to be caught by unit testing frameworks.

The compiler may not generate any code at all for assert if it is advised to do so through the -d:release or --assertions:off command line switches.

  Source Edit
template doAssert(cond: untyped; msg = "")
Similar to assert but is always turned on regardless of --assertions.   Source Edit
template onFailedAssert(msg, code: untyped): untyped {...}{.dirty.}
Sets an assertion failure handler that will intercept any assert statements following onFailedAssert in the current module scope.
# module-wide policy to change the failed assert
# exception type in order to include a lineinfo
onFailedAssert(msg):
  var e = new(TMyError)
  e.msg = msg
  e.lineinfo = instantiationInfo(-2)
  raise e
  Source Edit
template doAssertRaises(exception: typedesc; code: untyped)
Raises AssertionError if specified code does not raise the specified exception. Example:
doAssertRaises(ValueError):
  raise newException(ValueError, "Hello World")
  Source Edit