%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1997-2009. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
%%% Purpose : Assert macro
%% ?ASSERT/2 - will simply return true if the first argument evaluates to true
%% otherwise it will exit and output (via the error logger) the
%% second string
%%
%% Arguments:
%% Flag Expression that should evalueate to true or false
%% String String to return as a part of the exit reason as well
%% be to be sent to the error logger.
%%
%% Returns:
%% true If the Flag expression evaluates to true
%%
%% Exits:
%% {'EXIT', {assertion_failed, String}}
%% If the Flag expression evaluates to something other than
%% true.
%%
%% Usage notes:
%% Please note that the Flag argument must be a valid expression that
%% evaluates to true.
%%
%% Also, avoid any side effects in the Flag, as everything performed
%% within the scope of the ?ASSERT macro will not be present when
%% the code is not compiled with the debug_on flag.
%%
%% Side effects include the binding of a variable, sending of a
%% message, etc.
%%
-ifdef(debug_on).
-define(ASSERT(Flag, String),
case Flag of
true ->
true;
_ ->
S2 =
lists:flatten(
io_lib:format(
"=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because assertion failed:~n~p",
[self(),?MODULE, ?LINE,String])),
error_logger:error_report(S2),
exit({assertion_failed, String})
end
).
-define(ALWAYS_ASSERT(String),
S2 = lists:flatten(
io_lib:format(
"=ASSERT====~nPid:~p, Module:~p, Line:~p~nTermination because of unconditional assert:~n~p",
[self(),?MODULE, ?LINE, String])),
error_logger:error_report(S2),
exit({always_assert, String})
).
-else.
-define(ASSERT(_Flag,_String), true).
-define(ALWAYS_ASSERT(_String), true).
-endif.