8#ifndef INCLUDED_BSLS_ASSERTTEST
9#define INCLUDED_BSLS_ASSERTTEST
424#include <bsls_annotation.h>
436#if defined (ASSERTTEST_ASSERT_ACTIVE_FLAG)
437#error ASSERTTEST_ASSERT_ACTIVE_FLAG is alread defined!
440#if defined (ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG)
441#error ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG is alread defined!
444#if defined (ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG)
445#error ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG is alread defined!
448#if defined (ASSERTTEST_SAFE_2_BUILD_FLAG)
449#error ASSERTTEST_SAFE_2_BUILD_FLAG is alread defined!
452#if defined (ASSERTTEST_IS_ACTIVE)
453#error ASSERTTEST_IS_ACTIVE is alread defined!
456#if defined (ASSERTTEST_ASSERT_FAIL)
457#error ASSERTTEST_ASSERT_FAIL is alread defined!
460#if defined (ASSERTTEST_ASSERT_FAIL_RAW)
461#error ASSERTTEST_ASSERT_FAIL_RAW is alread defined!
464#if defined (ASSERTTEST_ASSERT_INVOKE_FAIL)
465#error ASSERTTEST_ASSERT_INVOKE_FAIL is alread defined!
468#if defined (ASSERTTEST_ASSERT_INVOKE_FAIL_RAW)
469#error ASSERTTEST_ASSERT_INVOKE_FAIL_RAW is alread defined!
472#if defined (ASSERTTEST_ASSERT_OPT_FAIL)
473#error ASSERTTEST_ASSERT_OPT_FAIL is alread defined!
476#if defined (ASSERTTEST_ASSERT_OPT_FAIL_RAW)
477#error ASSERTTEST_ASSERT_OPT_FAIL_RAW is alread defined!
480#if defined (ASSERTTEST_ASSERT_SAFE_FAIL)
481#error ASSERTTEST_ASSERT_SAFE_FAIL is alread defined!
484#if defined (ASSERTTEST_ASSERT_SAFE_FAIL_RAW)
485#error ASSERTTEST_ASSERT_SAFE_FAIL_RAW is alread defined!
488#if defined (ASSERTTEST_ASSERT_INVOKE_PASS)
489#error ASSERTTEST_ASSERT_INVOKE_PASS is alread defined!
492#if defined (ASSERTTEST_ASSERT_INVOKE_PASS_RAW)
493#error ASSERTTEST_ASSERT_INVOKE_PASS_RAW is alread defined!
496#if defined (ASSERTTEST_ASSERT_OPT_PASS)
497#error ASSERTTEST_ASSERT_OPT_PASS is alread defined!
500#if defined (ASSERTTEST_ASSERT_OPT_PASS_RAW)
501#error ASSERTTEST_ASSERT_OPT_PASS_RAW is alread defined!
504#if defined (ASSERTTEST_ASSERT_PASS)
505#error ASSERTTEST_ASSERT_PASS is alread defined!
508#if defined (ASSERTTEST_ASSERT_PASS_RAW)
509#error ASSERTTEST_ASSERT_PASS_RAW is alread defined!
512#if defined (ASSERTTEST_ASSERT_SAFE_PASS)
513#error ASSERTTEST_ASSERT_SAFE_PASS is alread defined!
516#if defined (ASSERTTEST_ASSERT_SAFE_PASS_RAW)
517#error ASSERTTEST_ASSERT_SAFE_PASS_RAW is alread defined!
520#if defined (ASSERTTEST_BRUTE_FORCE_IMP)
521#error ASSERTTEST_BRUTE_FORCE_IMP is alread defined!
524#if defined (ASSERTTEST_BRUTE_FORCE_IMP_RAW)
525#error ASSERTTEST_BRUTE_FORCE_IMP_RAW is alread defined!
528#if defined (ASSERTTEST_CAN_CHECK_LEVELS)
529#error ASSERTTEST_CAN_CHECK_LEVELS is alread defined!
532#if defined (ASSERTTEST_CHECK_LEVEL_ARG)
533#error ASSERTTEST_CHECK_LEVEL_ARG is alread defined!
536#if defined (ASSERTTEST_DISABLED_IMP)
537#error ASSERTTEST_DISABLED_IMP is alread defined!
544#ifdef BDE_BUILD_TARGET_SAFE_2
545 #define BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG true
547 #define BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG false
550#ifdef BSLS_ASSERT_SAFE_IS_ACTIVE
551 #define BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG true
553 #define BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG false
556#ifdef BSLS_ASSERT_IS_ACTIVE
557 #define BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG true
559 #define BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG false
562#ifdef BSLS_ASSERT_OPT_IS_ACTIVE
563 #define BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG true
565 #define BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG false
568#define BSLS_ASSERTTEST_IS_ACTIVE(TYPE) ( \
570 || BSLS_ASSERTTEST_SAFE_2_BUILD_FLAG \
573 ( ('S' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_SAFE_ACTIVE_FLAG) \
574 || ('A' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_ACTIVE_FLAG) \
575 || ('O' == TYPE[0] && BSLS_ASSERTTEST_ASSERT_OPT_ACTIVE_FLAG) \
579#if !defined(BSLS_ASSERT_USE_CONTRACTS)
580 #define BSLS_ASSERTTEST_CAN_CHECK_LEVELS
586#ifdef BSLS_ASSERTTEST_CHECK_LEVEL
587 #define BSLS_ASSERTTEST_CHECK_LEVEL_ARG true
589 #define BSLS_ASSERTTEST_CHECK_LEVEL_ARG false
592#ifdef BSLS_PLATFORM_PRAGMA_GCC_DIAGNOSTIC_CLANG
593#define BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) \
594 _Pragma("GCC diagnostic push") \
595 _Pragma("GCC diagnostic ignored \"-Wunused-comparison\"") \
596 _Pragma("GCC diagnostic ignored \"-Wunused-value\"") \
597 STATEMENT_UNDER_TEST; \
598 _Pragma("GCC diagnostic pop")
600#define BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) \
601 STATEMENT_UNDER_TEST;
604#define BSLS_ASSERTTEST_BRUTE_FORCE_IMP(RESULT, LVL, STATEMENT_UNDER_TEST) { \
606 BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) \
608 ASSERT(BloombergLP::bsls::AssertTest::tryProbe(RESULT, LVL)); \
610 catch (const BloombergLP::bsls::AssertTestException& e) { \
611 ASSERT(BloombergLP::bsls::AssertTest::catchProbe( \
613 BSLS_ASSERTTEST_CHECK_LEVEL_ARG, \
620#define BSLS_ASSERTTEST_VALIDATE_DISABLED_MACROS
621#ifdef BSLS_ASSERTTEST_VALIDATE_DISABLED_MACROS
622 #define BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST) \
624 BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) \
627 #define BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST) \
631#if !defined(BDE_BUILD_TARGET_EXC)
643#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS(STATEMENT_UNDER_TEST) \
644 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
646#define BSLS_ASSERTTEST_ASSERT_PASS(STATEMENT_UNDER_TEST) \
647 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
649#define BSLS_ASSERTTEST_ASSERT_OPT_PASS(STATEMENT_UNDER_TEST) \
650 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
652#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS(STATEMENT_UNDER_TEST) \
653 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
655#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW(STATEMENT_UNDER_TEST) \
656 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
658#define BSLS_ASSERTTEST_ASSERT_PASS_RAW(STATEMENT_UNDER_TEST) \
659 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
661#define BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW(STATEMENT_UNDER_TEST) \
662 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
664#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW(STATEMENT_UNDER_TEST) \
665 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
667#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(STATEMENT_UNDER_TEST) \
668 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
670#define BSLS_ASSERTTEST_ASSERT_FAIL(STATEMENT_UNDER_TEST) \
671 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
673#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL(STATEMENT_UNDER_TEST) \
674 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
676#define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW(STATEMENT_UNDER_TEST) \
677 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
679#define BSLS_ASSERTTEST_ASSERT_FAIL_RAW(STATEMENT_UNDER_TEST) \
680 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
682#define BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW(STATEMENT_UNDER_TEST) \
683 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
685#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL(STATEMENT_UNDER_TEST) \
686 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
688#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL_RAW(STATEMENT_UNDER_TEST) \
689 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
699#if (defined(BSLS_PLATFORM_CMP_MSVC) && defined(BDE_BUILD_TARGET_OPT))
700#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS(STATEMENT_UNDER_TEST) \
701 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
703#define BSLS_ASSERTTEST_ASSERT_PASS(STATEMENT_UNDER_TEST) \
704 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
706#define BSLS_ASSERTTEST_ASSERT_OPT_PASS(STATEMENT_UNDER_TEST) \
707 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
709#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS(STATEMENT_UNDER_TEST) \
710 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
712#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS(STATEMENT_UNDER_TEST) \
713 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('P', 'S', STATEMENT_UNDER_TEST)
715#define BSLS_ASSERTTEST_ASSERT_PASS(STATEMENT_UNDER_TEST) \
716 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('P', 'A', STATEMENT_UNDER_TEST)
718#define BSLS_ASSERTTEST_ASSERT_OPT_PASS(STATEMENT_UNDER_TEST) \
719 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('P', 'O', STATEMENT_UNDER_TEST)
721#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS(STATEMENT_UNDER_TEST) \
722 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('P', 'I', STATEMENT_UNDER_TEST)
725#if defined(BSLS_ASSERT_SAFE_IS_ACTIVE)
726# define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(STATEMENT_UNDER_TEST) \
727 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('F', 'S', STATEMENT_UNDER_TEST)
729# define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(STATEMENT_UNDER_TEST) \
730 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
733#if defined(BSLS_ASSERT_IS_ACTIVE)
734 #define BSLS_ASSERTTEST_ASSERT_FAIL(STATEMENT_UNDER_TEST) \
735 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('F', 'A', STATEMENT_UNDER_TEST)
737 #define BSLS_ASSERTTEST_ASSERT_FAIL(STATEMENT_UNDER_TEST) \
738 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
741#if defined(BSLS_ASSERT_OPT_IS_ACTIVE)
742 #define BSLS_ASSERTTEST_ASSERT_OPT_FAIL(STATEMENT_UNDER_TEST) \
743 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('F', 'O', STATEMENT_UNDER_TEST)
745 #define BSLS_ASSERTTEST_ASSERT_OPT_FAIL(STATEMENT_UNDER_TEST) \
746 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
749#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL(STATEMENT_UNDER_TEST) \
750 BSLS_ASSERTTEST_BRUTE_FORCE_IMP('F', 'I', STATEMENT_UNDER_TEST)
752#define BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW(RESULT, \
754 STATEMENT_UNDER_TEST) { \
756 BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) \
758 ASSERT(BloombergLP::bsls::AssertTest::tryProbeRaw(RESULT, LVL)); \
760 catch (const BloombergLP::bsls::AssertTestException& e) { \
761 ASSERT(BloombergLP::bsls::AssertTest::catchProbeRaw( \
763 BSLS_ASSERTTEST_CHECK_LEVEL_ARG, \
769#if defined(BSLS_PLATFORM_CMP_MSVC) && defined(BDE_BUILD_TARGET_OPT)
773#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW(STATEMENT_UNDER_TEST) \
774 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
776#define BSLS_ASSERTTEST_ASSERT_PASS_RAW(STATEMENT_UNDER_TEST) \
777 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
779#define BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW(STATEMENT_UNDER_TEST) \
780 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
782#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW(STATEMENT_UNDER_TEST) \
783 { BSLS_ASSERTTEST_EVAL_STATEMENT_IMP(STATEMENT_UNDER_TEST) }
785#define BSLS_ASSERTTEST_ASSERT_SAFE_PASS_RAW(STATEMENT_UNDER_TEST) \
786 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('P', 'S', STATEMENT_UNDER_TEST)
788#define BSLS_ASSERTTEST_ASSERT_PASS_RAW(STATEMENT_UNDER_TEST) \
789 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('P', 'A', STATEMENT_UNDER_TEST)
791#define BSLS_ASSERTTEST_ASSERT_OPT_PASS_RAW(STATEMENT_UNDER_TEST) \
792 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('P', 'O', STATEMENT_UNDER_TEST)
794#define BSLS_ASSERTTEST_ASSERT_INVOKE_PASS_RAW(STATEMENT_UNDER_TEST) \
795 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('P', 'I', STATEMENT_UNDER_TEST)
798#if defined(BSLS_ASSERT_SAFE_IS_ACTIVE)
799 #define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW(STATEMENT_UNDER_TEST) \
800 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('F', 'S', STATEMENT_UNDER_TEST)
802 #define BSLS_ASSERTTEST_ASSERT_SAFE_FAIL_RAW(STATEMENT_UNDER_TEST) \
803 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
806#if defined(BSLS_ASSERT_IS_ACTIVE)
807 #define BSLS_ASSERTTEST_ASSERT_FAIL_RAW(STATEMENT_UNDER_TEST) \
808 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('F', 'A', STATEMENT_UNDER_TEST)
810 #define BSLS_ASSERTTEST_ASSERT_FAIL_RAW(STATEMENT_UNDER_TEST) \
811 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
814#if defined(BSLS_ASSERT_OPT_IS_ACTIVE)
815 #define BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW(STATEMENT_UNDER_TEST) \
816 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('F', 'O', STATEMENT_UNDER_TEST)
818 #define BSLS_ASSERTTEST_ASSERT_OPT_FAIL_RAW(STATEMENT_UNDER_TEST) \
819 BSLS_ASSERTTEST_DISABLED_IMP(STATEMENT_UNDER_TEST)
822#define BSLS_ASSERTTEST_ASSERT_INVOKE_FAIL_RAW(STATEMENT_UNDER_TEST) \
823 BSLS_ASSERTTEST_BRUTE_FORCE_IMP_RAW('F', 'I', STATEMENT_UNDER_TEST)
834#ifndef BSLS_ASSERTTEST_RECURSIVELY_INCLUDED_TESTDRIVER_GUARD
835#define BSLS_ASSERTTEST_RECURSIVELY_INCLUDED_TESTDRIVER_GUARD
902 static bool tryProbe(
char expectedResult,
char expectedLevel);
923 const char *testDriverFileName);
1012, d_reviewGuard(&
AssertTest::failTestDriverByReview)
1018#ifndef BDE_OPENSOURCE_PUBLICATION
Definition bsls_assert.h:2451
Definition bsls_asserttestexception.h:156
Definition bsls_asserttest.h:981
~AssertTestHandlerGuard()=default
AssertTestHandlerGuard()
Definition bsls_asserttest.h:1010
Definition bsls_assert.h:2139
Definition bsls_review.h:1310
Definition bsls_review.h:1097
#define BSLS_ANNOTATION_NORETURN
Definition bsls_annotation.h:378
bsls::AssertTest bsls_AssertTest
This alias is defined for backward compatibility.
Definition bsls_asserttest.h:1027
bsls::AssertTestHandlerGuard bsls_AssertTestHandlerGuard
This alias is defined for backward compatibility.
Definition bsls_asserttest.h:1024
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlt_iso8601util.h:707
Definition bsls_asserttest.h:852
static bool catchProbe(char expectedResult, bool checkLevel, char expectedLevel, const AssertTestException &caughtException, const char *testDriverFileName)
static bool isValidAssertBuild(const char *specString)
static bool tryProbe(char expectedResult, char expectedLevel)
static bool isValidExpected(char specChar)
static bool catchProbeRaw(char expectedResult, bool checkLevel, char expectedLevel, const AssertTestException &caughtException)
static void failTestDriverByReview(const ReviewViolation &violation)
static bool tryProbeRaw(char expectedResult, char expectedLevel)
static bool isValidExpectedLevel(char specChar)
static BSLS_ANNOTATION_NORETURN void failTestDriver(const AssertViolation &violation)