// bsls_asserttest_macroreset.h                                       -*-C++-*-
#ifndef INCLUDED_BSLS_ASSERTTEST_MACRORESET
#define INCLUDED_BSLS_ASSERTTEST_MACRORESET

#include <bsls_ident.h>
BSLS_IDENT("$Id: $")

//@PURPOSE: Undefine macros related to `bsls_asserttest.h`.
//
//@DESCRIPTION: This component provides a header that is *included* to undefine
// all macros defined in `bsls_asserttest.h`, `bsls_assert.h`, and
// `bsls_review.h`; it is designed to be *re*-includable.  This is for the use
// of the `bsls_assertest` test driver to enable it to re-include the
// `bsls_asserttest.h` header with different input macros and verify that they
// output the correct resulting macro definitions.
//
///Usage
///-----
// To undefine all macros defined in `bsls_asserttest.h`, `bsls_assert.h` and
// `bsls_review.h`, first disable the header include guard for this header
// (`bsls_asserttest_macroreset.h`):
// ```
// #undef INCLUDED_BSLS_ASSERTTEST_MACRORESET
// ```
// Then re-include this header, which will undefine the macros that were
// defined by `bsls_asserttest.h`, `bsls_assert.h` and `bsls_review.h`:
// ```
// #include <bsls_asserttest_macroreset.h>
// ```
// Then define any macros that control the behaviors of `bsls_asserttest.h`,
// `bsls_assert.h` and `bsls_review.h` for this particular test, then
// re-include `bsls_asserttest.h`:
// ```
// #include <bsls_asserttest.h>
// ```

// Undefine the external header guards so that the component headers can be
// re-included and re-evaluated.
#undef INCLUDED_BSLS_REVIEW
#undef INCLUDED_BSLS_ASSERT
#undef INCLUDED_BSLS_ASSERTTEST

// Undefine the build mode so it can be set to whatever the test wants to
// verify next.
#undef BDE_BUILD_TARGET_DBG
#undef BDE_BUILD_TARGET_OPT
#undef BDE_BUILD_TARGET_SAFE
#undef BDE_BUILD_TARGET_SAFE_2

// Undefine the explicit review level and assert level macros.
#undef BSLS_REVIEW_LEVEL_NONE
#undef BSLS_REVIEW_LEVEL_REVIEW
#undef BSLS_REVIEW_LEVEL_REVIEW_OPT
#undef BSLS_REVIEW_LEVEL_REVIEW_SAFE

#undef BSLS_ASSERT_LEVEL_ASSERT
#undef BSLS_ASSERT_LEVEL_ASSERT_OPT
#undef BSLS_ASSERT_LEVEL_ASSERT_SAFE
#undef BSLS_ASSERT_LEVEL_ASSUME_ASSERT
#undef BSLS_ASSERT_LEVEL_ASSUME_OPT
#undef BSLS_ASSERT_LEVEL_ASSUME_SAFE
#undef BSLS_ASSERT_LEVEL_NONE

// Undefine the macros actually defined by 'bsls_review.h'.
#undef BSLS_REVIEW
#undef BSLS_REVIEW_REVIEW_IMP
#undef BSLS_REVIEW_REVIEW_COUNT_IMP
#undef BSLS_REVIEW_DISABLED_IMP
#undef BSLS_REVIEW_INVOKE
#undef BSLS_REVIEW_IS_ACTIVE
#undef BSLS_REVIEW_IS_USED
#undef BSLS_REVIEW_OPT
#undef BSLS_REVIEW_OPT_IS_ACTIVE
#undef BSLS_REVIEW_OPT_IS_USED
#undef BSLS_REVIEW_OPT_UNREACHABLE
#undef BSLS_REVIEW_SAFE
#undef BSLS_REVIEW_SAFE_IS_ACTIVE
#undef BSLS_REVIEW_SAFE_IS_USED
#undef BSLS_REVIEW_SAFE_UNREACHABLE
#undef BSLS_REVIEW_UNREACHABLE
#undef BSLS_REVIEW_UNREACHABLE_DISABLED_IMP
#undef BSLS_REVIEW_UNREACHABLE_IMP

// Undefine other control macros
#undef BSLS_REVIEW_VALIDATE_DISABLED_MACROS
#undef BSLS_ASSERT_VALIDATE_DISABLED_MACROS
#undef BSLS_ASSERTTEST_VALIDATE_DISABLED_MACROS

// Undefine the macros actually defined by 'bsls_assert.h'.
#undef BSLS_ASSERT
#undef BSLS_ASSERT_ASSERT
#undef BSLS_ASSERT_ASSUME_IMP
#undef BSLS_ASSERT_ASSERT_IMP
#undef BSLS_ASSERT_DISABLED_IMP
#undef BSLS_ASSERT_INVOKE
#undef BSLS_ASSERT_INVOKE_NORETURN
#undef BSLS_ASSERT_IS_ACTIVE
#undef BSLS_ASSERT_IS_ASSUMED
#undef BSLS_ASSERT_IS_REVIEW
#undef BSLS_ASSERT_IS_USED
#undef BSLS_ASSERT_OPT
#undef BSLS_ASSERT_OPT_IS_ACTIVE
#undef BSLS_ASSERT_OPT_IS_ASSUMED
#undef BSLS_ASSERT_OPT_IS_REVIEW
#undef BSLS_ASSERT_OPT_IS_USED
#undef BSLS_ASSERT_OPT_UNREACHABLE
#undef BSLS_ASSERT_OPT_UNREACHABLE_IMP
#undef BSLS_ASSERT_SAFE
#undef BSLS_ASSERT_SAFE_IS_ACTIVE
#undef BSLS_ASSERT_SAFE_IS_ASSUMED
#undef BSLS_ASSERT_SAFE_IS_REVIEW
#undef BSLS_ASSERT_SAFE_IS_USED
#undef BSLS_ASSERT_SAFE_UNREACHABLE
#undef BSLS_ASSERT_SAFE_UNREACHABLE_IMP
#undef BSLS_ASSERT_UNREACHABLE
#undef BSLS_ASSERT_UNREACHABLE_DISABLED_IMP
#undef BSLS_ASSERT_UNREACHABLE_IMP

// Undefine the macros actually defined by 'bsls_asserttest.h'.
#undef BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG
#undef BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG
#undef BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG
#undef BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG

#undef BSLS_ASSERTTEST_ASSERT_FAIL
#undef BSLS_ASSERTTEST_ASSERT_FAIL_RAW
#undef BSLS_ASSERTTEST_ASSERT_OPT_FAIL
#undef BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW
#undef BSLS_ASSERTTEST_ASSERT_SAFE_FAIL
#undef BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW
#undef BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL
#undef BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL_RAW

#undef BSLS_ASSERTTEST_ASSERT_PASS
#undef BSLS_ASSERTTEST_ASSERT_PASS_RAW
#undef BSLS_ASSERTTEST_ASSERT_OPT_PASS
#undef BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW
#undef BSLS_ASSERTTEST_ASSERT_SAFE_PASS
#undef BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW
#undef BSLS_ASSERTTEST_ASSERT_INVOKE_PASS
#undef BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW

#undef BSLS_ASSERTTEST_BRUTE_FORCE_IMP
#undef BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW
#undef BSLS_ASSERTTEST_DISABLED_IMP
#undef BSLS_ASSERTTEST_IS_ACTIVE

#undef BSLS_ASSERTTEST_CAN_CHECK_LEVELS
#undef BSLS_ASSERTTEST_CHECK_LEVEL
#undef BSLS_ASSERTTEST_CHECK_LEVEL_ARG

#endif

// ----------------------------------------------------------------------------
// Copyright 2018 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------- END-OF-FILE ----------------------------------
