aboutsummaryrefslogtreecommitdiffstats
path: root/lib/pman/src/assert.hrl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pman/src/assert.hrl')
-rw-r--r--lib/pman/src/assert.hrl81
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/pman/src/assert.hrl b/lib/pman/src/assert.hrl
new file mode 100644
index 0000000000..ea3b68cd7c
--- /dev/null
+++ b/lib/pman/src/assert.hrl
@@ -0,0 +1,81 @@
+%%
+%% %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.
+
+
+