19 Location(
const char *f,
int l, std::string st,
int iter = -1 )
20 : file( f ), line( l ), iteration( iter ), stmt( st ) {}
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;
61 expect = assertFailure > 0;
64 str <<
" (iteration " << l.
iteration <<
")";
65 str <<
": assertion `" << l.
stmt <<
"' failed;";
72 stream << str.str() << std::endl;
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";
std::ostream & operator<<(std::ostream &o, const std::pair< X, Y > &x)
Definition: parse.h:52
std::ostringstream str
Definition: test.h:56
int iteration
Definition: test.h:17
void Test
Definition: test.h:178
int assertFailure
Definition: test.cpp:4
~ExpectFailure()
Definition: test.h:173
ExpectFailure()
Definition: test.h:172
void assert_pred_fn(Location l, X x, bool p)
Definition: test.h:118
void assert_fn(Location l, X x)
Definition: test.h:86
std::ostream & stream
Definition: test.h:55
void assert_eq_fn(Location l, X x, Y y)
Definition: test.h:96
#define assert(x)
Definition: test.h:30
void assert_leq_fn(Location l, X x, Y y)
Definition: test.h:107
void assert_neq_fn(Location l, X x, Y y)
Definition: test.h:150
void assert_list_eq_fn(Location loc, int c, X l, const typename X::Type check[])
Definition: test.h:127
~AssertFailed()
Definition: test.h:68
std::string fmt(const char *f,...)
Definition: string.cpp:123
void assert_die_fn(Location l)
Definition: test.cpp:6
int line
Definition: test.h:17
void beginAssertFailure()
Definition: test.h:159
Location(const char *f, int l, std::string st, int iter=-1)
Definition: test.h:19
AssertFailed(Location l, std::ostream &s=std::cerr)
Definition: test.h:58
const char * file
Definition: test.h:16
std::string stmt
Definition: test.h:18
void endAssertFailure()
Definition: test.h:163
bool expect
Definition: test.h:57