diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/pman/src/assert.hrl | |
download | otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2 otp-84adefa331c4159d432d22840663c38f155cd4c1.zip |
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/pman/src/assert.hrl')
-rw-r--r-- | lib/pman/src/assert.hrl | 81 |
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. + + + |