Spec-Zone.ru › Nim

std/утверждения

Источник Редактировать

Этот модуль реализует обработку утверждений.

Импорты

ctypes, miscdollars

Процедуры

proc failedAssertImpl(msg: string) {....raises: [], tags: [], forbids: [].}
Вызывает AssertionDefect с msg, но это скрыто от системы эффектов. Вызывается при ошибке утверждения. Источник Редактировать
proc raiseAssert(msg: string) {.noinline, noreturn, nosinks, ...raises: [],
                                tags: [], forbids: [].}
Вызывает AssertionDefect с msg. Источник Редактировать

Шаблоны

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

Вызывает AssertionDefect с msg если cond ложно. Обратите внимание, что AssertionDefect скрыто от системы эффектов, поэтому не приводит к {.raises: [AssertionDefect].}. Это исключение предназначено только для перехвата фреймворками для тестирования модулей.

Код не будет сгенерирован для assert при передаче -d:danger (подразумевается --assertions:off). См. переключатели командной строки.

Пример:

assert 1 == 1

Пример: cmd: --assertions:off

assert 1 == 2 # no code generated, no failure here

Пример: cmd: -d:danger

assert 1 == 2 # ditto
Источник Редактировать
template doAssert(cond: untyped; msg = "")
Аналогично assert, но всегда включено независимо от --assertions.

Пример:

doAssert 1 == 1 # generates code even when built with `-d:danger` or `--assertions:off`
Источник Редактировать
template doAssertRaises(exception: typedesc; code: untyped)
Вызывает AssertionDefect если указанная code не вызывает exception.

Пример:

doAssertRaises(ValueError): raise newException(ValueError, "Hello World")
doAssertRaises(CatchableError): raise newException(ValueError, "Hello World")
doAssertRaises(AssertionDefect): doAssert false
Источник Редактировать
template onFailedAssert(msg, code: untyped): untyped {.dirty.}
Устанавливает обработчик ошибок утверждения, который будет перехватывать любые последующие утверждения onFailedAssert в текущем области видимости.

Пример:

type MyError = object of CatchableError
  lineinfo: tuple[filename: string, line: int, column: int]
# block-wide policy to change the failed assert exception type in order to
# include a lineinfo
onFailedAssert(msg):
  raise (ref MyError)(msg: msg, lineinfo: instantiationInfo(-2))
doAssertRaises(MyError): doAssert false
Источник Редактировать

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/assertions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API