Справочник Ada 2005
11.4.2 Директивы Assert и Assertion_Policy
Директива Assert используется для проверки истинности логического выражения в любой точке последовательности объявлений или операторов. Директива Assertion_Policy используется для управления тем, будут ли такие проверки игнорироваться реализацией, проверяться во время выполнения или обрабатываться каким-либо образом, определённым реализацией.
Синтаксис
Форма директивы pragma Assert имеет следующий вид:
Директива pragma Assert допускается в местах, где разрешено использовать declarative_item или statement.
Форма директивы pragma Assertion_Policy имеет следующий вид:
pragma Assertion_Policy(policy_идентификатор);
Директива pragma Assertion_Policy является конфигурационной директивой.
Правила разрешения имён
Ожидаемый тип для boolean_выражения директивы pragma Assert — любой булевый тип. Ожидаемый тип для string_выражения директивы pragma Assert — тип String.
Правила допустимости
policy_идентификатор директивы pragma Assertion_Policy должен быть либо Check, Ignore, либо определённой реализацией идентификатор.
Статическая семантика
Директива pragma Assertion_Policy — это конфигурационная директива, которая задаёт политику утверждений, действующую для единиц компиляции, к которым она применяется. Разные политики могут применяться к различным единицам компиляции в пределах одной и той же раздела. По умолчанию политика утверждений определяется реализацией.
Существует следующий определённый языком пакет библиотеки:
package Ada.Assertions is
pragma Pure(Assertions);
pragma Pure(Assertions);
Assertion_Error : exception;
procedure Assert(Check : in Boolean);
procedure Assert(Check : in Boolean; Message : in String);
procedure Assert(Check : in Boolean; Message : in String);
end Ada.Assertions;
Единица компиляции, содержащая директиву pragma Assert, имеет семантическую зависимость от библиотечной единицы Assertions.
Политика утверждений, которая применяется к обобщённой единице, также применяется ко всем её экземплярам.
Динамическая семантика
Политика утверждений определяет, как реализация интерпретирует директиву pragma Assert. Если политика утверждений — Ignore в момент директивы pragma Assert, то директива игнорируется. Если политика утверждений — Check в момент директивы pragma Assert, то обработка директивы заключается в вычислении булевого выражения, и если результат — False, то вычисляется аргумент Message, если он есть, и возбуждается исключение Assertions.Assertion_Error с сообщением, если аргумент Message предоставлен.
Вызов процедуры Assertions.Assert без параметра Message эквивалентен:
if Check = False then
raise Ada.Assertions.Assertion_Error;
end if;
raise Ada.Assertions.Assertion_Error;
end if;
Вызов процедуры Assertions.Assert с параметром Message эквивалентен:
if Check = False then
raise Ada.Assertions.Assertion_Error with Message;
end if;
raise Ada.Assertions.Assertion_Error with Message;
end if;
Проведение процедур Assertions.Assert имеет эти последствия независимо от действующей политики утверждений.
Разрешения для реализации
Assertion_Error может быть объявлено путём переименования исключения, определённого реализацией, из другого пакета.
Реализации могут определять свои собственные политики утверждений.
ПРИМЕЧАНИЯ
2 Обычно булевое выражение в директиве pragma Assert не должно вызывать функции с существенными побочными эффектами, когда результат выражения — True, чтобы действующая политика утверждений не влияла на нормальную работу программы.