19 Location(
const char *f,
int l, std::string st,
int iter = -1 )
23 #define LOCATION(stmt) ::wibble::Location( __FILE__, __LINE__, stmt )
25 #undef assert // silence a gcc warning if we had assert.h included
28 #define LOCATION_I(stmt, i) ::wibble::Location( __FILE__, __LINE__, stmt, i )
30 #define assert(x) assert_fn( LOCATION( #x ), x )
31 #define assert_pred(p, x) assert_pred_fn( \
32 LOCATION( #p "( " #x " )" ), x, p( x ) )
33 #define assert_eq(x, y) assert_eq_fn( LOCATION( #x " == " #y ), x, y )
34 #define assert_leq(x, y) assert_leq_fn( LOCATION( #x " <= " #y ), x, y )
35 #define assert_eq_l(i, x, y) assert_eq_fn( LOCATION_I( #x " == " #y, i ), x, y )
36 #define assert_neq(x, y) assert_neq_fn( LOCATION( #x " != " #y ), x, y )
37 #define assert_list_eq(x, y) \
38 assert_list_eq_fn( LOCATION( #x " == " #y ), \
39 sizeof( y ) / sizeof( y[0] ), x, y )
41 #define assert(x) ((void)0)
42 #define assert_pred(p, x) ((void)0)
43 #define assert_eq(x, y) ((void)0)
44 #define assert_leq(x, y) ((void)0)
45 #define assert_eq_l(i, x, y) ((void)0)
46 #define assert_neq(x, y) ((void)0)
47 #define assert_list_eq(x, y) ((void)0)
50 #define assert_unreachable(...) assert_die_fn( LOCATION( wibble::str::fmtf(__VA_ARGS__) ) )
51 #define assert_unimplemented() assert_die_fn( LOCATION( "not imlemented" ) )
52 #define assert_die() assert_die_fn( LOCATION( "forbidden code path tripped" ) )
56 std::ostringstream
str;
65 str <<
": assertion `" << l.
stmt <<
"' failed;";
78 template<
typename X >
85 template<
typename X >
95 template<
typename X,
typename Y >
101 << x <<
"] != [" << y
106 template<
typename X,
typename Y >
117 template<
typename X >
126 template<
typename X >
128 Location loc,
int c, X l,
const typename X::Type check[] )
131 while ( !l.empty() ) {
132 if ( l.head() != check[ i ] ) {
134 f <<
" list disagrees at position "
145 << i <<
"] != [" << c <<
"] instead";
149 template<
typename X,
typename Y >
156 << x <<
"] == [" << y <<
"] instead";