#ifndef __CLAY_TEST_H__ #define __CLAY_TEST_H__ #include void clay__assert( int condition, const char *file, int line, const char *error, const char *description, int should_abort); void cl_set_cleanup(void (*cleanup)(void *), void *opaque); /** * Assertion macros with explicit error message */ #define cl_must_pass_(expr, desc) clay__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 1) #define cl_must_fail_(expr, desc) clay__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 1) #define cl_assert_(expr, desc) clay__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 1) /** * Check macros with explicit error message */ #define cl_check_pass_(expr, desc) clay__assert((expr) >= 0, __FILE__, __LINE__, "Function call failed: " #expr, desc, 0) #define cl_check_fail_(expr, desc) clay__assert((expr) < 0, __FILE__, __LINE__, "Expected function call to fail: " #expr, desc, 0) #define cl_check_(expr, desc) clay__assert((expr) != 0, __FILE__, __LINE__, "Expression is not true: " #expr, desc, 0) /** * Assertion macros with no error message */ #define cl_must_pass(expr) cl_must_pass_((expr), NULL) #define cl_must_fail(expr) cl_must_fail_((expr), NULL) #define cl_assert(expr) cl_assert_((expr), NULL) /** * Check macros with no error message */ #define cl_check_pass(expr) cl_check_pass_((expr), NULL) #define cl_check_fail(expr) cl_check_fail_((expr), NULL) #define cl_check(expr) cl_check_((expr), NULL) /** * Forced failure/warning */ #define cl_fail(desc) clay__assert(0, __FILE__, __LINE__, "Test failed.", desc, 1) #define cl_warning(desc) clay__assert(0, __FILE__, __LINE__, "Warning during test execution:", desc, 0) #endif