8#ifndef INCLUDED_BSLS_BSLTESTUTIL
9#define INCLUDED_BSLS_BSLTESTUTIL
452#include <bsls_platform.h>
454#if defined(BSLS_PLATFORM_CMP_MSVC)
464#define BSLS_BSLTESTUTIL_ASSERT(X) \
465 do { aSsErT(!(X), #X, __LINE__); } while (false)
467#define BSLS_BSLTESTUTIL_LOOP0_ASSERT \
468 BSLS_BSLTESTUTIL_ASSERT
470#define BSLS_BSLTESTUTIL_LOOP_ASSERT(I,X) do { \
471 if (!(X)) { BloombergLP::bsls:: \
472 BslTestUtil::callDebugprint(I, #I ": ", \
474 aSsErT(true, #X, __LINE__); } } while (false)
476#define BSLS_BSLTESTUTIL_LOOP1_ASSERT \
477 BSLS_BSLTESTUTIL_LOOP_ASSERT
479#define BSLS_BSLTESTUTIL_LOOP2_ASSERT(I,J,X) do { \
480 if (!(X)) { BloombergLP::bsls:: \
481 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
482 BloombergLP::bsls:: \
483 BslTestUtil::callDebugprint(J, #J ": ", \
485 aSsErT(true, #X, __LINE__); } } while (false)
487#define BSLS_BSLTESTUTIL_LOOP3_ASSERT(I,J,K,X) do { \
488 if (!(X)) { BloombergLP::bsls:: \
489 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
490 BloombergLP::bsls:: \
491 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
492 BloombergLP::bsls:: \
493 BslTestUtil::callDebugprint(K, #K ": ", \
495 aSsErT(true, #X, __LINE__); } } while (false)
497#define BSLS_BSLTESTUTIL_LOOP4_ASSERT(I,J,K,L,X) do { \
498 if (!(X)) { BloombergLP::bsls:: \
499 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
500 BloombergLP::bsls:: \
501 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
502 BloombergLP::bsls:: \
503 BslTestUtil::callDebugprint(K, #K ": ", "\t"); \
504 BloombergLP::bsls:: \
505 BslTestUtil::callDebugprint(L, #L ": ", \
507 aSsErT(true, #X, __LINE__); } } while (false)
509#define BSLS_BSLTESTUTIL_LOOP5_ASSERT(I,J,K,L,M,X) do { \
510 if (!(X)) { BloombergLP::bsls:: \
511 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
512 BloombergLP::bsls:: \
513 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
514 BloombergLP::bsls:: \
515 BslTestUtil::callDebugprint(K, #K ": ", "\t"); \
516 BloombergLP::bsls:: \
517 BslTestUtil::callDebugprint(L, #L ": ", "\t"); \
518 BloombergLP::bsls:: \
519 BslTestUtil::callDebugprint(M, #M ": ", \
521 aSsErT(true, #X, __LINE__); } } while (false)
523#define BSLS_BSLTESTUTIL_LOOP6_ASSERT(I,J,K,L,M,N,X) do { \
524 if (!(X)) { BloombergLP::bsls:: \
525 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
526 BloombergLP::bsls:: \
527 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
528 BloombergLP::bsls:: \
529 BslTestUtil::callDebugprint(K, #K ": ", "\t"); \
530 BloombergLP::bsls:: \
531 BslTestUtil::callDebugprint(L, #L ": ", "\t"); \
532 BloombergLP::bsls:: \
533 BslTestUtil::callDebugprint(M, #M ": ", "\t"); \
534 BloombergLP::bsls:: \
535 BslTestUtil::callDebugprint(N, #N ": ", \
537 aSsErT(true, #X, __LINE__); } } while (false)
539#define BSLS_BSLTESTUTIL_LOOP7_ASSERT(I,J,K,L,M,N,O,X) do { \
540 if (!(X)) { BloombergLP::bsls:: \
541 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
542 BloombergLP::bsls:: \
543 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
544 BloombergLP::bsls:: \
545 BslTestUtil::callDebugprint(K, #K ": ", "\t"); \
546 BloombergLP::bsls:: \
547 BslTestUtil::callDebugprint(L, #L ": ", "\t"); \
548 BloombergLP::bsls:: \
549 BslTestUtil::callDebugprint(M, #M ": ", "\t"); \
550 BloombergLP::bsls:: \
551 BslTestUtil::callDebugprint(N, #N ": ", "\t"); \
552 BloombergLP::bsls:: \
553 BslTestUtil::callDebugprint(O, #O ": ", \
555 aSsErT(true, #X, __LINE__); } } while (false)
557#define BSLS_BSLTESTUTIL_LOOP8_ASSERT(I,J,K,L,M,N,O,V,X) do { \
558 if (!(X)) { BloombergLP::bsls:: \
559 BslTestUtil::callDebugprint(I, #I ": ", "\t"); \
560 BloombergLP::bsls:: \
561 BslTestUtil::callDebugprint(J, #J ": ", "\t"); \
562 BloombergLP::bsls:: \
563 BslTestUtil::callDebugprint(K, #K ": ", "\t"); \
564 BloombergLP::bsls:: \
565 BslTestUtil::callDebugprint(L, #L ": ", "\t"); \
566 BloombergLP::bsls:: \
567 BslTestUtil::callDebugprint(M, #M ": ", "\t"); \
568 BloombergLP::bsls:: \
569 BslTestUtil::callDebugprint(N, #N ": ", "\t"); \
570 BloombergLP::bsls:: \
571 BslTestUtil::callDebugprint(O, #O ": ", "\t"); \
572 BloombergLP::bsls:: \
573 BslTestUtil::callDebugprint(V, #V ": ", \
575 aSsErT(true, #X, __LINE__); } } while (false)
580#define BSLS_BSLTESTUTIL_EXPAND(X) \
583#define BSLS_BSLTESTUTIL_NUM_ARGS_IMPL(X8, X7, X6, X5, X4, X3, X2, X1, X0, \
587#define BSLS_BSLTESTUTIL_NUM_ARGS(...) \
588 BSLS_BSLTESTUTIL_EXPAND(BSLS_BSLTESTUTIL_NUM_ARGS_IMPL( \
589 __VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0, ""))
591#define BSLS_BSLTESTUTIL_LOOPN_ASSERT_IMPL(N, ...) \
592 BSLS_BSLTESTUTIL_EXPAND(BSLS_BSLTESTUTIL_LOOP ## N ## _ASSERT(__VA_ARGS__))
594#define BSLS_BSLTESTUTIL_LOOPN_ASSERT(N, ...) \
595 BSLS_BSLTESTUTIL_LOOPN_ASSERT_IMPL(N, __VA_ARGS__)
597#define BSLS_BSLTESTUTIL_ASSERTV(...) \
598 BSLS_BSLTESTUTIL_LOOPN_ASSERT( \
599 BSLS_BSLTESTUTIL_NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
604#define BSLS_BSLTESTUTIL_Q(X) \
605 BloombergLP::bsls:: \
606 BslTestUtil::printStringNoFlush("<| " #X " |>\n");
609#define BSLS_BSLTESTUTIL_P(X) \
610 BloombergLP::bsls:: \
611 BslTestUtil::callDebugprint(X, #X " = ", "\n");
614#define BSLS_BSLTESTUTIL_P_(X) \
615 BloombergLP::bsls:: \
616 BslTestUtil::callDebugprint(X, #X " = ", ", ");
619#define BSLS_BSLTESTUTIL_L_ __LINE__
622#define BSLS_BSLTESTUTIL_T_ BloombergLP::bsls::BslTestUtil::printTab();
625#if defined(BSLS_PLATFORM_CMP_MSVC)
626# define BSLS_BSLTESTUTIL_FORMAT_ZU "%Iu"
628# define BSLS_BSLTESTUTIL_FORMAT_ZU "%zu"
633#if defined(BSLS_PLATFORM_CMP_MSVC)
634# define BSLS_BSLTESTUTIL_FORMAT_TD "%Id"
636# define BSLS_BSLTESTUTIL_FORMAT_TD "%td"
641#if defined(BSLS_PLATFORM_CMP_MSVC)
642# define BSLS_BSLTESTUTIL_FORMAT_I64 "%I64d"
644# define BSLS_BSLTESTUTIL_FORMAT_I64 "%lld"
649#if defined(BSLS_PLATFORM_CMP_MSVC)
650# define BSLS_BSLTESTUTIL_FORMAT_U64 "%I64u"
652# define BSLS_BSLTESTUTIL_FORMAT_U64 "%llu"
657#if defined(BSLS_PLATFORM_CPU_64_BIT)
658# if defined(BSLS_PLATFORM_CMP_MSVC)
659# define BSLS_BSLTESTUTIL_FORMAT_PTR "%llX"
661# define BSLS_BSLTESTUTIL_FORMAT_PTR "%lX"
664# define BSLS_BSLTESTUTIL_FORMAT_PTR "%X"
692 static void *identityPtr(
void *ptr);
715 template <
class TYPE>
717 const char *leadingString = 0,
718 const char *trailingString = 0);
735 template <
class FUNCTION_PTR>
792template <
class RESULT>
806 const char *leadingString,
807 const char *trailingString)
810 BloombergLP::bsls::BslTestUtil::printStringNoFlush(leadingString);
815 if (trailingString) {
816 BloombergLP::bsls::BslTestUtil::printStringNoFlush(trailingString);
821template <
class FUNCTION_PTR>
834 enum { k_STATIC_ASSERT = 1 /
835 static_cast<int>(
sizeof(FUNCTION_PTR) ==
sizeof(
void *)) };
837 return reinterpret_cast<FUNCTION_PTR
>(identityPtr(
reinterpret_cast<void *
>(
844template <
class RESULT>
847 uintptr_t address =
reinterpret_cast<uintptr_t
>(v);
848 debugprint(
reinterpret_cast<void *
>(address));
#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_bsltestutil.h:683
static void flush()
Write any unwritten text in the output buffer to stdout.
static void printStringNoFlush(const char *s)
static void callDebugprint(const TYPE &object, const char *leadingString=0, const char *trailingString=0)
Definition bsls_bsltestutil.h:805
static FUNCTION_PTR makeFunctionCallNonInline(FUNCTION_PTR functionPtr)
Definition bsls_bsltestutil.h:823