8#ifndef INCLUDED_BSLIM_TESTUTIL
9#define INCLUDED_BSLIM_TESTUTIL
182#include <bslscm_version.h>
186#include <bsl_iostream.h>
187#include <bsl_string.h>
189#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
197#define BSLIM_TESTUTIL_ASSERT(X) \
198 aSsErT(!(X), #X, __LINE__);
200#define BSLIM_TESTUTIL_DEBUG_REP(X) BloombergLP::bslim::TestUtil::debugRep(X)
202#define BSLIM_TESTUTIL_LOOP0_ASSERT \
203 BSLIM_TESTUTIL_ASSERT
205#define BSLIM_TESTUTIL_LOOP_ASSERT(I,X) \
206 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << \
208 aSsErT(1, #X, __LINE__); }
210#define BSLIM_TESTUTIL_LOOP1_ASSERT \
211 BSLIM_TESTUTIL_LOOP_ASSERT
213#define BSLIM_TESTUTIL_LOOP2_ASSERT(I,J,X) \
214 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
215 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << \
217 aSsErT(1, #X, __LINE__); }
219#define BSLIM_TESTUTIL_LOOP3_ASSERT(I,J,K,X) \
220 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
221 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
222 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << \
224 aSsErT(1, #X, __LINE__); }
226#define BSLIM_TESTUTIL_LOOP4_ASSERT(I,J,K,L,X) \
227 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
228 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
229 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << "\t" \
230 << #L ": " << BSLIM_TESTUTIL_DEBUG_REP(L) << \
232 aSsErT(1, #X, __LINE__); }
234#define BSLIM_TESTUTIL_LOOP5_ASSERT(I,J,K,L,M,X) \
235 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
236 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
237 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << "\t" \
238 << #L ": " << BSLIM_TESTUTIL_DEBUG_REP(L) << "\t" \
239 << #M ": " << BSLIM_TESTUTIL_DEBUG_REP(M) << \
241 aSsErT(1, #X, __LINE__); }
243#define BSLIM_TESTUTIL_LOOP6_ASSERT(I,J,K,L,M,N,X) \
244 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
245 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
246 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << "\t" \
247 << #L ": " << BSLIM_TESTUTIL_DEBUG_REP(L) << "\t" \
248 << #M ": " << BSLIM_TESTUTIL_DEBUG_REP(M) << "\t" \
249 << #N ": " << BSLIM_TESTUTIL_DEBUG_REP(N) << \
251 aSsErT(1, #X, __LINE__); }
253#define BSLIM_TESTUTIL_LOOP7_ASSERT(I,J,K,L,M,N,O,X) \
254 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
255 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
256 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << "\t" \
257 << #L ": " << BSLIM_TESTUTIL_DEBUG_REP(L) << "\t" \
258 << #M ": " << BSLIM_TESTUTIL_DEBUG_REP(M) << "\t" \
259 << #N ": " << BSLIM_TESTUTIL_DEBUG_REP(N) << "\t" \
260 << #O ": " << BSLIM_TESTUTIL_DEBUG_REP(O) << \
262 aSsErT(1, #X, __LINE__); }
264#define BSLIM_TESTUTIL_LOOP8_ASSERT(I,J,K,L,M,N,O,V,X) \
265 if (!(X)) { bsl::cout << #I ": " << BSLIM_TESTUTIL_DEBUG_REP(I) << "\t" \
266 << #J ": " << BSLIM_TESTUTIL_DEBUG_REP(J) << "\t" \
267 << #K ": " << BSLIM_TESTUTIL_DEBUG_REP(K) << "\t" \
268 << #L ": " << BSLIM_TESTUTIL_DEBUG_REP(L) << "\t" \
269 << #M ": " << BSLIM_TESTUTIL_DEBUG_REP(M) << "\t" \
270 << #N ": " << BSLIM_TESTUTIL_DEBUG_REP(N) << "\t" \
271 << #O ": " << BSLIM_TESTUTIL_DEBUG_REP(O) << "\t" \
272 << #V ": " << BSLIM_TESTUTIL_DEBUG_REP(V) << \
274 aSsErT(1, #X, __LINE__); }
280#define BSLIM_TESTUTIL_EXPAND(X) \
283#define BSLIM_TESTUTIL_NUM_ARGS_IMPL(X8, X7, X6, X5, X4, X3, X2, X1, X0, \
287#define BSLIM_TESTUTIL_NUM_ARGS(...) \
288 BSLIM_TESTUTIL_EXPAND(BSLIM_TESTUTIL_NUM_ARGS_IMPL( \
289 __VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0, ""))
291#define BSLIM_TESTUTIL_LOOPN_ASSERT_IMPL(N, ...) \
292 BSLIM_TESTUTIL_EXPAND(BSLIM_TESTUTIL_LOOP ## N ## _ASSERT(__VA_ARGS__))
294#define BSLIM_TESTUTIL_LOOPN_ASSERT(N, ...) \
295 BSLIM_TESTUTIL_LOOPN_ASSERT_IMPL(N, __VA_ARGS__)
297#define BSLIM_TESTUTIL_ASSERTV(...) \
298 BSLIM_TESTUTIL_LOOPN_ASSERT( \
299 BSLIM_TESTUTIL_NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
302#define BSLIM_TESTUTIL_Q(X) \
303 bsl::cout << "<| " #X " |>" << bsl::endl;
306#define BSLIM_TESTUTIL_P(X) \
307 bsl::cout << #X " = " << BSLIM_TESTUTIL_DEBUG_REP(X) << bsl::endl;
310#define BSLIM_TESTUTIL_P_(X) \
311 bsl::cout << #X " = " << BSLIM_TESTUTIL_DEBUG_REP(X) << ", " << bsl::flush;
314#define BSLIM_TESTUTIL_L_ \
318#define BSLIM_TESTUTIL_T_ \
319 bsl::cout << "\t" << bsl::flush;
341 static void *identityPtr(
void *ptr);
353 bsl::ostream& errorStream = bsl::cout);
370 template <
class FUNCTION_PTR>
374 static const T&
debugRep(
const T& arg) {
return arg; }
386template <
class FUNCTION_PTR>
392 return reinterpret_cast<FUNCTION_PTR
>(identityPtr(
reinterpret_cast<void *
>(
Definition bslstl_stringref.h:374
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bslim_formatguard.h:120
Definition bslim_testutil.h:332
static int debugRep(wchar_t arg)
Definition bslim_testutil.h:375
static const T & debugRep(const T &arg)
Definition bslim_testutil.h:374
static FUNCTION_PTR makeFunctionCallNonInline(FUNCTION_PTR functionPtr)
Definition bslim_testutil.h:388
static bool compareText(bslstl::StringRef lhs, bslstl::StringRef rhs, bsl::ostream &errorStream=bsl::cout)