#ifndef _TESTUTIL_H
#define _TESTUTIL_H
#define check(assertion, msg) \
if (!(assertion)) { \
fprintf(stderr, "assertion failed: %s\n", msg); \
return 0; \
}
#define checkint(expected, actual, name) \
check(expected == actual, name " should be " #expected)
#define checkstr(expected, actual, name) \
check(!strcmp(actual, expected), name " should be '" expected "'")
#ifdef reset_vars
#define _reset reset_vars()
#else
#define _reset
#endif
#define test(NAME) \
{ \
_reset \
int result = NAME (); \
if (!result) { \
fprintf(stderr, "test failed: %s\n", #NAME); \
return 0; \
} \
}
#define succeed() return 1
#define fail() return 0
#endif